cubrid 9.3.0 → 10.1.0
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.
- checksums.yaml +7 -0
- data/README.rdoc +6 -5
- data/ext/conn.c +42 -64
- data/ext/cubrid.c +197 -194
- data/ext/cubrid.h +98 -192
- data/ext/error.c +144 -151
- data/ext/extconf.rb +19 -58
- data/ext/stmt.c +1019 -1044
- metadata +32 -30
- data/ext/build_cci.sh +0 -19
- data/ext/cci-src.tar.bz2 +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
data.tar.gz: 45c8d580728c2b8fd878e6dffc96898ef99e7950
|
4
|
+
metadata.gz: 652b2d966b756120b7e8ac3c8e9c2884227f4c32
|
5
|
+
SHA512:
|
6
|
+
data.tar.gz: 298d7d57f3d33937247d05a2e4fc07f62e5e0ab22487083466fe3958430210a7965baa813ba2919db94ba577efea73b6d71eca4f3f2b168cdc8bf1a45d162740
|
7
|
+
metadata.gz: c0aede34b7995c1f2107c8ccb8b528b280466fe7dd491c9a42f14c2c5ac4b811e1da5a187071e322381246a1c4f9c82dcef66e710cd1d6d4cf160387a1217893
|
data/README.rdoc
CHANGED
@@ -4,7 +4,6 @@
|
|
4
4
|
|
5
5
|
This is a Ruby Driver and ActiveRecord Adapter for CUBRID Database.
|
6
6
|
|
7
|
-
== Installation
|
8
7
|
== Installation
|
9
8
|
|
10
9
|
1. cd ext/
|
@@ -23,9 +22,11 @@ This is a Ruby Driver and ActiveRecord Adapter for CUBRID Database.
|
|
23
22
|
|
24
23
|
* Cross-platform.
|
25
24
|
|
26
|
-
* Compatible with CUBRID
|
25
|
+
* Compatible with CUBRID 10.1.0.
|
26
|
+
|
27
|
+
* Compatible with Ruby 1.8.7.
|
27
28
|
|
28
|
-
*
|
29
|
+
* Ruby 1.9.1 is not supported yet.
|
29
30
|
|
30
31
|
== Synopsis
|
31
32
|
|
@@ -35,7 +36,7 @@ Use Case:
|
|
35
36
|
|
36
37
|
#1: @con = Cubrid.connect('dbname')
|
37
38
|
#2: @con = Cubrid.connect('dbname', 'host', 'port', 'username', 'password')
|
38
|
-
@con = Cubrid.connect('demodb', '
|
39
|
+
@con = Cubrid.connect('demodb', 'localhost', '30000', 'public', '')
|
39
40
|
|
40
41
|
puts @con.server_version
|
41
42
|
|
@@ -55,4 +56,4 @@ Use Case:
|
|
55
56
|
|
56
57
|
Author :: NHN Corp. <cubrid_ruby@nhncorp.com>
|
57
58
|
Copyright :: Copyright (c) 2010 Search Solution Corporation
|
58
|
-
License :: Ruby's
|
59
|
+
License :: Ruby's
|
data/ext/conn.c
CHANGED
@@ -56,12 +56,12 @@ cubrid_conn_new(char *host, int port, char *db, char *user, char *passwd)
|
|
56
56
|
{
|
57
57
|
VALUE conn;
|
58
58
|
Connection *c;
|
59
|
-
int handle
|
60
|
-
T_CCI_ERROR error;
|
59
|
+
int handle;
|
61
60
|
|
62
|
-
handle =
|
61
|
+
handle = cci_connect(host, port, db, user, passwd);
|
63
62
|
if (handle < 0) {
|
64
|
-
cubrid_handle_error(handle,
|
63
|
+
cubrid_handle_error(handle, NULL);
|
64
|
+
return Qnil;
|
65
65
|
}
|
66
66
|
|
67
67
|
conn = Data_Make_Struct(cConnection, Connection, 0, cubrid_conn_free, c);
|
@@ -71,13 +71,7 @@ cubrid_conn_new(char *host, int port, char *db, char *user, char *passwd)
|
|
71
71
|
c->port = port;
|
72
72
|
strcpy(c->db, db);
|
73
73
|
strcpy(c->user, user);
|
74
|
-
c->auto_commit =
|
75
|
-
|
76
|
-
res = cci_set_autocommit(handle,CCI_AUTOCOMMIT_TRUE);
|
77
|
-
if (res < 0)
|
78
|
-
{
|
79
|
-
cubrid_handle_error (res, NULL);
|
80
|
-
}
|
74
|
+
c->auto_commit = Qfalse;
|
81
75
|
|
82
76
|
return conn;
|
83
77
|
}
|
@@ -85,6 +79,7 @@ cubrid_conn_new(char *host, int port, char *db, char *user, char *passwd)
|
|
85
79
|
/* call-seq:
|
86
80
|
* close() -> nil
|
87
81
|
*
|
82
|
+
* 데이터베이스와의 연결을 헤제합니다. 이 연결로부터 생성된 Statement도 모두 close됩니다.
|
88
83
|
*/
|
89
84
|
VALUE
|
90
85
|
cubrid_conn_close(VALUE self)
|
@@ -128,6 +123,15 @@ cubrid_conn_prepare_internal(int argc, VALUE* argv, VALUE self)
|
|
128
123
|
* prepare(sql <, option>) -> Statement
|
129
124
|
* prepare(sql <, option>) { |stmt| block } -> nil
|
130
125
|
*
|
126
|
+
* 주어진 SQL을 실행할 준비를 하고 Statement 객체를 반환합니다.
|
127
|
+
* SQL은 데이터베이스 서버로 보내져 파싱되어 실행할 수 있도록 준비됩니다.
|
128
|
+
*
|
129
|
+
* option으로 Cubrid::INCLUDE_OID를 줄 수 있는데, 이것은 SQL 실행 결과에 OID를 포함하도록 합니다.
|
130
|
+
* 실행 결과에 포함된 OID는 Statement.get_oid 메쏘드로 얻을 수 있습니다.
|
131
|
+
*
|
132
|
+
* block 주어지면 생성된 Statement 객체를 인수로 전달하여 block을 실행시킵니다.
|
133
|
+
* block의 수행이 끝나면 Statement 객체는 더이상 유효하지 않습니다.
|
134
|
+
*
|
131
135
|
* con = Cubrid.connect('demodb')
|
132
136
|
* stmt = con.prepare('SELECT * FROM db_user')
|
133
137
|
* stmt.execute
|
@@ -165,6 +169,15 @@ cubrid_conn_prepare(int argc, VALUE* argv, VALUE self)
|
|
165
169
|
* query(sql <, option>) -> Statement
|
166
170
|
* query(sql <, option>) { |row| block } -> nil
|
167
171
|
*
|
172
|
+
* 주어진 SQL을 실행할 준비를 하고 실행까지 시킨 후 Statement 객체를 반환합니다.
|
173
|
+
* 따라서 Statement.execute를 수행할 필요없이 바로 결과를 받아올 수 있습니다.
|
174
|
+
*
|
175
|
+
* option으로 Cubrid::INCLUDE_OID를 줄 수 있는데, 이것은 prepare 메쏘드의 그것과 동일합니다.
|
176
|
+
*
|
177
|
+
* block 주어지면 Statement.fetch를 호출하여 얻어온 결과를 인수로 전달하여 block을 실행시킵니다.
|
178
|
+
* block은 SQL 실행 결과로 넘어온 모든 row 대해서 한번씩 호출됩니다.
|
179
|
+
* block이 끝나면 Statement 객체는 더 이상 유효하지 않습니다.
|
180
|
+
*
|
168
181
|
* con = Cubrid.connect('demodb')
|
169
182
|
* stmt = con.query('SELECT * FROM db_user')
|
170
183
|
* while row = stmt.fetch
|
@@ -225,6 +238,10 @@ cubrid_conn_end_tran(Connection *con, int type)
|
|
225
238
|
|
226
239
|
/* call-seq:
|
227
240
|
* commit() -> nil
|
241
|
+
*
|
242
|
+
* 트랜잭션을 commit으로 종료합니다.
|
243
|
+
* 트랜잭션이 종료되면 이 연결로 부터 생성된 모든 Statement 객체도 모두 close 됩니다.
|
244
|
+
*
|
228
245
|
*/
|
229
246
|
VALUE
|
230
247
|
cubrid_conn_commit(VALUE self)
|
@@ -239,6 +256,9 @@ cubrid_conn_commit(VALUE self)
|
|
239
256
|
|
240
257
|
/* call-seq:
|
241
258
|
* rollback() -> nil
|
259
|
+
*
|
260
|
+
* 트랜잭션을 rollback으로 종료합니다.
|
261
|
+
* 트랜잭션이 종료되면 이 연결로 부터 생성된 모든 Statement 객체도 모두 close 됩니다.
|
242
262
|
*
|
243
263
|
*/
|
244
264
|
VALUE
|
@@ -251,47 +271,13 @@ cubrid_conn_rollback(VALUE self)
|
|
251
271
|
|
252
272
|
return Qnil;
|
253
273
|
}
|
254
|
-
/* call-seq:
|
255
|
-
* last_insert_id? -> last_insert_id
|
256
|
-
*
|
257
|
-
*/
|
258
|
-
|
259
|
-
VALUE
|
260
|
-
cubrid_conn_get_last_insert_id(VALUE self)
|
261
|
-
{
|
262
|
-
Connection *con;
|
263
|
-
char *name = NULL;
|
264
|
-
char ret[1024] = { '\0' };
|
265
|
-
int res;
|
266
|
-
T_CCI_ERROR error;
|
267
|
-
|
268
|
-
GET_CONN_STRUCT(self, con);
|
269
|
-
CHECK_CONNECTION(con, Qnil);
|
270
|
-
|
271
|
-
/* cci_last_id set last_id as allocated string */
|
272
|
-
res = cci_get_last_insert_id (con->handle, &name, &error);
|
273
|
-
|
274
|
-
if (res < 0)
|
275
|
-
{
|
276
|
-
cubrid_handle_error (res, &error);
|
277
|
-
return Qnil;
|
278
|
-
}
|
279
|
-
|
280
|
-
if (!name)
|
281
|
-
{
|
282
|
-
return Qnil;
|
283
|
-
}
|
284
|
-
else
|
285
|
-
{
|
286
|
-
strncpy (ret, name, sizeof (ret) - 1);
|
287
|
-
}
|
288
|
-
|
289
|
-
return rb_cstr2inum(ret, 10);
|
290
|
-
}
|
291
|
-
|
292
274
|
|
293
275
|
/* call-seq:
|
294
276
|
* auto_commit? -> true or false
|
277
|
+
*
|
278
|
+
* Connection이 auto commit 모드인지 아닌지를 반환합니다.
|
279
|
+
* Connection은 기본적으로 auto commit 모드가 아니며, auto_commit= 메쏘드로 auto commit 여부를 설정할 수 있습니다.
|
280
|
+
*
|
295
281
|
*/
|
296
282
|
VALUE
|
297
283
|
cubrid_conn_get_auto_commit(VALUE self)
|
@@ -306,30 +292,19 @@ cubrid_conn_get_auto_commit(VALUE self)
|
|
306
292
|
|
307
293
|
/* call-seq:
|
308
294
|
* auto_commit= true or false -> nil
|
295
|
+
*
|
296
|
+
* Connection의 auto commit 모드를 설정합니다.
|
297
|
+
* auto commit이 true로 설정되면 Statement.execute의 실행이 끝난 후 바로 commit이 실행됩니다.
|
298
|
+
*
|
309
299
|
*/
|
310
300
|
VALUE
|
311
301
|
cubrid_conn_set_auto_commit(VALUE self, VALUE auto_commit)
|
312
302
|
{
|
313
303
|
Connection *con;
|
314
|
-
int res=0;
|
315
304
|
|
316
305
|
GET_CONN_STRUCT(self, con);
|
317
306
|
CHECK_CONNECTION(con, self);
|
318
307
|
|
319
|
-
if(auto_commit == Qtrue)
|
320
|
-
{
|
321
|
-
res = cci_set_autocommit(con->handle,CCI_AUTOCOMMIT_TRUE);
|
322
|
-
}
|
323
|
-
else
|
324
|
-
{
|
325
|
-
res = cci_set_autocommit(con->handle,CCI_AUTOCOMMIT_FALSE);
|
326
|
-
}
|
327
|
-
|
328
|
-
if (res < 0)
|
329
|
-
{
|
330
|
-
cubrid_handle_error (res, NULL);
|
331
|
-
return Qnil;
|
332
|
-
}
|
333
308
|
con->auto_commit = auto_commit;
|
334
309
|
return Qnil;
|
335
310
|
}
|
@@ -337,6 +312,7 @@ cubrid_conn_set_auto_commit(VALUE self, VALUE auto_commit)
|
|
337
312
|
/* call-seq:
|
338
313
|
* to_s() -> string
|
339
314
|
*
|
315
|
+
* Connection의 현재 연결 정보를 문자열로 반환합니다.
|
340
316
|
*/
|
341
317
|
VALUE
|
342
318
|
cubrid_conn_to_s(VALUE self)
|
@@ -352,6 +328,8 @@ cubrid_conn_to_s(VALUE self)
|
|
352
328
|
|
353
329
|
/* call-seq:
|
354
330
|
* server_version() -> string
|
331
|
+
*
|
332
|
+
* 연결된 서버의 버전을 문자열로 반환합니다.
|
355
333
|
*/
|
356
334
|
VALUE
|
357
335
|
cubrid_conn_server_version(VALUE self)
|
data/ext/cubrid.c
CHANGED
@@ -1,194 +1,197 @@
|
|
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
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
*
|
44
|
-
*
|
45
|
-
*
|
46
|
-
*
|
47
|
-
* con
|
48
|
-
*
|
49
|
-
*
|
50
|
-
* con
|
51
|
-
*
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
VALUE
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
extern VALUE
|
82
|
-
extern VALUE
|
83
|
-
extern VALUE
|
84
|
-
extern VALUE
|
85
|
-
extern VALUE
|
86
|
-
extern VALUE
|
87
|
-
extern VALUE
|
88
|
-
|
89
|
-
|
90
|
-
extern VALUE
|
91
|
-
|
92
|
-
|
93
|
-
extern VALUE
|
94
|
-
extern VALUE
|
95
|
-
extern VALUE
|
96
|
-
extern VALUE
|
97
|
-
extern VALUE
|
98
|
-
extern VALUE
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
*
|
106
|
-
*
|
107
|
-
* *
|
108
|
-
*
|
109
|
-
*
|
110
|
-
*
|
111
|
-
*
|
112
|
-
* stmt
|
113
|
-
*
|
114
|
-
*
|
115
|
-
*
|
116
|
-
*
|
117
|
-
*
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
rb_define_const(cCubrid, "
|
127
|
-
rb_define_const(cCubrid, "
|
128
|
-
rb_define_const(cCubrid, "
|
129
|
-
rb_define_const(cCubrid, "
|
130
|
-
rb_define_const(cCubrid, "
|
131
|
-
rb_define_const(cCubrid, "
|
132
|
-
rb_define_const(cCubrid, "
|
133
|
-
rb_define_const(cCubrid, "
|
134
|
-
rb_define_const(cCubrid, "
|
135
|
-
rb_define_const(cCubrid, "
|
136
|
-
rb_define_const(cCubrid, "
|
137
|
-
rb_define_const(cCubrid, "
|
138
|
-
rb_define_const(cCubrid, "
|
139
|
-
rb_define_const(cCubrid, "
|
140
|
-
rb_define_const(cCubrid, "
|
141
|
-
rb_define_const(cCubrid, "
|
142
|
-
rb_define_const(cCubrid, "
|
143
|
-
rb_define_const(cCubrid, "
|
144
|
-
|
145
|
-
rb_define_const(cCubrid, "
|
146
|
-
rb_define_const(cCubrid, "
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
/*
|
153
|
-
cConnection
|
154
|
-
rb_define_method(cConnection, "
|
155
|
-
rb_define_method(cConnection, "
|
156
|
-
rb_define_method(cConnection, "
|
157
|
-
rb_define_method(cConnection, "
|
158
|
-
rb_define_method(cConnection, "
|
159
|
-
rb_define_method(cConnection, "
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
rb_define_method(
|
164
|
-
|
165
|
-
/*
|
166
|
-
cStatement
|
167
|
-
rb_define_method(cStatement, "
|
168
|
-
rb_define_method(cStatement, "
|
169
|
-
rb_define_method(cStatement, "
|
170
|
-
rb_define_method(cStatement, "
|
171
|
-
rb_define_method(cStatement, "
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
/* Document-class: Cubrid::Oid
|
184
|
-
*
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
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_server_version(VALUE self);
|
88
|
+
|
89
|
+
/* from stmt.c */
|
90
|
+
extern VALUE cubrid_stmt_close(VALUE self);
|
91
|
+
extern VALUE cubrid_stmt_bind(int argc, VALUE* argv, VALUE self);
|
92
|
+
extern VALUE cubrid_stmt_execute(int argc, VALUE* argv, VALUE self);
|
93
|
+
extern VALUE cubrid_stmt_affected_rows(VALUE self);
|
94
|
+
extern VALUE cubrid_stmt_fetch(VALUE self);
|
95
|
+
extern VALUE cubrid_stmt_fetch_hash(VALUE self);
|
96
|
+
extern VALUE cubrid_stmt_each(VALUE self);
|
97
|
+
extern VALUE cubrid_stmt_each_hash(VALUE self);
|
98
|
+
extern VALUE cubrid_stmt_column_info(VALUE self);
|
99
|
+
|
100
|
+
|
101
|
+
/* CUBRID[http://www.cubrid.com] ruby driver
|
102
|
+
*
|
103
|
+
* CUBRID ruby driver는 ruby에서 CUBRID 데이터베이스 서버에 접속하여 질의를 할 수 있도록 해주는 모듈입니다.
|
104
|
+
*
|
105
|
+
* * Connection
|
106
|
+
* * Statement
|
107
|
+
* * Oid
|
108
|
+
*
|
109
|
+
* con = Cubrid.connect('demodb', '192.168.1.1', '33000', 'foo','bar')
|
110
|
+
* stmt = con.prepare('SELECT * FROM db_user')
|
111
|
+
* stmt.execute
|
112
|
+
* stmt.each { |row|
|
113
|
+
* print row
|
114
|
+
* }
|
115
|
+
* stmt.close
|
116
|
+
* con.close
|
117
|
+
*
|
118
|
+
*/
|
119
|
+
void Init_cubrid()
|
120
|
+
{
|
121
|
+
cCubrid = rb_define_module("Cubrid");
|
122
|
+
rb_define_module_function(cCubrid, "connect", cubrid_connect, -1);
|
123
|
+
|
124
|
+
rb_define_const(cCubrid, "CHAR", INT2NUM(CCI_U_TYPE_CHAR));
|
125
|
+
rb_define_const(cCubrid, "VARCHAR", INT2NUM(CCI_U_TYPE_STRING));
|
126
|
+
rb_define_const(cCubrid, "STRING", INT2NUM(CCI_U_TYPE_STRING));
|
127
|
+
rb_define_const(cCubrid, "NCHAR", INT2NUM(CCI_U_TYPE_NCHAR));
|
128
|
+
rb_define_const(cCubrid, "VARNCHAR", INT2NUM(CCI_U_TYPE_VARNCHAR));
|
129
|
+
rb_define_const(cCubrid, "BIT", INT2NUM(CCI_U_TYPE_BIT));
|
130
|
+
rb_define_const(cCubrid, "VARBIT", INT2NUM(CCI_U_TYPE_VARBIT));
|
131
|
+
rb_define_const(cCubrid, "NUMERIC", INT2NUM(CCI_U_TYPE_NUMERIC));
|
132
|
+
rb_define_const(cCubrid, "INT", INT2NUM(CCI_U_TYPE_INT));
|
133
|
+
rb_define_const(cCubrid, "SHORT", INT2NUM(CCI_U_TYPE_SHORT));
|
134
|
+
rb_define_const(cCubrid, "MONETARY", INT2NUM(CCI_U_TYPE_MONETARY));
|
135
|
+
rb_define_const(cCubrid, "FLOAT", INT2NUM(CCI_U_TYPE_FLOAT));
|
136
|
+
rb_define_const(cCubrid, "DOUBLE", INT2NUM(CCI_U_TYPE_DOUBLE));
|
137
|
+
rb_define_const(cCubrid, "DATE", INT2NUM(CCI_U_TYPE_DATE));
|
138
|
+
rb_define_const(cCubrid, "TIME", INT2NUM(CCI_U_TYPE_TIME));
|
139
|
+
rb_define_const(cCubrid, "TIMESTAMP", INT2NUM(CCI_U_TYPE_TIMESTAMP));
|
140
|
+
rb_define_const(cCubrid, "SET", INT2NUM(CCI_U_TYPE_SET));
|
141
|
+
rb_define_const(cCubrid, "MULTISET", INT2NUM(CCI_U_TYPE_MULTISET));
|
142
|
+
rb_define_const(cCubrid, "SEQUENCE", INT2NUM(CCI_U_TYPE_SEQUENCE));
|
143
|
+
rb_define_const(cCubrid, "OBJECT", INT2NUM(CCI_U_TYPE_OBJECT));
|
144
|
+
|
145
|
+
rb_define_const(cCubrid, "INCLUDE_OID", INT2NUM(CCI_PREPARE_INCLUDE_OID));
|
146
|
+
rb_define_const(cCubrid, "READ_LOCK", INT2NUM(CCI_OID_LOCK_READ));
|
147
|
+
rb_define_const(cCubrid, "WRITE_LOCK", INT2NUM(CCI_OID_LOCK_WRITE));
|
148
|
+
|
149
|
+
/* connection */
|
150
|
+
cConnection = rb_define_class_under(cCubrid, "Connection", rb_cObject);
|
151
|
+
rb_define_method(cConnection, "close", cubrid_conn_close, 0); /* in conn.c */
|
152
|
+
rb_define_method(cConnection, "commit", cubrid_conn_commit, 0); /* in conn.c */
|
153
|
+
rb_define_method(cConnection, "rollback", cubrid_conn_rollback, 0); /* in conn.c */
|
154
|
+
rb_define_method(cConnection, "prepare", cubrid_conn_prepare, -1); /* in conn.c */
|
155
|
+
rb_define_method(cConnection, "query", cubrid_conn_query, -1); /* in conn.c */
|
156
|
+
rb_define_method(cConnection, "auto_commit?", cubrid_conn_get_auto_commit, 0); /* in conn.c */
|
157
|
+
rb_define_method(cConnection, "auto_commit=", cubrid_conn_set_auto_commit, 1); /* in conn.c */
|
158
|
+
rb_define_method(cConnection, "to_s", cubrid_conn_to_s, 0); /* in conn.c */
|
159
|
+
rb_define_method(cConnection, "server_version", cubrid_conn_server_version, 0); /* in conn.c */
|
160
|
+
|
161
|
+
/* statement */
|
162
|
+
cStatement = rb_define_class_under(cCubrid, "Statement", rb_cObject);
|
163
|
+
rb_define_method(cStatement, "bind", cubrid_stmt_bind, -1); /* in stmt.c */
|
164
|
+
rb_define_method(cStatement, "execute", cubrid_stmt_execute, -1); /* in stmt.c */
|
165
|
+
rb_define_method(cStatement, "affected_rows", cubrid_stmt_affected_rows, 0); /* in stmt.c */
|
166
|
+
rb_define_method(cStatement, "column_info", cubrid_stmt_column_info, 0); /* in stmt.c */
|
167
|
+
rb_define_method(cStatement, "fetch", cubrid_stmt_fetch, 0); /* in stmt.c */
|
168
|
+
rb_define_method(cStatement, "fetch_hash", cubrid_stmt_fetch_hash, 0); /* in stmt.c */
|
169
|
+
rb_define_method(cStatement, "each", cubrid_stmt_each, 0); /* in stmt.c */
|
170
|
+
rb_define_method(cStatement, "each_hash", cubrid_stmt_each_hash, 0); /* in stmt.c */
|
171
|
+
rb_define_method(cStatement, "close", cubrid_stmt_close, 0); /* in stmt.c */
|
172
|
+
|
173
|
+
}
|
174
|
+
|
175
|
+
/* Document-class: Cubrid::Connection
|
176
|
+
* Connection 클래스는 데이터베이스 서버에 대한 연결을 유지하고 트랜잭션을 연산을 수행합니다.
|
177
|
+
*/
|
178
|
+
|
179
|
+
/* Document-class: Cubrid::Statement
|
180
|
+
* Statement 클래스는 질의문을 수행하고 그 결과를 반환합니다.
|
181
|
+
*/
|
182
|
+
|
183
|
+
/* Document-class: Cubrid::Oid
|
184
|
+
* Oid 클래스는 CUBRID instance에 대하여 직접 연산을 수행할 수 있도록 합니다.
|
185
|
+
* CUBRID는 저장되어 있는 instance들의 고유한 식별자를 OID라는 이름으로 제공합니다.
|
186
|
+
* OID를 통해서 직접 해당하는 instance에 접근하여 read/write/update/delete 연산을 할 수 있습니다.
|
187
|
+
*
|
188
|
+
*/
|
189
|
+
|
190
|
+
/* TODO:
|
191
|
+
bind method & stored procedure
|
192
|
+
save point
|
193
|
+
db parameter : isolation level, max result count, lock time out, ..
|
194
|
+
glo : load to buffer, save from buffer, performance task
|
195
|
+
schema infomation
|
196
|
+
*/
|
197
|
+
|