Mercurial > hg > monetdb-ruby
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 |
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 | 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 |