transactd 2.4.5 → 3.0.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.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/CMakeLists.txt +1 -1
  3. data/README-JA.md +52 -529
  4. data/README.md +52 -523
  5. data/bin/common/tdclc_32_3_0.dll +0 -0
  6. data/bin/common/tdclc_64_3_0.dll +0 -0
  7. data/build/common/system.cmake +2 -1
  8. data/build/common/transactd_cl_common.cmake +3 -6
  9. data/build/swig/ruby/ruby.swg +85 -28
  10. data/build/swig/ruby/tdclrb_wrap.cpp +3195 -1578
  11. data/build/swig/tdcl.i +161 -5
  12. data/build/tdclc/CMakeLists.txt +1 -0
  13. data/build/tdclc/tdclc.cbproj +7 -1
  14. data/build/tdclc/tdclc.rc +4 -4
  15. data/build/tdclcpp/tdclcpp.rc +4 -4
  16. data/build/tdclcpp/tdclcpp_bc.cbproj +2 -5
  17. data/build/tdclrb/tdclrb.rc +4 -4
  18. data/source/bzs/db/blobStructs.h +1 -1
  19. data/source/bzs/db/engine/mysql/database.cpp +199 -74
  20. data/source/bzs/db/engine/mysql/database.h +47 -18
  21. data/source/bzs/db/engine/mysql/dbManager.cpp +1 -0
  22. data/source/bzs/db/engine/mysql/mysqlInternal.h +32 -8
  23. data/source/bzs/db/protocol/tdap/btrDate.cpp +110 -75
  24. data/source/bzs/db/protocol/tdap/btrDate.h +46 -21
  25. data/source/bzs/db/protocol/tdap/client/activeTable.cpp +18 -18
  26. data/source/bzs/db/protocol/tdap/client/activeTable.h +25 -25
  27. data/source/bzs/db/protocol/tdap/client/activeTableImple.h +10 -4
  28. data/source/bzs/db/protocol/tdap/client/client.cpp +6 -5
  29. data/source/bzs/db/protocol/tdap/client/client.h +82 -15
  30. data/source/bzs/db/protocol/tdap/client/database.cpp +531 -142
  31. data/source/bzs/db/protocol/tdap/client/database.h +19 -6
  32. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +461 -408
  33. data/source/bzs/db/protocol/tdap/client/dbDef.h +11 -17
  34. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +61 -13
  35. data/source/bzs/db/protocol/tdap/client/field.cpp +1592 -1398
  36. data/source/bzs/db/protocol/tdap/client/field.h +110 -121
  37. data/source/bzs/db/protocol/tdap/client/fields.h +40 -10
  38. data/source/bzs/db/protocol/tdap/client/filter.h +69 -55
  39. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +296 -164
  40. data/source/bzs/db/protocol/tdap/client/groupQuery.h +77 -25
  41. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +31 -13
  42. data/source/bzs/db/protocol/tdap/client/memRecord.h +31 -21
  43. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +1 -1
  44. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -1
  45. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +69 -24
  46. data/source/bzs/db/protocol/tdap/client/nsTable.h +3 -1
  47. data/source/bzs/db/protocol/tdap/client/recordset.cpp +1 -0
  48. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +46 -27
  49. data/source/bzs/db/protocol/tdap/client/request.h +2 -1
  50. data/source/bzs/db/protocol/tdap/client/serializer.cpp +44 -9
  51. data/source/bzs/db/protocol/tdap/client/serializer.h +1 -1
  52. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +182 -76
  53. data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +23 -12
  54. data/source/bzs/db/protocol/tdap/client/stringConverter.h +8 -10
  55. data/source/bzs/db/protocol/tdap/client/table.cpp +172 -93
  56. data/source/bzs/db/protocol/tdap/client/table.h +112 -37
  57. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +17 -0
  58. data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +0 -1
  59. data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +0 -2
  60. data/source/bzs/db/protocol/tdap/client/trdormapi.h +1 -1
  61. data/source/bzs/db/protocol/tdap/fieldComp.h +698 -14
  62. data/source/bzs/db/protocol/tdap/myDateTime.cpp +723 -307
  63. data/source/bzs/db/protocol/tdap/myDateTime.h +294 -0
  64. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +164 -54
  65. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +6 -3
  66. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +133 -550
  67. data/source/bzs/db/protocol/tdap/mysql/request.h +6 -5
  68. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +217 -82
  69. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +1 -1
  70. data/source/bzs/db/protocol/tdap/tdapRequest.h +4 -9
  71. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +808 -17
  72. data/source/bzs/db/protocol/tdap/tdapSchema.h +656 -164
  73. data/source/bzs/db/protocol/tdap/tdapcapi.h +130 -28
  74. data/source/bzs/db/protocol/tdap/uri.h +40 -32
  75. data/source/bzs/db/transactd/connManager.cpp +1 -1
  76. data/source/bzs/db/transactd/transactd.cpp +7 -0
  77. data/source/bzs/env/compiler.h +107 -94
  78. data/source/bzs/env/crosscompile.cpp +24 -12
  79. data/source/bzs/env/crosscompile.h +75 -6
  80. data/source/bzs/env/mbcswchrLinux.cpp +2 -2
  81. data/source/bzs/env/tcharMinGW.h +4 -0
  82. data/source/bzs/example/changeSchema.cpp +22 -17
  83. data/source/bzs/example/queryData.cpp +4 -0
  84. data/source/bzs/netsvc/client/iconnection.h +3 -1
  85. data/source/bzs/netsvc/client/tcpClient.h +10 -3
  86. data/source/bzs/rtl/stringBuffers.cpp +7 -0
  87. data/source/bzs/test/tdclatl/bench_query_atl.js +6 -0
  88. data/source/bzs/test/tdclatl/bench_tdclatl.js +8 -1
  89. data/source/bzs/test/tdclatl/test_query_atl.js +22 -2
  90. data/source/bzs/test/tdclatl/test_v3.js +1017 -0
  91. data/source/bzs/test/tdclphp/transactd_Test.php +55 -21
  92. data/source/bzs/test/tdclphp/transactd_datetime_Test.php +0 -5
  93. data/source/bzs/test/tdclphp/transactd_pool_Test.php +2 -0
  94. data/source/bzs/test/tdclphp/transactd_v3_Test.php +743 -0
  95. data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -5
  96. data/source/bzs/test/tdclrb/transactd_pool_spec.rb +2 -0
  97. data/source/bzs/test/tdclrb/transactd_spec.rb +39 -16
  98. data/source/bzs/test/tdclrb/transactd_v3_spec.rb +748 -0
  99. data/source/bzs/test/transactdBench/transactdBench.cpp +55 -58
  100. data/source/bzs/test/transactdBench/transactdBench2.cpp +1 -3
  101. data/source/bzs/test/trdclengn/testField.h +3305 -0
  102. data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +1050 -0
  103. data/source/bzs/test/trdclengn/test_trdclengn.cpp +112 -190
  104. data/source/bzs/test/trdclengn/testbase.h +137 -0
  105. data/source/global/ormsrcgen/srcgen.cpp +23 -12
  106. data/source/global/ormsrcgen/template/ormDataClass_template.h +2 -0
  107. data/source/global/querystmts/querystmts.cpp +2 -3
  108. data/source/global/tdclatl/Bitset.cpp +38 -0
  109. data/source/global/tdclatl/Bitset.h +63 -0
  110. data/source/global/tdclatl/Database.cpp +59 -18
  111. data/source/global/tdclatl/Database.h +7 -4
  112. data/source/global/tdclatl/DbDef.cpp +6 -6
  113. data/source/global/tdclatl/DbDef.h +2 -1
  114. data/source/global/tdclatl/Field.cpp +112 -0
  115. data/source/global/tdclatl/Field.h +19 -5
  116. data/source/global/tdclatl/FieldDef.cpp +137 -16
  117. data/source/global/tdclatl/FieldDef.h +18 -2
  118. data/source/global/tdclatl/FieldDefs.cpp +54 -1
  119. data/source/global/tdclatl/FieldDefs.h +3 -0
  120. data/source/global/tdclatl/GroupQuery.cpp +8 -8
  121. data/source/global/tdclatl/QueryBase.cpp +65 -0
  122. data/source/global/tdclatl/QueryBase.h +10 -0
  123. data/source/global/tdclatl/Record.cpp +33 -2
  124. data/source/global/tdclatl/Record.h +3 -1
  125. data/source/global/tdclatl/RecordsetQuery.cpp +42 -0
  126. data/source/global/tdclatl/RecordsetQuery.h +8 -0
  127. data/source/global/tdclatl/Table.cpp +127 -3
  128. data/source/global/tdclatl/Table.h +10 -1
  129. data/source/global/tdclatl/TableDef.cpp +41 -8
  130. data/source/global/tdclatl/TableDef.h +7 -2
  131. data/source/global/tdclatl/activeTable.cpp +40 -71
  132. data/source/global/tdclatl/resource.h +0 -0
  133. data/source/global/tdclatl/tdclatl.idl +222 -28
  134. data/source/linux/tchar.h +100 -96
  135. data/transactd.gemspec +2 -2
  136. metadata +13 -11
  137. data/BUILD_UNIX-JA.md +0 -161
  138. data/BUILD_WIN-JA.md +0 -326
  139. data/README_ORMSRCGEN-JA.md +0 -115
  140. data/README_ORMSRCGEN.md +0 -118
  141. data/RELEASE_NOTE-JA.md +0 -356
  142. data/RELEASE_NOTE.md +0 -360
  143. data/bin/common/tdclc_32_2_4.dll +0 -0
  144. data/bin/common/tdclc_64_2_4.dll +0 -0
  145. data/source/bzs/test/trdclengn/test_blob.cpp +0 -375
@@ -0,0 +1,1017 @@
1
+ /*=================================================================
2
+ Copyright (C) 2015 BizStation Corp All rights reserved.
3
+
4
+ This program is free software; you can redistribute it and/or
5
+ modify it under the terms of the GNU General Public License
6
+ as published by the Free Software Foundation; either version 2
7
+ of the License, or (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License
15
+ along with this program; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
+ 02111-1307, USA.
18
+ =================================================================*/
19
+ var TYPE_DDF = 1;
20
+ var TYPE_BDF = 0;
21
+ var READ_ONLY = -2;
22
+ var OPEN_NORMAL = 0;
23
+ var AUTO_CREATE_TABLE = true;
24
+ var OWNER_NAME = "";
25
+ var DIR="";
26
+
27
+ var fn_id = 0;
28
+ var fn_user = 1;
29
+ var S_NOWAIT_LOCK = 200;
30
+ var M_NOWAIT_LOCK = 400;
31
+ var CCURR_T_BIAS = 1000;
32
+ var trans_bias = S_NOWAIT_LOCK + CCURR_T_BIAS;
33
+
34
+ // field type
35
+ var ft_string = 0;
36
+ var ft_integer = 1;
37
+ var ft_float = 2;
38
+ var ft_date = 3;
39
+ var ft_time = 4;
40
+ var ft_decimal = 5;
41
+ var ft_money = 6;
42
+ var ft_logical = 7;
43
+ var ft_numeric = 8;
44
+ var ft_bfloat = 9;
45
+ var ft_lstring = 10;
46
+ var ft_zstring = 11;
47
+ var ft_note = 12;
48
+ var ft_lvar = 13;
49
+ var ft_uinteger = 14;
50
+ var ft_autoinc = 15;
51
+ var ft_bit = 16;
52
+ var ft_numericsts = 17;
53
+ var ft_numericsa = 18;
54
+ var ft_currency = 19;
55
+ var ft_timestamp = 20;
56
+ var ft_blob = 21;
57
+ var ft_reserve22 = 22;
58
+ var ft_reserve23 = 23;
59
+ var ft_reserve24 = 24;
60
+ var ft_wstring = 25;
61
+ var ft_wzstring = 26;
62
+ var ft_guid = 27;
63
+ var ft_datatime = 30;
64
+ var ft_myvarchar = 40;
65
+ var ft_myvarbinary = 41;
66
+ var ft_wvarchar = 42;
67
+ var ft_wvarbinary = 43;
68
+ var ft_char = 44;
69
+ var ft_wchar = 45;
70
+ var ft_mydate = 46;
71
+ var ft_mytime = 47;
72
+ var ft_mydatetime = 48;
73
+ var ft_mytimestamp = 49;
74
+ var ft_mytext = 50;
75
+ var ft_myblob = 51;
76
+ var ft_autoIncUnsigned = 52;
77
+ var ft_myfixedbinary = 53;
78
+ var ft_enum = 54;
79
+ var ft_set = 55;
80
+ var ft_myyear = 59;
81
+ var ft_mygeometry = 60;
82
+ var ft_myjson = 61;
83
+ var ft_mydecimal = 62;
84
+
85
+ //file flag
86
+ var table_varlen = 0;
87
+
88
+ //key flag
89
+ var key_duplicate = 0;
90
+ var key_changeable = 1;
91
+ var key_allnullkey = 3;
92
+ var key_desc = 6;
93
+ var key_extend = 8;
94
+ var key_anynullkey = 9;
95
+ var key_incase = 10;
96
+
97
+ var changeCurrentNcc = 1;
98
+
99
+ var USE_NONE = 0;
100
+ var USE_TRAN = 1;
101
+ var USE_BULKINSERT = 2;
102
+ var USE_SNAPSHOT = 4;
103
+
104
+ var CHARSET_LATIN1 = 1;
105
+ var CHARSET_CP850 = 4;
106
+ var CHARSET_ASCII = 9;
107
+ var CHARSET_SJIS = 11;
108
+ var CHARSET_UTF8 = 22;
109
+ var CHARSET_USC2 = 23;
110
+ var CHARSET_UTF8B4 = 30;
111
+ var CHARSET_UTF16LE = 33;
112
+ var CHARSET_CP932 = 38;
113
+ var CHARSET_EUCJ = 40;
114
+ var MAX_CHAR_INFO = 41;
115
+
116
+ var CP_UTF8 = 65001;
117
+
118
+ // status
119
+ var STATUS_SUCCESS = 0;
120
+ var STATUS_PROGRAM_ERROR = 1;
121
+ var STATUS_IO_ERROR = 2;
122
+ var STATUS_FILE_NOT_OPENED = 3;
123
+ var STATUS_NOT_FOUND_TI = 4;
124
+ var STATUS_DUPPLICATE_KEYVALUE = 5;
125
+ var STATUS_INVALID_KEYNUM = 6;
126
+ var STATUS_NO_CURRENT = 8;
127
+ var STATUS_EOF = 9;
128
+ var STATUS_TABLE_NOTOPEN = 12;
129
+ var STATUS_REQUESTER_DEACTIVE = 20;
130
+ var STATUS_KEYBUFFERTOOSMALL = 21;
131
+ var STATUS_BUFFERTOOSMALL = 22;
132
+ var STATUS_CANT_CREATE = 25;
133
+ var STATUS_NOSUPPORT_OP = 41;
134
+ var STATUS_INVALID_BOOKMARK = 43;
135
+ var STATUS_ACCESS_DENIED = 46;
136
+ var STATUS_INVALID_OWNERNAME = 51;
137
+ var STATUS_TABLE_EXISTS_ERROR = 59;
138
+ var STATUS_LIMMIT_OF_REJECT = 60;
139
+ var STATUS_WARKSPACE_TOO_SMALL = 61;
140
+ var STATUS_REACHED_FILTER_COND = 64;
141
+ var STATUS_INVALID_FIELD_OFFSET = 65;
142
+ var STATUS_CHANGE_CONFLICT = 80;
143
+ var STATUS_INVALID_LOCKTYPE = 83;
144
+ var STATUS_LOCK_ERROR = 84;
145
+ var STATUS_FILE_LOCKED = 85;
146
+ var STATUS_CANNOT_LOCK_TABLE = 88;
147
+ var STATUS_INVALID_KEYNAME = STATUS_INVALID_KEYNUM;
148
+ var STATUS_INVALID_DATASIZE = STATUS_BUFFERTOOSMALL;
149
+ var STATUS_INVALID_FIELDNAME = STATUS_INVALID_FIELD_OFFSET;
150
+ var ERROR_TD_INVALID_CLINETHOST = 171;
151
+ var ERROR_NOSPECIFY_TABLE = 176;
152
+ var ERROR_LOAD_CLIBRARY = 200;
153
+ var NET_BAD_SRB_FORMAT = 3021;
154
+ var ERROR_TD_HOSTNAME_NOT_FOUND = 3103;
155
+ var ERROR_TD_CONNECTION_FAILURE = 3106;
156
+ var ERROR_TD_NOT_CONNECTED = 3110;
157
+
158
+ var COMP_TYPE_NUMERIC = 1;
159
+ var COMP_TYPE_OBJECT = 0;
160
+ var COMP_TYPE_DATETIME = 2;
161
+
162
+ var COMBINE_TYPE_END = 0;
163
+ var COMBINE_TYPE_AND = 1;
164
+ var COMBINE_TYPE_END = 2;
165
+
166
+ var COMP_LOG_EQ = 0;
167
+ var COMP_LOG_EQ_GR = 1;
168
+ var COMP_LOG_EQ_LE = 2;
169
+ var COMP_LOG_GR = 3;
170
+ var COMP_LOG_LE = 4;
171
+ var COMP_LOG_NOT = 5;
172
+
173
+ var DIRECTION_FORWORD = 0;
174
+ var DIRECTION_BACKFORWORD = 1;
175
+
176
+ var TIMESTAMP_VALUE_CONTROL = 0;
177
+ var TIMESTAMP_ALWAYS = 1;
178
+
179
+ var fsum = 0;
180
+ var fcount = 1;
181
+ var favg = 2;
182
+ var fmin = 3;
183
+ var fmax = 4;
184
+
185
+ var none = 0;
186
+ var hasOneJoin = 1;
187
+ var joinWhereFields = 2;
188
+
189
+ var CMP_MODE_MYSQL_NULL = 1;
190
+ var CMP_MODE_OLD_NULL = 0;
191
+
192
+ var clearNull = 0;
193
+ var defaultNull = 1;
194
+
195
+ var DFV_TIMESTAMP_DEFAULT = 1;
196
+ var MYSQL_TYPE_MYSQL = 77;//'M'
197
+ var MYSQL_TYPE_MARIA = 65;//'A'
198
+
199
+ /*--------------------------------------------------------------------------------*/
200
+ function bench()
201
+ {
202
+ var tick=0;
203
+
204
+ this.report = function(func, p1, p2, p3, p4, p5, p6, p7, p8)
205
+ {
206
+ var now = new Date();
207
+ ticks = now.getTime();
208
+ var ret = func(p1, p2, p3, p4, p5, p6, p7, p8);
209
+ now = new Date();
210
+ ticks = (now.getTime() - ticks)/1000;
211
+ return ret;
212
+ }
213
+
214
+ this.time = function(){return tick;}
215
+ this.show = function(){WScript.Echo("\n(exec time " + ticks + " sec)\n");}
216
+ }
217
+ /*--------------------------------------------------------------------------------*/
218
+ function checkEqual(a, b, on)
219
+ {
220
+ if (a !== b)
221
+ {
222
+ if (typeof(on) === 'undefined') on = "";
223
+ try
224
+ {
225
+ WScript.Echo("error on " + on + " " + a.toString() + " != " + b.toString());
226
+ }
227
+ catch(e)
228
+ {
229
+ WScript.Echo("check object error on " + on);
230
+ }
231
+ resultCode = 1;
232
+ }else
233
+ WScript.StdOut.Write(".");
234
+ }
235
+
236
+ /*--------------------------------------------------------------------------------*/
237
+ function checkNotEqual(a, b, on)
238
+ {
239
+ if (a === b)
240
+ {
241
+ if (typeof(on) === 'undefined') on = "";
242
+
243
+ try
244
+ {
245
+ WScript.Echo("error on " + on + " " + a.toString() + " == " + b.toString());
246
+ }
247
+ catch(e)
248
+ {
249
+ WScript.Echo("check object error on " + on);
250
+ }
251
+ resultCode = 1;
252
+ }else
253
+ WScript.StdOut.Write(".");
254
+ }
255
+ /*--------------------------------------------------------------------------------*/
256
+ function isX86()
257
+ {
258
+ var shell = new ActiveXObject('WScript.Shell');
259
+ return (shell.Environment('Process').Item('PROCESSOR_ARCHITECTURE') === 'x86');
260
+ }
261
+ /*--------------------------------------------------------------------------------*/
262
+ function createRecordsetQuery()
263
+ {
264
+ return new ActiveXObject('transactd.recordsetQuery');
265
+ }
266
+ /*--------------------------------------------------------------------------------*/
267
+ function createQuery()
268
+ {
269
+ return new ActiveXObject('transactd.query');
270
+ }
271
+ /*--------------------------------------------------------------------------------*/
272
+ function createDatabaseObject()
273
+ {
274
+ return new ActiveXObject("transactd.database");
275
+ }
276
+ /*--------------------------------------------------------------------------------*/
277
+ function createGroupQuery()
278
+ {
279
+ return new ActiveXObject("transactd.groupQuery");
280
+ }
281
+ /*--------------------------------------------------------------------------------*/
282
+ function createActiveTable(db, tableName)
283
+ {
284
+ var at = new ActiveXObject("transactd.activeTable");
285
+ at.SetDatabase(db, tableName);
286
+ return at;
287
+ }
288
+ /*--------------------------------------------------------------------------------*/
289
+ function createSortFields()
290
+ {
291
+ return new ActiveXObject("transactd.sortFields");
292
+ }
293
+ /*--------------------------------------------------------------------------------*/
294
+ function createFieldNames()
295
+ {
296
+ return new ActiveXObject("transactd.fieldNames");
297
+ }
298
+ /*--------------------------------------------------------------------------------*/
299
+ var sep = "-------------------------------------------------------------------------------";
300
+ var FMT_LEFT = 0;
301
+ var FMT_CENTER = 1;
302
+ var FMT_RIGHT = 2;
303
+ var MAGNIFICATION = 100;
304
+ var resultCode = 0;
305
+ var q;
306
+
307
+ WScript.quit(main());
308
+ /*--------------------------------------------------------------------------------*/
309
+ function initQuery()
310
+ {
311
+ q.Reset();
312
+ gq.Reset();
313
+ }
314
+ /*--------------------------------------------------------------------------------*/
315
+ function isMySQL5_5(db)
316
+ {
317
+ var ver = db.GetBtrVersion(1);
318
+ return (db.Stat == 0) && ((5 == ver.MajorVersion) && (5 == ver.MinorVersion));
319
+ }
320
+ /*--------------------------------------------------------------------------------*/
321
+ function isLegacyTimeFormat(db)
322
+ {
323
+ var ver = db.GetBtrVersion(1);
324
+ return (db.Stat == 0) && ((5 == ver.MajorVersion) && (5 == ver.MinorVersion)
325
+ && ver.Type == MYSQL_TYPE_MYSQL);
326
+ }
327
+ /*--------------------------------------------------------------------------------*/
328
+ function createUserTable(db)
329
+ {
330
+ var dbdef = db.DbDef;
331
+ var tableid = 1;
332
+
333
+ var tableDef = dbdef.InsertTable(tableid);
334
+ tableDef.TableName = "user";
335
+ tableDef.FileName = "user";
336
+ tableDef.CharsetIndex = CHARSET_CP932;
337
+ tableDef.SchemaCodePage = CP_UTF8;
338
+
339
+ var fieldIndex = 0;
340
+ var fd = dbdef.InsertField(tableid, fieldIndex);
341
+ fd.Name = "id";
342
+ fd.Type = ft_autoinc;
343
+ fd.Len = 4;
344
+
345
+ ++fieldIndex;
346
+ fd = dbdef.InsertField(tableid, fieldIndex);
347
+ fd.Name = "���O";
348
+ fd.Type = ft_myvarchar;
349
+ fd.len = 2;
350
+ checkEqual(fd.ValidCharNum, false, "validCharNum 1");
351
+ fd.SetLenByCharnum(20);
352
+ checkEqual(fd.ValidCharNum, true, "validCharNum 2");
353
+ fd.DefaultValue = "John";
354
+ checkEqual(fd.PadCharType, false, "isPadCharType ");
355
+ checkEqual(fd.DateTimeType, false, "isDateTimeType");
356
+
357
+
358
+ ++fieldIndex;
359
+ fd = dbdef.InsertField(tableid, fieldIndex);
360
+ fd.Name = "group";
361
+ fd.Type = ft_integer;
362
+ fd.Len = 4;
363
+ fd.DefaultValue = 10;
364
+
365
+ ++fieldIndex;
366
+ fd = dbdef.InsertField(tableid, fieldIndex);
367
+ fd.Name = "tel";
368
+ fd.Type = ft_myvarchar;
369
+ fd.SetLenByCharnum(21);
370
+ fd.SetNullable(true);
371
+
372
+ ++fieldIndex;
373
+ fd = dbdef.InsertField(tableid, fieldIndex);
374
+ fd.Name = "update_datetime";
375
+ fd.Type = ft_mytimestamp;
376
+ fd.Len = 7;
377
+ fd.DefaultValue = DFV_TIMESTAMP_DEFAULT;
378
+ fd.TimeStampOnUpdate = true;
379
+ checkEqual(fd.TimeStampOnUpdate, true, "TimeStampOnUpdate 1-");
380
+
381
+
382
+ ++fieldIndex;
383
+ fd = dbdef.InsertField(tableid, fieldIndex);
384
+ fd.Name = "create_datetime";
385
+ if (isMySQL5_5(db))
386
+ {
387
+ fd.Type = ft_mydatetime;
388
+ fd.Len = 8;
389
+ }
390
+ else
391
+ {
392
+ fd.Type = ft_mytimestamp;
393
+ fd.Len = 4;
394
+ fd.DefaultValue = DFV_TIMESTAMP_DEFAULT;
395
+ }
396
+ fd.TimeStampOnUpdate = false;
397
+ checkEqual(fd.PadCharType, false, "isPadCharType ");
398
+ checkEqual(fd.DateTimeType, true, "isDateTimeType");
399
+
400
+ var keyNum = 0;
401
+ var key = dbdef.InsertKey(tableid, keyNum);
402
+ var seg1 = key.Segments(0);
403
+ seg1.FieldNum = 0;
404
+ seg1.Flags.Bits(key_extend) = true; //extended key type
405
+ seg1.Flags.Bits(key_changeable) = true;//chanageable
406
+ key.SegmentCount = 1;
407
+ tableDef.PrimaryKeyNum = keyNum;
408
+
409
+ ++keyNum;
410
+ key = dbdef.InsertKey(tableid, keyNum);
411
+ seg1 = key.Segments(0);
412
+ seg1.FieldNum = 2;
413
+ seg1.Flags.Bits(key_duplicate) = true;
414
+ seg1.Flags.Bits(key_extend) = true;
415
+ seg1.Flags.Bits(key_changeable) = true;
416
+ key.SegmentCount = 1;
417
+
418
+ dbdef.UpDateTableDef(tableid);
419
+ if (dbdef.Stat!=0)
420
+ {
421
+ WScript.Echo("user UpDateTableDef erorr:No." + dbdef.Stat);
422
+ return false;
423
+ }
424
+ dbdef = null;
425
+ return true;
426
+ }
427
+ /*--------------------------------------------------------------------------------*/
428
+ function createUserExtTable(db)
429
+ {
430
+ var dbdef = db.DbDef;
431
+ var tableid = 3;
432
+
433
+ var tableDef = dbdef.InsertTable(tableid);
434
+ tableDef.TableName = "extention";
435
+ tableDef.FileName = "extention";
436
+ tableDef.CharsetIndex = CHARSET_CP932;
437
+ tableDef.SchemaCodePage = CP_UTF8;
438
+
439
+ var fieldIndex = 0;
440
+ var fd = dbdef.InsertField(tableid, fieldIndex);
441
+ fd.Name = "id";
442
+ fd.Type = ft_integer;
443
+ fd.Len = 4;
444
+
445
+ ++fieldIndex;
446
+ fd = dbdef.InsertField(tableid, fieldIndex);
447
+ fd.Name = "comment";
448
+ fd.Type = ft_myvarchar;
449
+ fd.SetLenByCharnum(60);
450
+ fd.SetNullable(true);
451
+ checkEqual(fd.DefaultNull, true, "DefaultNull 1");
452
+
453
+ ++fieldIndex;
454
+ fd = dbdef.InsertField(tableid, fieldIndex);
455
+ fd.Name = "bits";
456
+ fd.Type = ft_integer;
457
+ fd.len = 8;
458
+
459
+
460
+ var keyNum = 0;
461
+ var key = dbdef.InsertKey(tableid, keyNum);
462
+ var seg1 = key.Segments(0);
463
+ seg1.FieldNum = 0;
464
+ seg1.Flags.Bits(key_extend) = true; //extended key type
465
+ seg1.Flags.Bits(key_changeable) = true;//chanageable
466
+ key.SegmentCount = 1;
467
+ tableDef.PrimaryKeyNum = keyNum;
468
+ dbdef.UpDateTableDef(tableid);
469
+ if (dbdef.Stat!=0)
470
+ {
471
+ WScript.Echo("extention UpDateTableDef erorr:No." + dbdef.Stat);
472
+ return false;
473
+ }
474
+ dbdef = null;
475
+ return true;
476
+ }
477
+
478
+ /*--------------------------------------------------------------------------------*/
479
+ function createDatabase(db, uri)
480
+ {
481
+ db.Create(uri);
482
+ if (db.Stat!=0)
483
+ {
484
+ WScript.Echo("createDatabase erorr:No." + db.Stat + " " + uri);
485
+ return false;
486
+ }
487
+ if (db.Open(uri, TYPE_BDF, OPEN_NORMAL, "", ""))
488
+ {
489
+ if (!createUserTable(db))return false;
490
+ if (!createUserExtTable(db))return false;
491
+ return true;
492
+ }else
493
+ WScript.Echo("open daatabse erorr:No" + db.stat);
494
+ return false;
495
+ }
496
+ /*--------------------------------------------------------------------------------*/
497
+ function insertData(db)
498
+ {
499
+ var tb = db.OpenTable("user", OPEN_NORMAL);
500
+ checkEqual(db.Stat, 0, "OpenTable user");
501
+ var tb3 = db.OpenTable("extention", OPEN_NORMAL);
502
+ checkEqual(db.Stat, 0, "OpenTable extention");
503
+
504
+ try
505
+ {
506
+ db.BeginTrn();
507
+ tb.ClearBuffer();
508
+ for (var i= 1;i<= 1000;++i)
509
+ {
510
+ tb.SetFV(0, i);
511
+ tb.SetFV(1, i.toString() + " user");
512
+ tb.SetFV("group", ((i-1) % 5)+1);
513
+ tb.Insert();
514
+ }
515
+
516
+ tb3.ClearBuffer();
517
+ for (var i= 1;i<= 1000;++i)
518
+ {
519
+ tb3.SetFV(0, i);
520
+ tb3.SetFV(1, i.toString() + " comment");
521
+ tb3.Insert();
522
+ }
523
+ db.EndTrn();
524
+ }
525
+ catch(e)
526
+ {
527
+ db.AbortTrn();
528
+ throw e;
529
+ }
530
+ }
531
+ /*--------------------------------------------------------------------------------*/
532
+ function todayStr()
533
+ {
534
+ var d = new Date();
535
+ var m = d.getMonth()+1;
536
+ var dt = d.getDate()
537
+ if (m < 10) m = "0" + m;
538
+ if (dt < 10) dt = "0" + dt;
539
+ return d.getFullYear() + "-" + m + "-" + dt;
540
+ }
541
+ /*--------------------------------------------------------------------------------*/
542
+ function test_bit(ate, db)
543
+ {
544
+ var tb = ate.table();
545
+
546
+ tb.KeyNum = 0;
547
+ tb.setFV('id', 1);
548
+ tb.seek();
549
+ checkEqual(tb.Stat, 0);
550
+ var bits = new ActiveXObject("transactd.Bitset");
551
+ /*
552
+ bits.bit(63, true);
553
+ bits.bit(2, true);
554
+ bits.bit(5, true);
555
+ */
556
+ bits(63) = true;
557
+ bits(2) = true;
558
+ bits(5) = true;
559
+
560
+ tb.setFV('bits', bits);
561
+ tb.update();
562
+ checkEqual(tb.Stat, 0);
563
+
564
+ initQuery();
565
+ q.Where('id', '=', 1);
566
+ var rs = ate.index(0).keyValue(1).read(q);
567
+ checkEqual(rs.size , 1);
568
+ bits = rs(0)('bits').GetBits();
569
+
570
+ checkEqual(bits.bit(63), true);
571
+ checkEqual(bits.bit(2), true);
572
+ checkEqual(bits.bit(5), true);
573
+ checkEqual(bits.bit(62), false);
574
+ checkEqual(bits.bit(0), false);
575
+ checkEqual(bits.bit(12), false);
576
+
577
+ checkEqual(bits(63), true);
578
+ checkEqual(bits(2), true);
579
+ checkEqual(bits(5), true);
580
+ checkEqual(bits(62), false);
581
+ checkEqual(bits(0), false);
582
+ checkEqual(bits(12), false);
583
+
584
+ var wr = ate.getWritableRecord();
585
+ wr('id').SetValue(1);
586
+ /*
587
+ bits.bit(63) = false;
588
+ bits.bit(12) = true;
589
+ bits.bit(0) = true;
590
+ bits.bit(62) = true;
591
+ */
592
+ bits(63) = false;
593
+ bits(12) = true;
594
+ bits(0) = true;
595
+ bits(62) = true;
596
+
597
+ wr('bits').SetValue(bits);
598
+ wr.update();
599
+ tb.setFV('id', 1);
600
+ tb.seek();
601
+ checkEqual(tb.Stat, 0);
602
+ bits = tb.getFVbits('bits');
603
+
604
+ checkEqual(bits.bit( 63), false);
605
+ checkEqual(bits.bit( 2), true);
606
+ checkEqual(bits.bit( 5), true);
607
+ checkEqual(bits.bit( 12), true);
608
+ checkEqual(bits.bit( 0), true);
609
+ checkEqual(bits.bit( 62), true);
610
+ checkEqual(bits.bit( 11), false);
611
+ checkEqual(bits.bit( 13), false);
612
+
613
+ checkEqual(bits(63), false);
614
+ checkEqual(bits(2), true);
615
+ checkEqual(bits(5), true);
616
+ checkEqual(bits(12), true);
617
+ checkEqual(bits(0), true);
618
+ checkEqual(bits(62), true);
619
+ checkEqual(bits(11), false);
620
+ checkEqual(bits(13), false);
621
+
622
+ }
623
+ /*--------------------------------------------------------------------------------*/
624
+ function test_bitset()
625
+ {
626
+ var bits1 = new ActiveXObject("transactd.Bitset");
627
+ var bits2 = new ActiveXObject("transactd.Bitset");
628
+ bits1(0) = true;
629
+ bits1(1) = true;
630
+ bits1(63) = true;
631
+
632
+ bits2(0) = true;
633
+ bits2(1) = false;
634
+ bits2(63) = true;
635
+
636
+ checkEqual(bits1.equals(bits2), false);
637
+ checkEqual(bits1.contains(bits2), true);
638
+ checkEqual(bits2.contains(bits1), false);
639
+
640
+ var all = false;
641
+ checkEqual(bits2.contains(bits1, all), true);
642
+ }
643
+
644
+ /*--------------------------------------------------------------------------------*/
645
+ function test_decimal(fd)
646
+ {
647
+ fd.type = ft_mydecimal;
648
+ fd.setDecimalDigits(65, 30);
649
+ checkEqual(fd.digits, 65);
650
+ checkEqual(fd.decimals, 30);
651
+ checkEqual(fd.isIntegerType, false);
652
+ checkEqual(fd.isNumericType, true);
653
+ var bits1 = new ActiveXObject("transactd.Bitset");
654
+ bits1(2) = true;
655
+ fd.type = ft_integer;
656
+ fd.len = 4;
657
+ fd.DefaultValue = bits1;
658
+ checkEqual(fd.DefaultValue, '4');
659
+ }
660
+
661
+ /*--------------------------------------------------------------------------------*/
662
+ function test(atu, ate, db)
663
+ {
664
+ //WScript.Echo(" -- Start Test -- ");
665
+ var x86 = isX86();
666
+
667
+ db.AutoSchemaUseNullkey = true;
668
+ checkEqual(db.AutoSchemaUseNullkey, true, "AutoSchemaUseNullkey");
669
+ db.AutoSchemaUseNullkey = false;
670
+ checkEqual(db.AutoSchemaUseNullkey, false, "AutoSchemaUseNullkey");
671
+
672
+ checkEqual(db.CompatibleMode, CMP_MODE_MYSQL_NULL, "CompatibleMode 1");
673
+
674
+ db.CompatibleMode = CMP_MODE_OLD_NULL;
675
+ checkEqual(db.CompatibleMode, CMP_MODE_OLD_NULL, "CompatibleMode 2");
676
+
677
+ db.CompatibleMode = CMP_MODE_MYSQL_NULL;
678
+ checkEqual(db.CompatibleMode, CMP_MODE_MYSQL_NULL, "CompatibleMode 3");
679
+
680
+
681
+
682
+ var dbdef = db.DbDef;
683
+ var td = dbdef.TableDef(1);
684
+
685
+ //MysqlNullMode
686
+ checkEqual(td.MysqlNullMode , true, "MysqlNullMode");
687
+
688
+ var len = 104;
689
+ if (isMySQL5_5(db))
690
+ len += 4;
691
+ if (isLegacyTimeFormat(db))
692
+ len -= 3;
693
+ checkEqual(td.RecordLen , len, "recordlen");
694
+ //InUse
695
+ checkEqual(td.InUse , 2, "InUse");
696
+
697
+ //nullfields
698
+ checkEqual(td.Nullfields , 1, "nullfields");
699
+
700
+ //size()
701
+ checkEqual(td.Size , 1184, "size");
702
+
703
+ //fieldNumByName
704
+ checkEqual(td.FieldNumByName("tel") , 3, "fieldNumByName");
705
+
706
+ //default value
707
+ var fd = td.FieldDef(1);
708
+ checkEqual(fd.DefaultValue, "John", "default value 1");
709
+ fd = td.FieldDef(2);
710
+ checkEqual(fd.DefaultValue, "10", "default value 2");
711
+ fd = td.FieldDef(3);
712
+ checkEqual(fd.DefaultNull, true, "DefaultNull");
713
+ fd = td.FieldDef(4);
714
+ checkEqual(fd.DefaultValue, String(DFV_TIMESTAMP_DEFAULT), "default value timestamp");
715
+ checkEqual(fd.TimeStampOnUpdate, true, "TimeStampOnUpdate 1");
716
+ fd = td.FieldDef(5);
717
+ checkEqual(fd.TimeStampOnUpdate, false, "TimeStampOnUpdate 2");
718
+
719
+
720
+ fd = td.FieldDef(1);
721
+ // synchronizeSeverSchema
722
+ var len = fd.Len;
723
+
724
+ fd.SetLenByCharnum(19);
725
+ checkNotEqual(len, fd.Len, "synchronizeSeverSchema 1");
726
+ dbdef.SynchronizeSeverSchema(1);
727
+ td = dbdef.TableDef(1);
728
+ fd = td.FieldDef(1);
729
+ checkEqual(len, fd.Len, "synchronizeSeverSchema 2");
730
+
731
+ // syncronize default value
732
+ fd = td.FieldDef(1);
733
+ checkEqual(fd.DefaultValue, "John", "default value 2-1");
734
+ fd = td.FieldDef(2);
735
+ checkEqual(fd.DefaultValue, "10", "default value 2-2");
736
+ fd = td.FieldDef(3);
737
+ checkEqual(fd.DefaultNull, true, "DefaultNull 2");
738
+ fd = td.FieldDef(4);
739
+ checkEqual(fd.TimeStampOnUpdate, true, "TimeStampOnUpdate 2-1");
740
+ fd = td.FieldDef(5);
741
+ checkEqual(fd.TimeStampOnUpdate, false, "TimeStampOnUpdate 2-2");
742
+
743
+ // nullable
744
+ fd = td.FieldDef(3);
745
+ checkEqual(fd.Nullable, true, "Nullable");
746
+
747
+ // getSqlStringForCreateTable
748
+ var sql = db.GetSqlStringForCreateTable("extention");
749
+ checkEqual(db.Stat, 0, "GetSqlStringForCreateTable");
750
+ checkEqual(sql, 'CREATE TABLE `extention` (`id` INT NOT NULL ,`comment` VARCHAR(60) binary NULL DEFAULT NULL,`bits` BIGINT NOT NULL , UNIQUE key0(`id`)) ENGINE=InnoDB default charset=cp932',
751
+ "GetSqlStringForCreateTable");
752
+
753
+ // setValidationTarget(bool isMariadb, uchar_td srvMinorVersion)
754
+ td = dbdef.TableDef(1);
755
+ td.SetValidationTarget(true, 0);
756
+
757
+ // isNull setNull
758
+ initQuery();
759
+
760
+ // segmentsForInValue
761
+ checkEqual(q.SegmentsForInValue(3).GetJoinKeySize(), 3, "SegmentsForInValue");
762
+ q.Reset();
763
+ checkEqual(q.GetJoinKeySize(), 0, "GetJoinKeySize");
764
+
765
+ atu.Alias("���O", "name");
766
+ q.Select("id", "name", "group", "tel").Where("id", "<=", 10);
767
+ var rs = atu.Index(0).KeyValue(null).Read(q);
768
+ checkEqual(rs.Count, 10, "atu rs.Count = 10 ");
769
+ var rec = rs.First();
770
+ checkEqual(rec(3).IsNull(), true, "NULL true");
771
+ rec(3).setNull(false);
772
+ checkEqual(rec(3).IsNull(), false, "NULL false");
773
+
774
+ //Join null
775
+ initQuery();
776
+ var last = ate.Index(0).Join(rs, q.Select("comment").Optimize(hasOneJoin), "id").Reverse().First();
777
+ checkEqual(rs.Count, 10, "ate rs.Count = 10 ");
778
+ checkEqual(last.Field("id").i(), 10, "last.id = 10 ");
779
+ if (!x86)
780
+ checkEqual(last.Field("id").i64(), 10, "last.id = 10 ");
781
+ checkEqual(last.Field("id").d(), 10, "last.id = 10 ");
782
+ checkEqual(rec(4).IsNull(), false, "Join NULL1");
783
+ rec(4).setValue(null);
784
+ checkEqual(rec(4).IsNull(), true, "Join NULL2");
785
+
786
+ //WritableRecord.clear()
787
+ var wr = atu.getWritableRecord();
788
+ wr.Clear();
789
+ wr("id").setValue(5);
790
+ wr("tel").setValue("0236-99-9999");
791
+ wr.Update();
792
+ wr.Clear();
793
+ wr("id").setValue(5);
794
+
795
+ checkEqual(wr.Read(), true, "wr.Read");
796
+ checkEqual(wr("tel").str(), "0236-99-9999", "tel ");
797
+
798
+ //whereIsNull
799
+ initQuery();
800
+ q.Select("id", "tel").WhereIsNull("tel").Reject(0xFFFF);
801
+ rs = atu.Index(0).KeyValue(0).Read(q);
802
+ checkEqual(rs.Count, 999, "atu rs.Count = 999 ");
803
+
804
+ //whereIsNotNull
805
+ initQuery();
806
+ q.Select("id", "tel").WhereIsNotNull("tel").Reject(0xFFFF);
807
+ rs = atu.Index(0).KeyValue(0).Read(q);
808
+ checkEqual(rs.Count, 1, "atu rs.Count = 1 ");
809
+
810
+ //AndIsNull
811
+ initQuery();
812
+ q.Select("id", "tel").Where("id", "<=", 10).AndIsNull("tel").Reject(0xFFFF);
813
+ rs = atu.Index(0).KeyValue(0).Read(q);
814
+ checkEqual(rs.Count, 9, "atu rs.Count = 9 ");
815
+
816
+ //AndIsNotNull
817
+ initQuery();
818
+ q.Select("id", "tel").Where("id", "<", 10).AndIsNotNull("tel").Reject(0xFFFF);
819
+ rs = atu.Index(0).KeyValue(0).Read(q);
820
+ checkEqual(rs.Count, 1, "atu rs.Count = 1 ");
821
+
822
+ //OrIsNull
823
+ initQuery();
824
+ q.Select("id", "tel").Where("id", "<=", 10).OrIsNull("tel").Reject(0xFFFF);
825
+ rs = atu.Index(0).KeyValue(0).Read(q);
826
+ checkEqual(rs.Count, 1000, "atu rs.Count = 1000 ");
827
+
828
+ //OrIsNotNull
829
+ initQuery();
830
+ q.Select("id", "tel").Where("id", "<=", 10).OrIsNotNull("tel").Reject(0xFFFF);
831
+ rs = atu.Index(0).KeyValue(0).Read(q);
832
+ checkEqual(rs.Count, 10, "atu rs.Count = 10 ");
833
+
834
+ //test recordset query
835
+ q.Reset();
836
+ q.Select("id", "name", "group", "tel");
837
+ rs = atu.Index(0).KeyValue(0).Read(q);
838
+ checkEqual(rs.Count, 1000, "rs.Count = 1000 ");
839
+
840
+ // recordset whenIsNull
841
+ var rq = createRecordsetQuery();
842
+ rq.WhenIsNull("tel");
843
+ rs2 = rs.Clone();
844
+ rs2 = rs2.MatchBy(rq);
845
+ checkEqual(rs2.Count, 999, "rs.Count = 999 ");
846
+
847
+ //recordset whenIsNotNull
848
+ rq.Reset();
849
+ rq.WhenIsNotNull("tel");
850
+ rs2 = rs.Clone();
851
+ rs2 = rs2.MatchBy(rq);
852
+ checkEqual(rs2.Count, 1, "rs.Count = 1 ");
853
+
854
+ //recordset andIsNull
855
+ rq.Reset();
856
+ rq.When("id", "<=", 10).AndIsNull("tel");
857
+ rs2 = rs.Clone();
858
+ rs2 = rs2.MatchBy(rq);
859
+ checkEqual(rs2.Count, 9, "rs.Count = 9 ");
860
+
861
+ //recordset andIsNotNull
862
+ rq.Reset();
863
+ rq.When("id", "<", 10).AndIsNotNull("tel");
864
+ rs2 = rs.Clone();
865
+ rs2 = rs2.MatchBy(rq);
866
+ checkEqual(rs2.Count, 1, "rs.Count = 1 ");
867
+
868
+ // recordset orIsNull
869
+ rq.Reset();
870
+ rq.When("id", "<=", 10).OrIsNull("tel");
871
+ rs2 = rs.Clone();
872
+ rs2 = rs2.MatchBy(rq);
873
+ checkEqual(rs2.Count, 1000, "rs.Count = 1000 ");
874
+
875
+ //recordset orIsNotNull
876
+ rq.Reset();
877
+ rq.When("id", "<=", 10).OrIsNotNull("tel");
878
+ rs2 = rs.Clone();
879
+ rs2 = rs2.MatchBy(rq);
880
+ checkEqual(rs2.Count, 10, "rs.Count = 10 ");
881
+
882
+ //setBin bin
883
+ var bin = String.fromCharCode(0xFF01,0xFF02);
884
+ wr("tel").SetBin(bin);
885
+ var ret = wr("tel").Bin();
886
+ checkEqual(ret.charCodeAt(0), 0xFF01, "SetBin Bin");
887
+ checkEqual(ret.charCodeAt(1), 0xFF02, "SetBin Bin");
888
+
889
+
890
+ // table::default NULL
891
+ var tb = db.OpenTable("user");
892
+ checkEqual(db.Stat, 0, "");
893
+ tb.KeyNum = 0;
894
+ tb.ClearBuffer();
895
+ checkEqual(tb.GetFVNull(3), true, "Default NULL");
896
+
897
+ tb.ClearBuffer(clearNull);
898
+ checkEqual(tb.GetFVNull(3), false, "clearNull NULL");
899
+
900
+ // table NULL
901
+ tb.SetFV("id", 1);
902
+ tb.Seek();
903
+ checkEqual(tb.Stat, 0, "Seek");
904
+ checkEqual(tb.GetFVNull(3), true, "Default NULL");
905
+ checkEqual(tb.GetFVNull("tel"), true, "Default NULL");
906
+ tb.SetFVNull(3, false);
907
+ checkEqual(tb.GetFVNull(3), false, "tb.Null");
908
+ tb.SetFVNull("tel", true);
909
+ checkEqual(tb.GetFVNull("tel"), true, "tb.Null");
910
+ if (x86)
911
+ {
912
+ tb.SetFV("id", 10);
913
+ checkEqual(tb.GetFVint("id"), 10, "tb.SetFV");
914
+ tb.SetFV("id", "10");
915
+ checkEqual(tb.GetFVint("id"), 10, "tb.SetFV");
916
+ tb.SetFV("id", 10.00);
917
+ checkEqual(tb.GetFVint("id"), 10, "tb.SetFV");
918
+ }
919
+ else
920
+ {
921
+ tb.SetFV("id", 10);
922
+ checkEqual(tb.GetFV64("id"), 10, "tb.SetFV");
923
+ tb.SetFV("id", "10");
924
+ checkEqual(tb.GetFV64("id"), 10, "tb.SetFV");
925
+ tb.SetFV("id", 10.00);
926
+ checkEqual(tb.GetFV64("id"), 10, "tb.SetFV");
927
+ }
928
+ checkEqual(tb.GetFVstr("id"), "10", "tb.SetFV");
929
+
930
+ // timestamp format
931
+ var date = todayStr();
932
+ checkEqual(tb.getFVstr("update_datetime").substr(0, 10), date);
933
+ if (!isMySQL5_5(db))
934
+ checkEqual(tb.getFVstr("create_datetime").substr(0, 10), date);
935
+
936
+ // setTimestampMode
937
+ tb.SetTimestampMode(TIMESTAMP_VALUE_CONTROL);
938
+ tb.SetTimestampMode(TIMESTAMP_ALWAYS);
939
+
940
+ // MysqlNullMode
941
+ checkEqual(tb.TableDef.MysqlNullMode , true, "MysqlNullMode 2");
942
+ checkEqual(td.InUse , 2, "InUse2");
943
+
944
+ test_bit(ate, db);
945
+ test_bitset();
946
+ test_decimal(ate.TableDef.FieldDef(0));
947
+ //WScript.Echo(" -- End Test -- ");
948
+ }
949
+ /*--------------------------------------------------------------------------------*/
950
+ function main()
951
+ {
952
+ var isCreate = 1;
953
+ var host = "localhost";
954
+ if (WScript.arguments.length > 0)
955
+ isCreate = parseInt(WScript.arguments(0), 10);
956
+
957
+ if (WScript.arguments.length > 1)
958
+ host = WScript.arguments(1);
959
+ var URI = "tdap://" + host + "/test_v3?dbfile=test.bdf";
960
+
961
+
962
+ WScript.Echo(URI);
963
+ var b = new bench();
964
+ try
965
+ {
966
+ var database = createDatabaseObject();
967
+ if (database == null)
968
+ {
969
+ WScript.Echo("transactd.database ActiveXObject erorr.");
970
+ return 1;
971
+ }
972
+ if (database.Open(URI, TYPE_BDF, OPEN_NORMAL, "", ""))
973
+ {
974
+
975
+ if (isCreate > 0)
976
+ database.Drop();
977
+ }else
978
+ {
979
+ if (database.Stat != STATUS_TABLE_NOTOPEN )
980
+ {
981
+ WScript.Echo("database erorr: " + database.Stat);
982
+ return 1;
983
+ }
984
+ isCreate = true;
985
+ }
986
+ if (isCreate > 0)
987
+ {
988
+ WScript.Echo("Creating test data. Please wait ...");
989
+ if (createDatabase(database, URI))
990
+ insertData(database);
991
+ }
992
+
993
+ if (database.Stat !== 0)
994
+ {
995
+ WScript.Echo("open table erorr:No" + database.stat);
996
+ return 2;
997
+ }
998
+ var atu = createActiveTable(database, "user");
999
+ var ate = createActiveTable(database, "extention");
1000
+
1001
+ q = createQuery();;
1002
+ gq = createGroupQuery();
1003
+
1004
+ b.report(test, atu, ate, database);
1005
+ b.show();
1006
+ if (resultCode == 0)
1007
+ WScript.Echo("*** No errors detected.");
1008
+ }
1009
+ catch(e)
1010
+ {
1011
+ WScript.Echo("Error:" + e.name + " " + e.description);
1012
+ return 2;
1013
+ }
1014
+
1015
+ return resultCode;
1016
+ }
1017
+