annotate lib/MonetDB.rb @ 10:2ebc526bc7dd

Updated copyright.
author Sjoerd Mullender <sjoerd@acm.org>
date Fri, 06 Jan 2017 13:16:10 +0100 (2017-01-06)
parents aab36be83762
children 6abcfcdb4924
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1 # This Source Code Form is subject to the terms of the Mozilla Public
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
4 #
10
2ebc526bc7dd Updated copyright.
Sjoerd Mullender <sjoerd@acm.org>
parents: 0
diff changeset
5 # Copyright 1997 - July 2008 CWI, August 2008 - 2017 MonetDB B.V.
0
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
6
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
7 # = Introduction
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
8 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
9 # A typical sequence of events is as follows:
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
10 # Create a database instance (handle), invoke query using the database handle to send the statement to the server and get back a result set object.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
11 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
12 # A result set object has methods for fetching rows, moving around in the result set, obtaining column metadata, and releasing the result set.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
13 # A result set object is an instance of the MonetDBData class.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
14 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
15 # Records can be returned as arrays and iterators over the set.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
16 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
17 # A database handler (dbh) is and instance of the MonetDB class.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
18 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
19 # = Connection management
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
20 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
21 # connect - establish a new connection
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
22 # * user: username (default is monetdb)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
23 # * passwd: password (default is monetdb)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
24 # * lang: language (default is sql)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
25 # * host: server hostanme or ip (default is localhost)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
26 # * port: server port (default is 50000)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
27 # * db_name: name of the database to connect to
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
28 # * auth_type: hashing function to use during authentication (default is SHA1)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
29 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
30 # is_connected? - returns true if there is an active connection to a server, false otherwise
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
31 # reconnect - recconnect to a server
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
32 # close - terminate a connection
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
33 # auto_commit? - returns ture if the session is running in auto commit mode, false otherwise
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
34 # auto_commit - enable/disable auto commit mode.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
35 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
36 # query - fire a query
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
37 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
38 # Currently MAPI protocols 8 and 9 are supported.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
39 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
40 # = Managing record sets
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
41 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
42 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
43 # A record set is represented as an instance of the MonetDBData class; the class provides methods to manage retrieved data.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
44 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
45 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
46 # The following methods allow to iterate over data:
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
47 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
48 # fetch - iterates over the record set and retrieves one row at a time. Each row is returned as an array.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
49 # each_record - works as ruby each method. The method takes a block as parameter and yields each record to this block.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
50 # fetch_hash - iterates over the record set and retrieves one row at a time. Each row is returned as a hash.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
51 # each_record_as_hash - works as ruby each method. The method takes a block as parameter and yields each record, as hash, to this block
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
52 # fetch_all - returns all rows as a two dimensional array
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
53 # fetch_all_as_column_hash - returns all records as a hash with the column name as the keys and an array with all column values as values
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
54 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
55 # Information about the retrieved record set can be obtained via the following methods:
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
56 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
57 # num_rows - returns the number of rows present in the record set
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
58 # num_fields - returns the number of fields (columns) that compose the schema
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
59 # name_fields - returns the (ordered) name of the schema's columns
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
60 # type_fields - returns the (ordered) types list of the schema's columns
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
61 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
62 # To release a record set MonetDBData#free can be used.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
63 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
64 # = Type conversion
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
65 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
66 # All values from the database are converted to the closest ruby type, i.e: INTEGER to int, TIME to time, CLOB to string
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
67 # Some of the more complex datatypes are not recognized, such as INTERVAL, these are converted to strings
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
68 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
69 # = Transactions
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
70 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
71 # By default monetdb works in auto_commit mode. To turn this feature off MonetDB#auto_commit(flag=false) can be used.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
72 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
73 # Once auto_commit has been disable it is possible to start transactions, create/delete savepoints, rollback and commit with
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
74 # the usual SQL statements.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
75 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
76 # Savepoints IDs can be generated using the MonetDB#save method. To release a savepoint ID use MonetDB#release.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
77 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
78 # Savepoints can be accessed (as a stack) with the MonetDB#transactions method.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
79 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
80 # demo.rb contains usage example of the above mentioned methods.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
81
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
82 require_relative 'MonetDBConnection'
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
83 require_relative 'MonetDBData'
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
84 require_relative 'MonetDBExceptions'
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
85
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
86 class MonetDB
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
87 DEFAULT_USERNAME = "monetdb"
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
88 DEFAULT_PASSWORD = "monetdb"
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
89 DEFAULT_LANG = MonetDBConnection::LANG_SQL
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
90 DEFAULT_HOST = "127.0.0.1"
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
91 DEFAULT_PORT = 50000
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
92 DEFAULT_DATABASE = "test"
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
93 DEFAULT_AUTHTYPE = "SHA1"
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
94
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
95 def initalize()
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
96 @connection = nil
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
97 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
98
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
99 # Establish a new connection.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
100 # * username: username (default is monetdb)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
101 # * password: password (default is monetdb)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
102 # * lang: language (default is sql)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
103 # * host: server hostanme or ip (default is localhost)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
104 # * port: server port (default is 50000)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
105 # * db_name: name of the database to connect to
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
106 # * auth_type: hashing function to use during authentication (default is SHA1)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
107 def connect(username=DEFAULT_USERNAME, password=DEFAULT_PASSWORD, lang=DEFAULT_LANG, host=DEFAULT_HOST, port=DEFAULT_PORT, db_name=DEFAULT_DATABASE, auth_type=DEFAULT_AUTHTYPE)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
108 # TODO: handle pools of connections
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
109
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
110 @username = username
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
111 @password = password
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
112 @lang = lang
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
113 @host = host
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
114 @port = port
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
115 @db_name = db_name
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
116 @auth_type = auth_type
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
117
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
118 @connection = MonetDBConnection.new(user = @username, passwd = @password, lang = @lang, host = @host, port = @port)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
119 @connection.connect(@db_name, @auth_type)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
120 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
121
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
122 # Establish a new connection using named parameters.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
123 # * user: username (default is monetdb)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
124 # * passwd: password (default is monetdb)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
125 # * language: lang (default is sql)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
126 # * host: host to connect to (default is localhost)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
127 # * port: port to connect to (default is 50000)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
128 # * database: name of the database to connect to
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
129 # * auth_type: hashing function to use during authentication (default is SHA1)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
130 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
131 # Conventionally named parameters are passed as an hash.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
132 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
133 # Ruby 1.8:
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
134 # MonetDB::conn({ :user => "username", :passwd => "password", :database => "database"})
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
135 #
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
136 # Ruby 1.9:
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
137 # MonetDB::conn(user: "username", passwd: "password", database: "database")
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
138 def conn(options)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
139 user = options[:user] || DEFAULT_USERNAME
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
140 passwd = options[:passwd] || DEFAULT_PASSWORD
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
141 language = options[:language] || DEFAULT_LANG
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
142 host = options[:host] || DEFAULT_HOST
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
143 port = options[:port] || DEFAULT_PORT
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
144 database = options[:database] || DEFAULT_DATABASE
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
145 auth_type = options[:auth_type] || DEFAULT_AUTHTYPE
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
146
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
147 connect(user, passwd, language, host, port, database, auth_type)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
148 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
149
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
150 # Send a <b> user submitted </b> query to the server and store the response.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
151 # Returns and instance of MonetDBData.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
152 def query(q="")
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
153 if @connection != nil
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
154 @data = MonetDBData.new(@connection)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
155 @data.execute(q)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
156 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
157 return @data
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
158 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
159
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
160 # Return true if there exists a "connection" object
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
161 def is_connected?
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
162 if @connection == nil
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
163 return false
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
164 else
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
165 return true
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
166 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
167 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
168
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
169 # Reconnect to the server
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
170 def reconnect
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
171 if @connection != nil
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
172 self.close
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
173
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
174 @connection = MonetDBConnection.new(user = @username, passwd = @password, lang = @lang, host = @host, port = @port)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
175 @connection.connect(db_name = @db_name, auth_type = @auth_type)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
176 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
177 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
178
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
179 # Turn auto commit on/off
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
180 def auto_commit(flag=true)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
181 @connection.set_auto_commit(flag)
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
182 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
183
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
184 # Returns the current auto commit (on/off) settings.
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
185 def auto_commit?
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
186 @connection.auto_commit?
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
187 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
188
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
189 # Returns the name of the last savepoint in a transactions pool
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
190 def transactions
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
191 @connection.savepoint
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
192 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
193
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
194 # Create a new savepoint ID
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
195 def save
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
196 @connection.transactions.save
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
197 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
198
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
199 # Release a savepoint ID
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
200 def release
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
201 @connection.transactions.release
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
202 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
203
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
204 # Close an active connection
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
205 def close()
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
206 @connection.disconnect
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
207 @connection = nil
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
208 end
aab36be83762 Created a new repository for the Ruby driver for MonetDB.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
209 end