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.
@@ -1,192 +1,98 @@
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
- #ifdef _WINDOWS
32
- #pragma warning(disable:4312) /* type corecing */
33
- #endif
34
-
35
- #include "ruby.h"
36
- #include "cas_cci.h"
37
- #include "stdlib.h"
38
-
39
- #define MAX_STR_LEN 255
40
-
41
- #define CUBRID_ER_INVALID_SQL_TYPE -2002
42
- #define CUBRID_ER_CANNOT_GET_COLUMN_INFO -2003
43
- #define CUBRID_ER_INIT_ARRAY_FAIL -2004
44
- #define CUBRID_ER_UNKNOWN_TYPE -2005
45
- #define CUBRID_ER_INVALID_PARAM -2006
46
- #define CUBRID_ER_INVALID_ARRAY_TYPE -2007
47
- #define CUBRID_ER_NOT_SUPPORTED_TYPE -2008
48
- #define CUBRID_ER_OPEN_FILE -2009
49
- #define CUBRID_ER_CREATE_TEMP_FILE -2010
50
- #define CUBRID_ER_TRANSFER_FAIL -2011
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
-
74
- typedef struct {
75
- int handle;
76
- char host[MAX_STR_LEN];
77
- int port;
78
- char db[MAX_STR_LEN];
79
- char user[MAX_STR_LEN];
80
- VALUE auto_commit;
81
- } Connection;
82
-
83
- typedef struct {
84
- Connection *con;
85
- int handle;
86
- int affected_rows;
87
- int col_count;
88
- int param_cnt;
89
- T_CCI_SQLX_CMD sql_type;
90
- T_CCI_COL_INFO *col_info;
91
- int bound;
92
- } Statement;
93
-
94
- typedef struct {
95
- Connection *con;
96
- char oid_str[MAX_STR_LEN];
97
- int col_count;
98
- VALUE col_type;
99
- VALUE hash;
100
- } Oid;
101
-
102
- #ifdef MS_WINDOWS
103
- #define CUBRID_LONG_LONG _int64
104
- #else
105
- #define CUBRID_LONG_LONG long long
106
- #endif
107
-
108
- //ifndef CCI_ER_END
109
- //#define CCI_ER_END (-20100)
110
- //#endif
111
-
112
-
113
- #ifndef RSTRING_PTR
114
- #define RSTRING_PTR(str) RSTRING(str)->ptr
115
- #endif
116
-
117
- #ifndef RSTRING_LEN
118
- #define RSTRING_LEN(str) RSTRING(str)->len
119
- #endif
120
-
121
- #ifndef HAVE_RB_STR_SET_LEN
122
- #define rb_str_set_len(str, length) (RSTRING_LEN(str) = (length))
123
- #endif
124
-
125
- VALUE GeteCubrid();
126
- extern void cubrid_handle_error(int e, T_CCI_ERROR *error);
127
-
128
- #define GET_CONN_STRUCT(self, con) Data_Get_Struct((self), Connection, (con))
129
- #define CHECK_CONNECTION(con, rtn) \
130
- do { \
131
- if (!((con)->handle)) { \
132
- cubrid_handle_error(CCI_ER_CON_HANDLE, NULL); \
133
- return (rtn); \
134
- } \
135
- } while(0)
136
-
137
- #define GET_STMT_STRUCT(self, stmt) Data_Get_Struct((self), Statement, (stmt))
138
- #define CHECK_HANDLE(stmt, rtn) \
139
- do { \
140
- if (!((stmt)->handle)) { \
141
- cubrid_handle_error(CCI_ER_REQ_HANDLE, NULL); \
142
- return (rtn); \
143
- } \
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
-
192
-
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
+ #ifdef _WINDOWS
32
+ #pragma warning(disable:4312) /* type corecing */
33
+ #endif
34
+
35
+ #include "ruby.h"
36
+ #include "cas_cci.h"
37
+
38
+ #define MAX_STR_LEN 255
39
+
40
+ #define CUBRID_ER_INVALID_SQL_TYPE -2002
41
+ #define CUBRID_ER_CANNOT_GET_COLUMN_INFO -2003
42
+ #define CUBRID_ER_INIT_ARRAY_FAIL -2004
43
+ #define CUBRID_ER_UNKNOWN_TYPE -2005
44
+ #define CUBRID_ER_INVALID_PARAM -2006
45
+ #define CUBRID_ER_INVALID_ARRAY_TYPE -2007
46
+ #define CUBRID_ER_NOT_SUPPORTED_TYPE -2008
47
+ #define CUBRID_ER_OPEN_FILE -2009
48
+ #define CUBRID_ER_CREATE_TEMP_FILE -2010
49
+ #define CUBRID_ER_TRANSFER_FAIL -2011
50
+
51
+ typedef struct {
52
+ int handle;
53
+ char host[MAX_STR_LEN];
54
+ int port;
55
+ char db[MAX_STR_LEN];
56
+ char user[MAX_STR_LEN];
57
+ VALUE auto_commit;
58
+ } Connection;
59
+
60
+ typedef struct {
61
+ Connection *con;
62
+ int handle;
63
+ int affected_rows;
64
+ int col_count;
65
+ int param_cnt;
66
+ T_CCI_SQLX_CMD sql_type;
67
+ T_CCI_COL_INFO *col_info;
68
+ int bound;
69
+ } Statement;
70
+
71
+ typedef struct {
72
+ Connection *con;
73
+ char oid_str[MAX_STR_LEN];
74
+ int col_count;
75
+ VALUE col_type;
76
+ VALUE hash;
77
+ } Oid;
78
+
79
+ extern void cubrid_handle_error(int e, T_CCI_ERROR *error);
80
+
81
+ #define GET_CONN_STRUCT(self, con) Data_Get_Struct((self), Connection, (con))
82
+ #define CHECK_CONNECTION(con, rtn) \
83
+ do { \
84
+ if (!((con)->handle)) { \
85
+ cubrid_handle_error(CCI_ER_CON_HANDLE, NULL); \
86
+ return (rtn); \
87
+ } \
88
+ } while(0)
89
+
90
+ #define GET_STMT_STRUCT(self, stmt) Data_Get_Struct((self), Statement, (stmt))
91
+ #define CHECK_HANDLE(stmt, rtn) \
92
+ do { \
93
+ if (!((stmt)->handle)) { \
94
+ cubrid_handle_error(CCI_ER_REQ_HANDLE, NULL); \
95
+ return (rtn); \
96
+ } \
97
+ } while(0)
98
+
@@ -1,151 +1,144 @@
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
- static struct _error_message {
34
- int err;
35
- char* msg;
36
- } cubrid_err_msgs[] = {
37
- {-1, "CUBRID database error"},
38
- {-2, "Invalid connection handle"},
39
- {-3, "Memory allocation error"},
40
- {-4, "Communication error"},
41
- {-5, "No more data"},
42
- {-6, "Unknown transaction type"},
43
- {-7, "Invalid string parameter"},
44
- {-8, "Type conversion error"},
45
- {-9, "Parameter binding error"},
46
- {-10, "Invalid type"},
47
- {-11, "Parameter binding error"},
48
- {-12, "Invalid database parameter name"},
49
- {-13, "Invalid column index"},
50
- {-14, "Invalid schema type"},
51
- {-15, "File open error"},
52
- {-16, "Connection error"},
53
- {-17, "Connection handle creation error"},
54
- {-18, "Invalid request handle"},
55
- {-19, "Invalid cursor position"},
56
- {-20, "Object is not valid"},
57
- {-21, "CAS error"},
58
- {-22, "Unknown host name"},
59
- {-99, "Not implemented"},
60
- {-1000, "Database connection error"},
61
- {-1002, "Memory allocation error"},
62
- {-1003, "Communication error"},
63
- {-1004, "Invalid argument"},
64
- {-1005, "Unknown transaction type"},
65
- {-1007, "Parameter binding error"},
66
- {-1008, "Parameter binding error"},
67
- {-1009, "Cannot make DB_VALUE"},
68
- {-1010, "Type conversion error"},
69
- {-1011, "Invalid database parameter name"},
70
- {-1012, "No more data"},
71
- {-1013, "Object is not valid"},
72
- {-1014, "File open error"},
73
- {-1015, "Invalid schema type"},
74
- {-1016, "Version mismatch"},
75
- {-1017, "Cannot process the request. Try again later."},
76
- {-1018, "Authorization error"},
77
- {-1020, "The attribute domain must be the set type."},
78
- {-1021, "The domain of a set must be the same data type."},
79
- {-2001, "Memory allocation error"},
80
- {-2002, "Invalid API call"},
81
- {-2003, "Cannot get column info"},
82
- {-2004, "Array initializing error"},
83
- {-2005, "Unknown column type"},
84
- {-2006, "Invalid parameter"},
85
- {-2007, "Invalid array type"},
86
- {-2008, "Invalid type"},
87
- {-2009, "File open error"},
88
- {-2010, "Temporary file open error"},
89
- {-2011, "Glo transfering error"},
90
- {0, "Unknown Error"}
91
- };
92
-
93
- static char *
94
- get_error_msg(int err_code)
95
- {
96
- int i = 0;
97
- int len = (sizeof(cubrid_err_msgs) / sizeof(cubrid_err_msgs[0]));
98
-
99
- for(i = 0;i<len; i++) {
100
- if (cubrid_err_msgs[i].err == err_code) {
101
- return cubrid_err_msgs[i].msg;
102
- }
103
- }
104
- return NULL;
105
- }
106
-
107
- void
108
- cubrid_handle_error(int e, T_CCI_ERROR *error)
109
- {
110
- int err_code;
111
- char msg[1024]={0};
112
- char buf[128] ={0};
113
- char *err_msg = NULL, *facility_msg;
114
-
115
- if (e == CCI_ER_DBMS) {
116
- facility_msg = "DBMS";
117
- if (error) {
118
- err_code = error->err_code;
119
- err_msg = error->err_msg;
120
- } else {
121
- err_code = 0;
122
- err_msg = "Unknown DBMS Error";
123
- }
124
- } else {
125
- err_msg = get_error_msg(e);
126
- err_code = e;
127
-
128
- if (e > CAS_ER_IS){
129
- facility_msg = "CAS";
130
- }
131
- else if (e > -20100){
132
- facility_msg = "CCI";
133
- }
134
- else{
135
- facility_msg = "CLIENT";
136
- }
137
-
138
- }
139
-
140
- if (!err_msg) {
141
- err_code = cci_get_err_msg(e,buf,128);
142
- if(err_code<0)
143
- err_msg = "Unknown Error";
144
- else
145
- err_msg = buf;
146
- }
147
-
148
- sprintf(msg, "ERROR: %s, %d, %s", facility_msg, err_code, err_msg);
149
- rb_raise(GeteCubrid(), msg);
150
- }
151
-
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
+ static struct _error_message {
34
+ int err;
35
+ char* msg;
36
+ } cubrid_err_msgs[] = {
37
+ {-1, "CUBRID database error"},
38
+ {-2, "Invalid connection handle"},
39
+ {-3, "Memory allocation error"},
40
+ {-4, "Communication error"},
41
+ {-5, "No more data"},
42
+ {-6, "Unknown transaction type"},
43
+ {-7, "Invalid string parameter"},
44
+ {-8, "Type conversion error"},
45
+ {-9, "Parameter binding error"},
46
+ {-10, "Invalid type"},
47
+ {-11, "Parameter binding error"},
48
+ {-12, "Invalid database parameter name"},
49
+ {-13, "Invalid column index"},
50
+ {-14, "Invalid schema type"},
51
+ {-15, "File open error"},
52
+ {-16, "Connection error"},
53
+ {-17, "Connection handle creation error"},
54
+ {-18, "Invalid request handle"},
55
+ {-19, "Invalid cursor position"},
56
+ {-20, "Object is not valid"},
57
+ {-21, "CAS error"},
58
+ {-22, "Unknown host name"},
59
+ {-99, "Not implemented"},
60
+ {-1000, "Database connection error"},
61
+ {-1002, "Memory allocation error"},
62
+ {-1003, "Communication error"},
63
+ {-1004, "Invalid argument"},
64
+ {-1005, "Unknown transaction type"},
65
+ {-1007, "Parameter binding error"},
66
+ {-1008, "Parameter binding error"},
67
+ {-1009, "Cannot make DB_VALUE"},
68
+ {-1010, "Type conversion error"},
69
+ {-1011, "Invalid database parameter name"},
70
+ {-1012, "No more data"},
71
+ {-1013, "Object is not valid"},
72
+ {-1014, "File open error"},
73
+ {-1015, "Invalid schema type"},
74
+ {-1016, "Version mismatch"},
75
+ {-1017, "Cannot process the request. Try again later."},
76
+ {-1018, "Authorization error"},
77
+ {-1020, "The attribute domain must be the set type."},
78
+ {-1021, "The domain of a set must be the same data type."},
79
+ {-2001, "Memory allocation error"},
80
+ {-2002, "Invalid API call"},
81
+ {-2003, "Cannot get column info"},
82
+ {-2004, "Array initializing error"},
83
+ {-2005, "Unknown column type"},
84
+ {-2006, "Invalid parameter"},
85
+ {-2007, "Invalid array type"},
86
+ {-2008, "Invalid type"},
87
+ {-2009, "File open error"},
88
+ {-2010, "Temporary file open error"},
89
+ {-2011, "Glo transfering error"},
90
+ {0, "Unknown Error"}
91
+ };
92
+
93
+ static char *
94
+ get_error_msg(int err_code)
95
+ {
96
+ int i;
97
+
98
+ for(i = 0; ; i++) {
99
+ if (!cubrid_err_msgs[i].err || cubrid_err_msgs[i].err == err_code) {
100
+ return cubrid_err_msgs[i].msg;
101
+ }
102
+ }
103
+ return NULL;
104
+ }
105
+
106
+ void
107
+ cubrid_handle_error(int e, T_CCI_ERROR *error)
108
+ {
109
+ int err_code;
110
+ char msg[1024];
111
+ char *err_msg = NULL, *facility_msg;
112
+
113
+ if (e == CCI_ER_DBMS) {
114
+ facility_msg = "DBMS";
115
+ if (error) {
116
+ err_code = error->err_code;
117
+ err_msg = error->err_msg;
118
+ } else {
119
+ err_code = 0;
120
+ err_msg = "Unknown DBMS Error";
121
+ }
122
+ } else {
123
+ err_msg = get_error_msg(e);
124
+ err_code = e;
125
+
126
+ if (e > -1000) {
127
+ facility_msg = "CCI";
128
+ } else if (e > -2000) {
129
+ facility_msg = "CAS";
130
+ } else if (e > -3000) {
131
+ facility_msg = "CLIENT";
132
+ } else {
133
+ facility_msg = "UNKNOWN";
134
+ }
135
+ }
136
+
137
+ if (!err_msg) {
138
+ err_msg = "Unknown Error";
139
+ }
140
+
141
+ sprintf(msg, "ERROR: %s, %d, %s", facility_msg, err_code, err_msg);
142
+ rb_raise(rb_eStandardError, msg);
143
+ }
144
+