cubrid 0.6-x86-mswin32-60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (9) hide show
  1. data/ext/conn.c +405 -0
  2. data/ext/cubrid.c +235 -0
  3. data/ext/cubrid.h +98 -0
  4. data/ext/error.c +144 -0
  5. data/ext/extconf.rb +53 -0
  6. data/ext/oid.c +727 -0
  7. data/ext/stmt.c +1074 -0
  8. data/lib/cubrid.so +0 -0
  9. metadata +62 -0
data/ext/conn.c ADDED
@@ -0,0 +1,405 @@
1
+ /*
2
+ * Copyright (C) 2008 Search Solution Corporation. All rights reserved by Search Solution.
3
+ *
4
+ * Redistribution and use in source and binary forms, with or without modification,
5
+ * are permitted provided that the following conditions are met:
6
+ *
7
+ * - Redistributions of source code must retain the above copyright notice,
8
+ * this list of conditions and the following disclaimer.
9
+ *
10
+ * - Redistributions in binary form must reproduce the above copyright notice,
11
+ * this list of conditions and the following disclaimer in the documentation
12
+ * and/or other materials provided with the distribution.
13
+ *
14
+ * - Neither the name of the <ORGANIZATION> nor the names of its contributors
15
+ * may be used to endorse or promote products derived from this software without
16
+ * specific prior written permission.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
24
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
27
+ * OF SUCH DAMAGE.
28
+ *
29
+ */
30
+
31
+ #include "cubrid.h"
32
+
33
+ extern VALUE cConnection;
34
+
35
+ extern VALUE cubrid_stmt_new(Connection *con, char *stmt, int option);
36
+ extern VALUE cubrid_stmt_execute(int argc, VALUE* argv, VALUE self);
37
+ extern VALUE cubrid_stmt_fetch(VALUE self);
38
+ extern VALUE cubrid_stmt_close(VALUE self);
39
+ extern VALUE cubrid_oid_new(Connection *con, char *oid_str);
40
+
41
+ static void
42
+ cubrid_conn_free(void *p)
43
+ {
44
+ Connection *c = (Connection *)p;
45
+ T_CCI_ERROR error;
46
+
47
+ if (c->handle) {
48
+ cci_disconnect(c->handle, &error);
49
+ c->handle = 0;
50
+ }
51
+
52
+ free(p);
53
+ }
54
+
55
+ VALUE
56
+ cubrid_conn_new(char *host, int port, char *db, char *user, char *passwd)
57
+ {
58
+ VALUE conn;
59
+ Connection *c;
60
+ int handle;
61
+
62
+ handle = cci_connect(host, port, db, user, passwd);
63
+ if (handle < 0) {
64
+ cubrid_handle_error(handle, NULL);
65
+ return Qnil;
66
+ }
67
+
68
+ conn = Data_Make_Struct(cConnection, Connection, 0, cubrid_conn_free, c);
69
+
70
+ c->handle = handle;
71
+ strcpy(c->host, host);
72
+ c->port = port;
73
+ strcpy(c->db, db);
74
+ strcpy(c->user, user);
75
+ c->auto_commit = Qfalse;
76
+
77
+ return conn;
78
+ }
79
+
80
+ /* call-seq:
81
+ * close() -> nil
82
+ *
83
+ * 데이터베이스와의 연결을 헤제합니다. 이 연결로부터 생성된 Statement도 모두 close됩니다.
84
+ */
85
+ VALUE
86
+ cubrid_conn_close(VALUE self)
87
+ {
88
+ Connection *c;
89
+ T_CCI_ERROR error;
90
+
91
+ GET_CONN_STRUCT(self, c);
92
+
93
+ if (c->handle) {
94
+ cci_disconnect(c->handle, &error);
95
+ c->handle = 0;
96
+ }
97
+
98
+ return Qnil;
99
+ }
100
+
101
+ static VALUE
102
+ cubrid_conn_prepare_internal(int argc, VALUE* argv, VALUE self)
103
+ {
104
+ Connection *con;
105
+ VALUE sql, option;
106
+
107
+ GET_CONN_STRUCT(self, con);
108
+ CHECK_CONNECTION(con, Qnil);
109
+
110
+ rb_scan_args(argc, argv, "11", &sql, &option);
111
+
112
+ if (NIL_P(sql)) {
113
+ rb_raise(rb_eStandardError, "SQL is required.");
114
+ }
115
+
116
+ if (NIL_P(option)) {
117
+ option = INT2NUM(0);
118
+ }
119
+
120
+ return cubrid_stmt_new(con, StringValueCStr(sql), NUM2INT(option));
121
+ }
122
+
123
+ /* call-seq:
124
+ * prepare(sql <, option>) -> Statement
125
+ * prepare(sql <, option>) { |stmt| block } -> nil
126
+ *
127
+ * 주어진 SQL을 실행할 준비를 하고 Statement 객체를 반환합니다.
128
+ * SQL은 데이터베이스 서버로 보내져 파싱되어 실행할 수 있도록 준비됩니다.
129
+ *
130
+ * option으로 Cubrid::INCLUDE_OID를 줄 수 있는데, 이것은 SQL 실행 결과에 OID를 포함하도록 합니다.
131
+ * 실행 결과에 포함된 OID는 Statement.get_oid 메쏘드로 얻을 수 있습니다.
132
+ *
133
+ * block 주어지면 생성된 Statement 객체를 인수로 전달하여 block을 실행시킵니다.
134
+ * block의 수행이 끝나면 Statement 객체는 더이상 유효하지 않습니다.
135
+ *
136
+ * con = Cubrid.connect('demodb')
137
+ * stmt = con.prepare('SELECT * FROM db_user')
138
+ * stmt.execute
139
+ * r = stmt.fetch
140
+ * stmt.close
141
+ * con.close
142
+ *
143
+ * con.prepare('SELECT * FROM db_user') { |stmt|
144
+ * stmt.execute
145
+ * r = stmt.fetch
146
+ * }
147
+ * con.close
148
+ *
149
+ */
150
+ VALUE
151
+ cubrid_conn_prepare(int argc, VALUE* argv, VALUE self)
152
+ {
153
+ VALUE stmt;
154
+ Connection *con;
155
+
156
+ GET_CONN_STRUCT(self, con);
157
+
158
+ stmt = cubrid_conn_prepare_internal(argc, argv, self);
159
+
160
+ if (rb_block_given_p()) {
161
+ rb_yield(stmt);
162
+ cubrid_stmt_close(stmt);
163
+ return Qnil;
164
+ }
165
+
166
+ return stmt;
167
+ }
168
+
169
+ /* call-seq:
170
+ * query(sql <, option>) -> Statement
171
+ * query(sql <, option>) { |row| block } -> nil
172
+ *
173
+ * 주어진 SQL을 실행할 준비를 하고 실행까지 시킨 후 Statement 객체를 반환합니다.
174
+ * 따라서 Statement.execute를 수행할 필요없이 바로 결과를 받아올 수 있습니다.
175
+ *
176
+ * option으로 Cubrid::INCLUDE_OID를 줄 수 있는데, 이것은 prepare 메쏘드의 그것과 동일합니다.
177
+ *
178
+ * block 주어지면 Statement.fetch를 호출하여 얻어온 결과를 인수로 전달하여 block을 실행시킵니다.
179
+ * block은 SQL 실행 결과로 넘어온 모든 row 대해서 한번씩 호출됩니다.
180
+ * block이 끝나면 Statement 객체는 더 이상 유효하지 않습니다.
181
+ *
182
+ * con = Cubrid.connect('demodb')
183
+ * stmt = con.query('SELECT * FROM db_user')
184
+ * while row = stmt.fetch
185
+ * print row
186
+ * end
187
+ * stmt.close
188
+ * con.close
189
+ *
190
+ * stmt = con.query('SELECT * FROM db_user') { |row|
191
+ * print row
192
+ * }
193
+ * con.close
194
+ */
195
+ VALUE
196
+ cubrid_conn_query(int argc, VALUE* argv, VALUE self)
197
+ {
198
+ VALUE stmt;
199
+ Connection *con;
200
+
201
+ GET_CONN_STRUCT(self, con);
202
+
203
+ stmt = cubrid_conn_prepare_internal(argc, argv, self);
204
+ cubrid_stmt_execute(0, NULL, stmt);
205
+
206
+ if (rb_block_given_p()) {
207
+ VALUE row;
208
+
209
+ while(1) {
210
+ row = cubrid_stmt_fetch(stmt);
211
+ if (NIL_P(row)) {
212
+ break;
213
+ }
214
+ rb_yield(row);
215
+ }
216
+
217
+ cubrid_stmt_close(stmt);
218
+ return Qnil;
219
+ }
220
+
221
+ return stmt;
222
+ }
223
+
224
+ VALUE
225
+ cubrid_conn_end_tran(Connection *con, int type)
226
+ {
227
+ int res;
228
+ T_CCI_ERROR error;
229
+
230
+ CHECK_CONNECTION(con, Qnil);
231
+
232
+ res = cci_end_tran(con->handle, type, &error);
233
+ if (res < 0){
234
+ cubrid_handle_error(res, &error);
235
+ }
236
+
237
+ return Qnil;
238
+ }
239
+
240
+ /* call-seq:
241
+ * commit() -> nil
242
+ *
243
+ * 트랜잭션을 commit으로 종료합니다.
244
+ * 트랜잭션이 종료되면 이 연결로 부터 생성된 모든 Statement 객체도 모두 close 됩니다.
245
+ *
246
+ */
247
+ VALUE
248
+ cubrid_conn_commit(VALUE self)
249
+ {
250
+ Connection *con;
251
+
252
+ GET_CONN_STRUCT(self, con);
253
+ cubrid_conn_end_tran(con, CCI_TRAN_COMMIT);
254
+
255
+ return Qnil;
256
+ }
257
+
258
+ /* call-seq:
259
+ * rollback() -> nil
260
+ *
261
+ * 트랜잭션을 rollback으로 종료합니다.
262
+ * 트랜잭션이 종료되면 이 연결로 부터 생성된 모든 Statement 객체도 모두 close 됩니다.
263
+ *
264
+ */
265
+ VALUE
266
+ cubrid_conn_rollback(VALUE self)
267
+ {
268
+ Connection *con;
269
+
270
+ GET_CONN_STRUCT(self, con);
271
+ cubrid_conn_end_tran(con, CCI_TRAN_ROLLBACK);
272
+
273
+ return Qnil;
274
+ }
275
+
276
+ /* call-seq:
277
+ * auto_commit? -> true or false
278
+ *
279
+ * Connection이 auto commit 모드인지 아닌지를 반환합니다.
280
+ * Connection은 기본적으로 auto commit 모드가 아니며, auto_commit= 메쏘드로 auto commit 여부를 설정할 수 있습니다.
281
+ *
282
+ */
283
+ VALUE
284
+ cubrid_conn_get_auto_commit(VALUE self)
285
+ {
286
+ Connection *con;
287
+
288
+ GET_CONN_STRUCT(self, con);
289
+ CHECK_CONNECTION(con, Qnil);
290
+
291
+ return con->auto_commit;
292
+ }
293
+
294
+ /* call-seq:
295
+ * auto_commit= true or false -> nil
296
+ *
297
+ * Connection의 auto commit 모드를 설정합니다.
298
+ * auto commit이 true로 설정되면 Statement.execute의 실행이 끝난 후 바로 commit이 실행됩니다.
299
+ *
300
+ */
301
+ VALUE
302
+ cubrid_conn_set_auto_commit(VALUE self, VALUE auto_commit)
303
+ {
304
+ Connection *con;
305
+
306
+ GET_CONN_STRUCT(self, con);
307
+ CHECK_CONNECTION(con, self);
308
+
309
+ con->auto_commit = auto_commit;
310
+ return Qnil;
311
+ }
312
+
313
+ /* call-seq:
314
+ * to_s() -> string
315
+ *
316
+ * Connection의 현재 연결 정보를 문자열로 반환합니다.
317
+ */
318
+ VALUE
319
+ cubrid_conn_to_s(VALUE self)
320
+ {
321
+ char buf[MAX_STR_LEN];
322
+ Connection *con;
323
+
324
+ GET_CONN_STRUCT(self, con);
325
+ sprintf(buf, "host: %s, port: %d, db: %s, user: %s", con->host, con->port, con->db, con->user);
326
+
327
+ return rb_str_new2(buf);
328
+ }
329
+
330
+ /* call-seq:
331
+ * glo_new(classname <, filename>) -> Oid
332
+ *
333
+ * 새로운 GLO 객체를 생성하고 Oid로 반환합니다.
334
+ * CUBRID는 바이너리 데이터를 저장할 수 있도록 GLO를 제공합니다. GLO 객체는 OID로 직접 접근할 수 있습니다.
335
+ *
336
+ * filename이 주어지면 해당 파일의 데이터를 데이터베이스에 저장합니다. 주어지지 않으면 빈 GLO 객체를 생성합니다.
337
+ *
338
+ * con = Cubrid.connect('subway')
339
+ * con.query('create table attachfile under glo (name string)')
340
+ * con.commit
341
+ *
342
+ * glo = con.glo_new('attachfile', 'pic.jpg')
343
+ * glo.glo_size #=> 1234
344
+ *
345
+ * glo = con.glo_new('attachfile')
346
+ * glo.glo_size #=> 0
347
+ * glo.glo_save('pic.jpg')
348
+ * glo.glo_size #=> 1234
349
+ */
350
+ VALUE
351
+ cubrid_conn_glo_new(VALUE self, VALUE table, VALUE file)
352
+ {
353
+ char oid_str[MAX_STR_LEN], *table_name, *file_name;
354
+ int res;
355
+ T_CCI_ERROR error;
356
+ Connection *con;
357
+
358
+ GET_CONN_STRUCT(self, con);
359
+ CHECK_CONNECTION(con, Qnil);
360
+
361
+ if (NIL_P(table)) {
362
+ rb_raise(rb_eArgError, "class name is required.");
363
+ return Qnil;
364
+ }
365
+ table_name = StringValueCStr(table);
366
+
367
+ if (NIL_P(file)) {
368
+ file_name = NULL;
369
+ } else {
370
+ file_name = StringValueCStr(file);
371
+ }
372
+
373
+ res = cci_glo_new(con->handle, table_name, file_name, oid_str, &error);
374
+ if (res < 0) {
375
+ cubrid_handle_error(res, &error);
376
+ return Qnil;
377
+ }
378
+
379
+ return cubrid_oid_new(con, oid_str);
380
+ }
381
+
382
+ /* call-seq:
383
+ * server_version() -> string
384
+ *
385
+ * 연결된 서버의 버전을 문자열로 반환합니다.
386
+ */
387
+ VALUE
388
+ cubrid_conn_server_version(VALUE self)
389
+ {
390
+ char ver_str[MAX_STR_LEN];
391
+ int res;
392
+ Connection *con;
393
+
394
+ GET_CONN_STRUCT(self, con);
395
+ CHECK_CONNECTION(con, Qnil);
396
+
397
+ res = cci_get_db_version(con->handle, ver_str, MAX_STR_LEN);
398
+ if (res < 0) {
399
+ cubrid_handle_error(res, NULL);
400
+ return Qnil;
401
+ }
402
+
403
+ return rb_str_new2(ver_str);
404
+ }
405
+
data/ext/cubrid.c ADDED
@@ -0,0 +1,235 @@
1
+ /*
2
+ * Copyright (C) 2008 Search Solution Corporation. All rights reserved by Search Solution.
3
+ *
4
+ * Redistribution and use in source and binary forms, with or without modification,
5
+ * are permitted provided that the following conditions are met:
6
+ *
7
+ * - Redistributions of source code must retain the above copyright notice,
8
+ * this list of conditions and the following disclaimer.
9
+ *
10
+ * - Redistributions in binary form must reproduce the above copyright notice,
11
+ * this list of conditions and the following disclaimer in the documentation
12
+ * and/or other materials provided with the distribution.
13
+ *
14
+ * - Neither the name of the <ORGANIZATION> nor the names of its contributors
15
+ * may be used to endorse or promote products derived from this software without
16
+ * specific prior written permission.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21
+ * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
24
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
27
+ * OF SUCH DAMAGE.
28
+ *
29
+ */
30
+
31
+ #include "cubrid.h"
32
+
33
+ char *cci_client_name = "CCI"; /* for lower than 7.0 */
34
+ VALUE cCubrid, cConnection, cStatement, cOid;
35
+ extern VALUE cubrid_conn_new(char *host, int port, char *db, char *user, char *passwd);
36
+
37
+ /* call-seq:
38
+ * connect(db, host, port, user, password) -> Connection
39
+ *
40
+ * 데이터베이스 서버에 연결하고 Connection 객체를 반환합니다.
41
+ * db는 반드시 주어져야 하고, host, port, user, password는 옵션입니다.
42
+ * 이들의 디폴트 값은 각각 'localhost', 30000, 'PUBLIC', '' 입니다.
43
+ *
44
+ * con = Cubrid.connect('demodb', '192.168.1.1', '33000', 'foo','bar')
45
+ * con.to_s #=> host: 192.168.1.1, port: 33000, db: demodb, user: foo
46
+ *
47
+ * con = Cubrid.connect('subway')
48
+ * con.to_s #=> host: localhost, port: 30000, db: subway, user: PUBLIC
49
+ *
50
+ * con = Cubrid.connect('subway', '192.168.1.2')
51
+ * con.to_s #=> host: 192.168.1.2, port: 33000, db: subway, user: PUBLIC
52
+ */
53
+ VALUE cubrid_connect(int argc, VALUE* argv, VALUE self)
54
+ {
55
+ VALUE host, port, db, user, passwd;
56
+
57
+ rb_scan_args(argc, argv, "14", &db, &host, &port, &user, &passwd);
58
+
59
+ if (NIL_P(db))
60
+ rb_raise(rb_eStandardError, "DB name is required.");
61
+
62
+ if (NIL_P(host))
63
+ host = rb_str_new2("localhost");
64
+
65
+ if (NIL_P(port))
66
+ port = INT2NUM(30000);
67
+
68
+ if (NIL_P(user))
69
+ user = rb_str_new2("PUBLIC");
70
+
71
+ if (NIL_P(passwd))
72
+ passwd = rb_str_new2("");
73
+
74
+ return cubrid_conn_new(StringValueCStr(host), NUM2INT(port),
75
+ StringValueCStr(db), StringValueCStr(user), StringValueCStr(passwd));
76
+ }
77
+
78
+ /* from conn.c */
79
+ extern VALUE cubrid_conn_close(VALUE self);
80
+ extern VALUE cubrid_conn_prepare(int argc, VALUE* argv, VALUE self);
81
+ extern VALUE cubrid_conn_query(int argc, VALUE* argv, VALUE self);
82
+ extern VALUE cubrid_conn_commit(VALUE self);
83
+ extern VALUE cubrid_conn_rollback(VALUE self);
84
+ extern VALUE cubrid_conn_get_auto_commit(VALUE self);
85
+ extern VALUE cubrid_conn_set_auto_commit(VALUE self, VALUE auto_commit);
86
+ extern VALUE cubrid_conn_to_s(VALUE self);
87
+ extern VALUE cubrid_conn_glo_new(VALUE self, VALUE table, VALUE file);
88
+ extern VALUE cubrid_conn_server_version(VALUE self);
89
+
90
+ /* from stmt.c */
91
+ extern VALUE cubrid_stmt_close(VALUE self);
92
+ extern VALUE cubrid_stmt_bind(int argc, VALUE* argv, VALUE self);
93
+ extern VALUE cubrid_stmt_execute(int argc, VALUE* argv, VALUE self);
94
+ extern VALUE cubrid_stmt_affected_rows(VALUE self);
95
+ extern VALUE cubrid_stmt_fetch(VALUE self);
96
+ extern VALUE cubrid_stmt_fetch_hash(VALUE self);
97
+ extern VALUE cubrid_stmt_each(VALUE self);
98
+ extern VALUE cubrid_stmt_each_hash(VALUE self);
99
+ extern VALUE cubrid_stmt_column_info(VALUE self);
100
+ extern VALUE cubrid_stmt_get_oid(VALUE self);
101
+
102
+ /* from oid.c */
103
+ extern VALUE cubrid_oid_to_s(VALUE self);
104
+ extern VALUE cubrid_oid_table(VALUE self);
105
+ extern VALUE cubrid_oid_refresh(VALUE self);
106
+ extern VALUE cubrid_oid_get_value(VALUE self, VALUE attr_name);
107
+ extern VALUE cubrid_oid_set_value(VALUE self, VALUE attr_name, VALUE val);
108
+ extern VALUE cubrid_oid_save(VALUE self);
109
+ extern VALUE cubrid_oid_drop(VALUE self);
110
+ extern VALUE cubrid_oid_lock(VALUE self);
111
+ extern VALUE cubrid_oid_glo_load(VALUE self, VALUE file_name);
112
+ extern VALUE cubrid_oid_glo_save(VALUE self, VALUE file_name);
113
+ extern VALUE cubrid_oid_glo_drop(VALUE self);
114
+ extern VALUE cubrid_oid_glo_size(VALUE self);
115
+ extern VALUE cubrid_oid_each(VALUE self);
116
+ extern VALUE cubrid_oid_method_missing(int argc, VALUE* argv, VALUE self);
117
+ extern VALUE cubrid_oid_to_hash(VALUE self);
118
+
119
+ /* CUBRID[http://www.cubrid.com] ruby driver
120
+ *
121
+ * CUBRID ruby driver는 ruby에서 CUBRID 데이터베이스 서버에 접속하여 질의를 할 수 있도록 해주는 모듈입니다.
122
+ *
123
+ * * Connection
124
+ * * Statement
125
+ * * Oid
126
+ *
127
+ * con = Cubrid.connect('demodb', '192.168.1.1', '33000', 'foo','bar')
128
+ * stmt = con.prepare('SELECT * FROM db_user')
129
+ * stmt.execute
130
+ * stmt.each { |row|
131
+ * print row
132
+ * }
133
+ * stmt.close
134
+ * con.close
135
+ *
136
+ */
137
+ void Init_cubrid()
138
+ {
139
+ cCubrid = rb_define_module("Cubrid");
140
+ rb_define_module_function(cCubrid, "connect", cubrid_connect, -1);
141
+
142
+ rb_define_const(cCubrid, "CHAR", INT2NUM(CCI_U_TYPE_CHAR));
143
+ rb_define_const(cCubrid, "VARCHAR", INT2NUM(CCI_U_TYPE_STRING));
144
+ rb_define_const(cCubrid, "STRING", INT2NUM(CCI_U_TYPE_STRING));
145
+ rb_define_const(cCubrid, "NCHAR", INT2NUM(CCI_U_TYPE_NCHAR));
146
+ rb_define_const(cCubrid, "VARNCHAR", INT2NUM(CCI_U_TYPE_VARNCHAR));
147
+ rb_define_const(cCubrid, "BIT", INT2NUM(CCI_U_TYPE_BIT));
148
+ rb_define_const(cCubrid, "VARBIT", INT2NUM(CCI_U_TYPE_VARBIT));
149
+ rb_define_const(cCubrid, "NUMERIC", INT2NUM(CCI_U_TYPE_NUMERIC));
150
+ rb_define_const(cCubrid, "INT", INT2NUM(CCI_U_TYPE_INT));
151
+ rb_define_const(cCubrid, "SHORT", INT2NUM(CCI_U_TYPE_SHORT));
152
+ rb_define_const(cCubrid, "MONETARY", INT2NUM(CCI_U_TYPE_MONETARY));
153
+ rb_define_const(cCubrid, "FLOAT", INT2NUM(CCI_U_TYPE_FLOAT));
154
+ rb_define_const(cCubrid, "DOUBLE", INT2NUM(CCI_U_TYPE_DOUBLE));
155
+ rb_define_const(cCubrid, "DATE", INT2NUM(CCI_U_TYPE_DATE));
156
+ rb_define_const(cCubrid, "TIME", INT2NUM(CCI_U_TYPE_TIME));
157
+ rb_define_const(cCubrid, "TIMESTAMP", INT2NUM(CCI_U_TYPE_TIMESTAMP));
158
+ rb_define_const(cCubrid, "SET", INT2NUM(CCI_U_TYPE_SET));
159
+ rb_define_const(cCubrid, "MULTISET", INT2NUM(CCI_U_TYPE_MULTISET));
160
+ rb_define_const(cCubrid, "SEQUENCE", INT2NUM(CCI_U_TYPE_SEQUENCE));
161
+ rb_define_const(cCubrid, "OBJECT", INT2NUM(CCI_U_TYPE_OBJECT));
162
+
163
+ rb_define_const(cCubrid, "INCLUDE_OID", INT2NUM(CCI_PREPARE_INCLUDE_OID));
164
+ rb_define_const(cCubrid, "READ_LOCK", INT2NUM(CCI_OID_LOCK_READ));
165
+ rb_define_const(cCubrid, "WRITE_LOCK", INT2NUM(CCI_OID_LOCK_WRITE));
166
+
167
+ /* connection */
168
+ cConnection = rb_define_class_under(cCubrid, "Connection", rb_cObject);
169
+ rb_define_method(cConnection, "close", cubrid_conn_close, 0); /* in conn.c */
170
+ rb_define_method(cConnection, "commit", cubrid_conn_commit, 0); /* in conn.c */
171
+ rb_define_method(cConnection, "rollback", cubrid_conn_rollback, 0); /* in conn.c */
172
+ rb_define_method(cConnection, "prepare", cubrid_conn_prepare, -1); /* in conn.c */
173
+ rb_define_method(cConnection, "query", cubrid_conn_query, -1); /* in conn.c */
174
+ rb_define_method(cConnection, "auto_commit?", cubrid_conn_get_auto_commit, 0); /* in conn.c */
175
+ rb_define_method(cConnection, "auto_commit=", cubrid_conn_set_auto_commit, 1); /* in conn.c */
176
+ rb_define_method(cConnection, "to_s", cubrid_conn_to_s, 0); /* in conn.c */
177
+ rb_define_method(cConnection, "glo_new", cubrid_conn_glo_new, 2); /* in conn.c */
178
+ rb_define_method(cConnection, "server_version", cubrid_conn_server_version, 0); /* in conn.c */
179
+
180
+ /* statement */
181
+ cStatement = rb_define_class_under(cCubrid, "Statement", rb_cObject);
182
+ rb_define_method(cStatement, "bind", cubrid_stmt_bind, -1); /* in stmt.c */
183
+ rb_define_method(cStatement, "execute", cubrid_stmt_execute, -1); /* in stmt.c */
184
+ rb_define_method(cStatement, "affected_rows", cubrid_stmt_affected_rows, 0); /* in stmt.c */
185
+ rb_define_method(cStatement, "column_info", cubrid_stmt_column_info, 0); /* in stmt.c */
186
+ rb_define_method(cStatement, "fetch", cubrid_stmt_fetch, 0); /* in stmt.c */
187
+ rb_define_method(cStatement, "fetch_hash", cubrid_stmt_fetch_hash, 0); /* in stmt.c */
188
+ rb_define_method(cStatement, "each", cubrid_stmt_each, 0); /* in stmt.c */
189
+ rb_define_method(cStatement, "each_hash", cubrid_stmt_each_hash, 0); /* in stmt.c */
190
+ rb_define_method(cStatement, "close", cubrid_stmt_close, 0); /* in stmt.c */
191
+ rb_define_method(cStatement, "get_oid", cubrid_stmt_get_oid, 0); /* in stmt.c */
192
+ /* stmt.to_s */
193
+
194
+ /* oid */
195
+ cOid = rb_define_class_under(cCubrid, "Oid", rb_cObject);
196
+ rb_define_method(cOid, "to_s", cubrid_oid_to_s, 0); /* in oid.c */
197
+ rb_define_method(cOid, "table", cubrid_oid_table, 0); /* in oid.c */
198
+ rb_define_method(cOid, "[]", cubrid_oid_get_value, 1); /* in oid.c */
199
+ rb_define_method(cOid, "[]=", cubrid_oid_set_value, 2); /* in oid.c */
200
+ rb_define_method(cOid, "each", cubrid_oid_each, 0); /* in oid.c */
201
+ rb_define_method(cOid, "refresh", cubrid_oid_refresh, 0); /* in oid.c */
202
+ rb_define_method(cOid, "save", cubrid_oid_save, 0); /* in oid.c */
203
+ rb_define_method(cOid, "drop", cubrid_oid_drop, 0); /* in oid.c */
204
+ rb_define_method(cOid, "lock", cubrid_oid_lock, 1); /* in oid.c */
205
+ rb_define_method(cOid, "to_hash", cubrid_oid_to_hash, 0); /* in oid.c */
206
+ rb_define_method(cOid, "glo_load", cubrid_oid_glo_load, 1); /* in oid.c */
207
+ rb_define_method(cOid, "glo_save", cubrid_oid_glo_save, 1); /* in oid.c */
208
+ rb_define_method(cOid, "glo_drop", cubrid_oid_glo_drop, 0); /* in oid.c */
209
+ rb_define_method(cOid, "glo_size", cubrid_oid_glo_size, 0); /* in oid.c */
210
+ rb_define_method(cOid, "method_missing", cubrid_oid_method_missing, -1); /* in oid.c */
211
+ }
212
+
213
+ /* Document-class: Cubrid::Connection
214
+ * Connection 클래스는 데이터베이스 서버에 대한 연결을 유지하고 트랜잭션을 연산을 수행합니다.
215
+ */
216
+
217
+ /* Document-class: Cubrid::Statement
218
+ * Statement 클래스는 질의문을 수행하고 그 결과를 반환합니다.
219
+ */
220
+
221
+ /* Document-class: Cubrid::Oid
222
+ * Oid 클래스는 CUBRID instance에 대하여 직접 연산을 수행할 수 있도록 합니다.
223
+ * CUBRID는 저장되어 있는 instance들의 고유한 식별자를 OID라는 이름으로 제공합니다.
224
+ * OID를 통해서 직접 해당하는 instance에 접근하여 read/write/update/delete 연산을 할 수 있습니다.
225
+ *
226
+ */
227
+
228
+ /* TODO:
229
+ bind method & stored procedure
230
+ save point
231
+ db parameter : isolation level, max result count, lock time out, ..
232
+ glo : load to buffer, save from buffer, performance task
233
+ schema infomation
234
+ */
235
+