cubrid 9.2.0 → 9.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,6 +4,7 @@
4
4
 
5
5
  This is a Ruby Driver and ActiveRecord Adapter for CUBRID Database.
6
6
 
7
+ == Installation
7
8
  == Installation
8
9
 
9
10
  1. cd ext/
@@ -22,11 +23,9 @@ This is a Ruby Driver and ActiveRecord Adapter for CUBRID Database.
22
23
 
23
24
  * Cross-platform.
24
25
 
25
- * Compatible with CUBRID 2.2 x86.
26
-
27
- * Compatible with Ruby 1.8.7.
26
+ * Compatible with CUBRID 9.3.0
28
27
 
29
- * Ruby 1.9.1 is not supported yet.
28
+ * Compatible with Ruby 1.8.x and 1.9.x
30
29
 
31
30
  == Synopsis
32
31
 
@@ -36,7 +35,7 @@ Use Case:
36
35
 
37
36
  #1: @con = Cubrid.connect('dbname')
38
37
  #2: @con = Cubrid.connect('dbname', 'host', 'port', 'username', 'password')
39
- @con = Cubrid.connect('demodb', 'localhost', 30000, 'public', '')
38
+ @con = Cubrid.connect('demodb', 'test-db-server', 30000, 'public', '')
40
39
 
41
40
  puts @con.server_version
42
41
 
@@ -6,7 +6,7 @@ if [ -f cci-src/cci/.libs/libcascci.a ];then
6
6
  exit 0
7
7
  fi
8
8
 
9
- tar xvjf cci.bz2
9
+ tar xvjf cci-src.tar.bz2
10
10
  cd cci-src
11
11
  chmod +x configure
12
12
  chmod +x external/libregex38a/configure
Binary file
data/ext/conn.c CHANGED
@@ -56,13 +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;
59
+ int handle,res;
60
60
  T_CCI_ERROR error;
61
61
 
62
62
  handle = cci_connect_ex(host, port, db, user, passwd,&error);
63
63
  if (handle < 0) {
64
64
  cubrid_handle_error(handle, &error);
65
- return Qnil;
66
65
  }
67
66
 
68
67
  conn = Data_Make_Struct(cConnection, Connection, 0, cubrid_conn_free, c);
@@ -72,7 +71,13 @@ cubrid_conn_new(char *host, int port, char *db, char *user, char *passwd)
72
71
  c->port = port;
73
72
  strcpy(c->db, db);
74
73
  strcpy(c->user, user);
75
- c->auto_commit = Qfalse;
74
+ c->auto_commit = Qtrue;
75
+
76
+ res = cci_set_autocommit(handle,CCI_AUTOCOMMIT_TRUE);
77
+ if (res < 0)
78
+ {
79
+ cubrid_handle_error (res, NULL);
80
+ }
76
81
 
77
82
  return conn;
78
83
  }
@@ -280,9 +285,8 @@ cubrid_conn_get_last_insert_id(VALUE self)
280
285
  {
281
286
  strncpy (ret, name, sizeof (ret) - 1);
282
287
  }
283
-
284
- return rb_str_new2(ret);
285
-
288
+
289
+ return rb_cstr2inum(ret, 10);
286
290
  }
287
291
 
288
292
 
@@ -175,7 +175,7 @@ void Init_cubrid()
175
175
  rb_define_method(cStatement, "close", cubrid_stmt_close, 0); /* in stmt.c */
176
176
 
177
177
  //error
178
- cCubrid = rb_define_class("CUBRID", rb_cObject);
178
+ //cCubrid = rb_define_class("CUBRID", rb_cObject);
179
179
  eCubrid = rb_define_class_under(cCubrid, "Error", rb_eStandardError);
180
180
 
181
181
  }
@@ -34,6 +34,7 @@
34
34
 
35
35
  #include "ruby.h"
36
36
  #include "cas_cci.h"
37
+ #include "stdlib.h"
37
38
 
38
39
  #define MAX_STR_LEN 255
39
40
 
@@ -48,6 +49,28 @@
48
49
  #define CUBRID_ER_CREATE_TEMP_FILE -2010
49
50
  #define CUBRID_ER_TRANSFER_FAIL -2011
50
51
 
52
+ /* Maximum length for the Cubrid data types.
53
+ *
54
+ * The max len of LOB is the max file size creatable in an external storage,
55
+ * so we ca't give the max len of LOB type, just use 1G. Please ignore it.
56
+ */
57
+ #define MAX_CUBRID_CHAR_LEN 1073741823
58
+ #define MAX_LEN_INTEGER (10 + 1)
59
+ #define MAX_LEN_SMALLINT (5 + 1)
60
+ #define MAX_LEN_BIGINT (19 + 1)
61
+ #define MAX_LEN_FLOAT (14 + 1)
62
+ #define MAX_LEN_DOUBLE (28 + 1)
63
+ #define MAX_LEN_MONETARY (28 + 2)
64
+ #define MAX_LEN_DATE 10
65
+ #define MAX_LEN_TIME 8
66
+ #define MAX_LEN_TIMESTAMP 23
67
+ #define MAX_LEN_DATETIME MAX_LEN_TIMESTAMP
68
+ #define MAX_LEN_OBJECT MAX_CUBRID_CHAR_LEN
69
+ #define MAX_LEN_SET MAX_CUBRID_CHAR_LEN
70
+ #define MAX_LEN_MULTISET MAX_CUBRID_CHAR_LEN
71
+ #define MAX_LEN_SEQUENCE MAX_CUBRID_CHAR_LEN
72
+ #define MAX_LEN_LOB MAX_CUBRID_CHAR_LEN
73
+
51
74
  typedef struct {
52
75
  int handle;
53
76
  char host[MAX_STR_LEN];
@@ -119,4 +142,51 @@ extern void cubrid_handle_error(int e, T_CCI_ERROR *error);
119
142
  return (rtn); \
120
143
  } \
121
144
  } while(0)
145
+
146
+ typedef struct
147
+ {
148
+ char *type_name;
149
+ T_CCI_U_TYPE cubrid_u_type;
150
+ int len;
151
+ } DB_TYPE_INFO;
152
+
153
+ /* Define Cubrid supported date types */
154
+ static const DB_TYPE_INFO db_type_info[] = {
155
+ {"NULL", CCI_U_TYPE_NULL, 0},
156
+ {"UNKNOWN", CCI_U_TYPE_UNKNOWN, MAX_LEN_OBJECT},
157
+
158
+ {"CHAR", CCI_U_TYPE_CHAR, -1},
159
+ {"STRING", CCI_U_TYPE_STRING, -1},
160
+ {"NCHAR", CCI_U_TYPE_NCHAR, -1},
161
+ {"VARNCHAR", CCI_U_TYPE_VARNCHAR, -1},
162
+
163
+ {"BIT", CCI_U_TYPE_BIT, -1},
164
+ {"VARBIT", CCI_U_TYPE_VARBIT, -1},
165
+
166
+ {"NUMERIC", CCI_U_TYPE_NUMERIC, -1},
167
+ {"NUMBER", CCI_U_TYPE_NUMERIC, -1},
168
+ {"INT", CCI_U_TYPE_INT, MAX_LEN_INTEGER},
169
+ {"SHORT", CCI_U_TYPE_SHORT, MAX_LEN_SMALLINT},
170
+ {"BIGINT", CCI_U_TYPE_BIGINT, MAX_LEN_BIGINT},
171
+ {"MONETARY", CCI_U_TYPE_MONETARY, MAX_LEN_MONETARY},
172
+
173
+ {"FLOAT", CCI_U_TYPE_FLOAT, MAX_LEN_FLOAT},
174
+ {"DOUBLE", CCI_U_TYPE_DOUBLE, MAX_LEN_DOUBLE},
175
+
176
+ {"DATE", CCI_U_TYPE_DATE, MAX_LEN_DATE},
177
+ {"TIME", CCI_U_TYPE_TIME, MAX_LEN_TIME},
178
+ {"DATETIME", CCI_U_TYPE_DATETIME, MAX_LEN_DATETIME},
179
+ {"TIMESTAMP", CCI_U_TYPE_TIMESTAMP, MAX_LEN_TIMESTAMP},
180
+
181
+ {"SET", CCI_U_TYPE_SET, MAX_LEN_SET},
182
+ {"MULTISET", CCI_U_TYPE_MULTISET, MAX_LEN_MULTISET},
183
+ {"SEQUENCE", CCI_U_TYPE_SEQUENCE, MAX_LEN_SEQUENCE},
184
+ {"RESULTSET", CCI_U_TYPE_RESULTSET, -1},
185
+
186
+ {"OBJECT", CCI_U_TYPE_OBJECT, MAX_LEN_OBJECT},
187
+ {"BLOB", CCI_U_TYPE_BLOB, MAX_LEN_LOB},
188
+ {"CLOB", CCI_U_TYPE_CLOB, MAX_LEN_LOB},
189
+ {"ENUM",CCI_U_TYPE_ENUM,-1}
190
+ };
191
+
122
192
 
File without changes
@@ -50,6 +50,12 @@ if RUBY_PLATFORM.include?"linux"
50
50
 
51
51
  $INCFLAGS = ($INCFLAGS ? $INCFLAGS : "") + " -I" + cci_base_inc_path \
52
52
  +" -I" + cci_cci_inc_path +" -I" + cci_broker_inc_path
53
+
54
+ if(ARGV[0] == "daily")
55
+ print "daily test"
56
+ $CPPFLAGS =($CPPFLAGS ? $CPPFLAGS : "") + " -fprofile-arcs -ftest-coverage"
57
+ $LDFLAGS =($LDFLAGS ? $LDFLAGS : "") + " -lgcov"
58
+ end
53
59
 
54
60
  if !$LIBPATH
55
61
  $LIBPATH = []
data/ext/stmt.c CHANGED
@@ -34,6 +34,33 @@ extern VALUE cubrid_conn_end_tran(Connection *con, int type);
34
34
 
35
35
  extern VALUE cStatement, cOid;
36
36
 
37
+ char*
38
+ get_type_name_by_u_type(T_CCI_COL_INFO * column_info)
39
+ {
40
+ int i,u_type;
41
+ int size = sizeof(db_type_info) / sizeof(db_type_info[0]);
42
+ char buf[64] = {'\0'};
43
+ int type_buf_len=63;
44
+
45
+ u_type = CCI_GET_COLLECTION_DOMAIN(column_info->type);
46
+ for (i = 0; i < size; i++) {
47
+ if (db_type_info[i].cubrid_u_type== u_type) {
48
+ break;
49
+ }
50
+ }
51
+
52
+ if (CCI_IS_SET_TYPE(column_info->type)) {
53
+ snprintf(buf, type_buf_len, "set(%s)", db_type_info[i].type_name);
54
+ } else if (CCI_IS_MULTISET_TYPE(column_info->type)) {
55
+ snprintf(buf, type_buf_len, "multiset(%s)", db_type_info[i].type_name);
56
+ } else if (CCI_IS_SEQUENCE_TYPE(column_info->type)) {
57
+ snprintf(buf, type_buf_len, "sequence(%s)", db_type_info[i].type_name);
58
+ } else {
59
+ return db_type_info[i].type_name;
60
+ }
61
+ return buf;
62
+ }
63
+
37
64
  void
38
65
  cubrid_stmt_free(void *p)
39
66
  {
@@ -193,7 +220,7 @@ cubrid_stmt_make_set(VALUE data, int u_type) /* TODO: check if all item has same
193
220
  ind[i] = 1;
194
221
  }
195
222
  else {
196
- str_ary[i] =RARRAY_PTR(rb_ary_entry(data, i));// RSTRING(rb_ary_entry(data, i))->ptr;
223
+ str_ary[i] =RSTRING_PTR(rb_ary_entry(data, i));// RSTRING(rb_ary_entry(data, i))->ptr;
197
224
  ind[i] = 0;
198
225
  }
199
226
  }
@@ -316,7 +343,7 @@ cubrid_stmt_bind_internal(Statement *stmt, int index, VALUE data, int u_type, in
316
343
  break;
317
344
 
318
345
  case T_STRING:
319
- str_val = RARRAY_PTR(data);
346
+ str_val = StringValueCStr(data);
320
347
  a_type = CCI_A_TYPE_STR;
321
348
  val = str_val;
322
349
  if (u_type == CCI_U_TYPE_UNKNOWN) {
@@ -509,7 +536,6 @@ cubrid_stmt_execute(int argc, VALUE* argv, VALUE self)
509
536
  stmt->affected_rows = row_count;
510
537
 
511
538
  if(stmt->con->auto_commit == Qtrue && cubrid_stmt_is_auto_commitable(stmt->sql_type)) {
512
- cubrid_stmt_close(self);
513
539
  cubrid_conn_end_tran(stmt->con, CCI_TRAN_COMMIT);
514
540
  }
515
541
 
@@ -527,7 +553,7 @@ cubrid_stmt_affected_rows(VALUE self)
527
553
 
528
554
  GET_STMT_STRUCT(self, stmt);
529
555
  CHECK_HANDLE(stmt, self);
530
-
556
+
531
557
  return INT2NUM(stmt->affected_rows);
532
558
  }
533
559
 
@@ -981,7 +1007,7 @@ cubrid_stmt_column_info(VALUE self)
981
1007
  char col_name[MAX_STR_LEN];
982
1008
  int datatype, precision, scale, nullable;
983
1009
  Statement *stmt;
984
-
1010
+ char type_name[MAX_STR_LEN]={0};
985
1011
  GET_STMT_STRUCT(self, stmt);
986
1012
  CHECK_HANDLE(stmt, self);
987
1013
 
@@ -989,6 +1015,7 @@ cubrid_stmt_column_info(VALUE self)
989
1015
 
990
1016
  for (i = 0; i < stmt->col_count; i++) {
991
1017
  VALUE item;
1018
+ char* temp;
992
1019
 
993
1020
  item = rb_hash_new();
994
1021
 
@@ -999,7 +1026,12 @@ cubrid_stmt_column_info(VALUE self)
999
1026
  datatype = CCI_GET_RESULT_INFO_TYPE(stmt->col_info, i+1);
1000
1027
 
1001
1028
  rb_hash_aset(item, rb_str_new2("name"), rb_str_new2(col_name));
1002
- rb_hash_aset(item, rb_str_new2("type_name"), INT2NUM(datatype));
1029
+
1030
+ temp = get_type_name_by_u_type(&stmt->col_info[i]);
1031
+ memcpy(type_name,temp,strlen(temp));
1032
+ rb_hash_aset(item, rb_str_new2("type_name"), rb_str_new2(type_name));
1033
+ memset(type_name,0,strlen(temp));
1034
+
1003
1035
  rb_hash_aset(item, rb_str_new2("precision"), INT2NUM(precision));
1004
1036
  rb_hash_aset(item, rb_str_new2("scale"), INT2NUM(scale));
1005
1037
  rb_hash_aset(item, rb_str_new2("nullable"), INT2NUM(nullable));
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cubrid
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.2.0
4
+ version: 9.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-22 00:00:00.000000000 Z
12
+ date: 2014-03-13 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: This extension is a Ruby connector for CUBRID Database.
15
15
  email: cubrid_ruby@nhncorp.com
@@ -26,10 +26,11 @@ files:
26
26
  - ext/conn.c
27
27
  - ext/stmt.c
28
28
  - ext/error.c
29
- - ext/cci.bz2
29
+ - ext/cci-src.tar.bz2
30
30
  - ext/build_cci.sh
31
31
  homepage: http://www.cubrid.org/cubrid_ruby_programming
32
- licenses: []
32
+ licenses:
33
+ - BSD
33
34
  post_install_message:
34
35
  rdoc_options:
35
36
  - --title
Binary file