sqlanywhere 0.1.6-x86-mingw32

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.
data/ext/sqlanywhere.o ADDED
Binary file
Binary file
Binary file
@@ -0,0 +1,423 @@
1
+ #====================================================
2
+ #
3
+ # Copyright 2008-2010 iAnywhere Solutions, Inc.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ #
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ # While not a requirement of the license, if you do modify this file, we
20
+ # would appreciate hearing about it. Please email sqlany_interfaces@sybase.com
21
+ #
22
+ #
23
+ #====================================================
24
+
25
+ require 'test/unit'
26
+ require 'date'
27
+
28
+ begin
29
+ require 'rubygems'
30
+ unless defined? SQLAnywhere
31
+ require 'sqlanywhere'
32
+ end
33
+ end
34
+
35
+ class Types
36
+ A_INVALID_TYPE= 0
37
+ A_BINARY = 1
38
+ A_STRING = 2
39
+ A_DOUBLE = 3
40
+ A_VAL64 = 4
41
+ A_UVAL64 = 5
42
+ A_VAL32 = 6
43
+ A_UVAL32 = 7
44
+ A_VAL16 = 8
45
+ A_UVAL16 = 9
46
+ A_VAL8 = 10
47
+ A_UVAL8 = 11
48
+ end
49
+
50
+ class Direction
51
+ DD_INVALID = 0
52
+ DD_INPUT = 1
53
+ DD_OUTPUT = 2
54
+ DD_INPUT_OUTPUT = 3
55
+ end
56
+
57
+ class SQLAnywhere_Test < Test::Unit::TestCase
58
+ def setup
59
+ @api = SQLAnywhere::SQLAnywhereInterface.new()
60
+ assert_not_nil @api
61
+ assert_nothing_raised do
62
+ SQLAnywhere::API.sqlany_initialize_interface( @api )
63
+ end
64
+ assert_nothing_raised do
65
+ @api.sqlany_init()
66
+ end
67
+ @conn = @api.sqlany_new_connection()
68
+ assert_not_nil @conn
69
+ conn_str = "eng=test;uid=dba;pwd=sql"
70
+ assert_succeeded @api.sqlany_connect(@conn, conn_str)
71
+ end
72
+
73
+ def teardown
74
+ assert_succeeded @api.sqlany_execute_immediate(@conn, 'SELECT * FROM dummy')
75
+ assert_nil @api.sqlany_disconnect(@conn)
76
+ assert_failed @api.sqlany_execute_immediate(@conn, 'SELECT * FROM dummy')
77
+ assert_nil @api.sqlany_free_connection(@conn)
78
+ assert_nothing_raised do
79
+ @api.sqlany_fini()
80
+ end
81
+ assert_nothing_raised do
82
+ SQLAnywhere::API.sqlany_finalize_interface( @api )
83
+ end
84
+ end
85
+
86
+ def test_execute_immediate
87
+ assert_succeeded @api.sqlany_execute_immediate(@conn, 'SELECT * FROM dummy')
88
+ end
89
+
90
+ def test_errors
91
+ sql = "INSERT INTO test(\"id\") VALUES('test');"
92
+ assert_failed @api.sqlany_execute_immediate(@conn, sql)
93
+ code, msg = @api.sqlany_error(@conn)
94
+ assert_equal -157, code
95
+ assert_not_equal "", msg
96
+ assert_equal "53018\000", @api.sqlany_sqlstate(@conn)
97
+ assert_nil @api.sqlany_clear_error(@conn)
98
+ code, msg = @api.sqlany_error(@conn)
99
+ assert_equal 0, code
100
+ assert_equal "", msg
101
+ end
102
+
103
+ def test_rollback
104
+ id = setup_transaction
105
+ @api.sqlany_rollback(@conn)
106
+ sql = "SELECT * FROM test where \"id\" = " + id.to_s + ";"
107
+ rs = exec_direct_with_test(sql)
108
+ assert_failed @api.sqlany_fetch_next(rs)
109
+ end
110
+
111
+ def test_commit
112
+ id = setup_transaction
113
+ @api.sqlany_commit(@conn)
114
+ sql = "SELECT * FROM test where \"id\" = " + id.to_s + ";"
115
+ rs = exec_direct_with_test(sql)
116
+ assert_succeeded @api.sqlany_fetch_next(rs)
117
+ res, ret_id = @api.sqlany_get_column(rs, 0)
118
+ assert_succeeded res
119
+ assert_not_nil ret_id
120
+ assert_equal id, ret_id
121
+ assert_failed @api.sqlany_fetch_next(rs)
122
+ end
123
+
124
+ def test_column_info
125
+ is_iq = is_iq_table?("types")
126
+ rs = exec_direct_with_test("SELECT TOP 2 * FROM \"types\" ORDER BY \"id\"")
127
+ assert_equal 22, @api.sqlany_num_cols(rs)
128
+ assert_column_info(rs, 0, "id", Types::A_VAL32, 4)
129
+ assert_column_info(rs, 1, "_binary_", Types::A_BINARY, 8)
130
+ assert_column_info(rs, 2, "_numeric_", Types::A_STRING, 2)
131
+ assert_column_info(rs, 3, "_decimal_", Types::A_STRING, 2)
132
+ assert_column_info(rs, 4, "_bounded_string_", Types::A_STRING, 255)
133
+ assert_column_info(rs, 5, "_unbounded_string_", Types::A_STRING, (2 * (2**30)) - 1)
134
+ assert_column_info(rs, 6, "_signed_bigint_", Types::A_VAL64, 8)
135
+ assert_column_info(rs, 7, "_unsigned_bigint_", Types::A_UVAL64, 8)
136
+ assert_column_info(rs, 8, "_signed_int_", Types::A_VAL32, 4)
137
+ assert_column_info(rs, 9, "_unsigned_int_", Types::A_UVAL32, 4)
138
+ assert_column_info(rs, 10, "_signed_smallint_", Types::A_VAL16, 2)
139
+ assert_column_info(rs, 11, "_unsigned_smallint_", Types::A_UVAL16, 2) unless is_iq #IQ Does not have an unsigned small int datatype
140
+ assert_column_info(rs, 12, "_signed_tinyint_", Types::A_UVAL8, 1)
141
+ assert_column_info(rs, 13, "_unsigned_tinyint_", Types::A_UVAL8, 1)
142
+ assert_column_info(rs, 14, "_bit_", Types::A_VAL8, 1)
143
+ assert_column_info(rs, 15, "_date_", Types::A_STRING, 10)
144
+ assert_column_info(rs, 16, "_datetime_", Types::A_STRING, 23)
145
+ assert_column_info(rs, 17, "_smalldatetime_", Types::A_STRING, 23)
146
+ assert_column_info(rs, 18, "_timestamp_", Types::A_STRING, 23)
147
+ assert_column_info(rs, 19, "_double_", Types::A_DOUBLE, 8)
148
+ assert_column_info(rs, 20, "_float_", Types::A_DOUBLE, 4)
149
+ assert_column_info(rs, 21, "_real_", Types::A_DOUBLE, 4)
150
+ assert_nil @api.sqlany_free_stmt(rs)
151
+ end
152
+
153
+ def test_bounds_on_types
154
+ is_iq = is_iq_table?("types")
155
+ rs = exec_direct_with_test("SELECT TOP 2 * FROM \"types\" ORDER BY \"id\"")
156
+ assert_succeeded @api.sqlany_fetch_next(rs)
157
+ assert_class_and_value(rs, String, 1, "x")
158
+ assert_class_and_value(rs, String, 2, "1.1")
159
+ assert_class_and_value(rs, String, 3, "1.1")
160
+ assert_class_and_value(rs, String, 4, 'Bounded String Test')
161
+ assert_class_and_value(rs, String, 5, 'Unbounded String Test')
162
+ assert_class_and_value(rs, Bignum, 6, 9223372036854775807)
163
+ assert_class_and_value(rs, Bignum, 7, 18446744073709551615)
164
+ assert_class_and_value(rs, Bignum, 8, 2147483647)
165
+ assert_class_and_value(rs, Bignum, 9, 4294967295)
166
+ assert_class_and_value(rs, Fixnum, 10, 32767)
167
+ assert_class_and_value(rs, Fixnum, 11, 65535) unless is_iq #IQ Does not have an unsigned small int datatype
168
+ assert_class_and_value(rs, Fixnum, 12, 255)
169
+ assert_class_and_value(rs, Fixnum, 13, 255)
170
+ assert_class_and_value(rs, Fixnum, 14, 1)
171
+ assert_date_and_time(rs, Date, 15, Date.new(1999, 1, 2))
172
+ assert_date_and_time(rs, DateTime, 16, DateTime.new(1999, 1, 2, 21, 20, 53))
173
+ assert_date_and_time(rs, DateTime, 17, DateTime.new(1999, 1, 2, 21, 20, 53))
174
+ assert_date_and_time(rs, DateTime, 18, DateTime.new(1999, 1, 2, 21, 20, 53))
175
+ assert_class_and_float_value(rs, Float, 19, 1.79769313486231e+308, 1e+293 )
176
+ assert_class_and_float_value(rs, Float, 20, 3.402823e+38, 1e+32 )
177
+ assert_class_and_float_value(rs, Float, 21, 3.402823e+38, 1e+32 )
178
+
179
+ assert_succeeded @api.sqlany_fetch_next(rs)
180
+ assert_class_and_value(rs, String, 1, 255.chr)
181
+ assert_class_and_value(rs, String, 2, "-1.1")
182
+ assert_class_and_value(rs, String, 3, "-1.1")
183
+ assert_class_and_value(rs, String, 4, '')
184
+ assert_class_and_value(rs, String, 5, '')
185
+ assert_class_and_value(rs, Bignum, 6, -9223372036854775808)
186
+ assert_class_and_value(rs, Fixnum, 7, 0)
187
+ assert_class_and_value(rs, Bignum, 8, -2147483648)
188
+ assert_class_and_value(rs, Fixnum, 9, 0)
189
+ assert_class_and_value(rs, Fixnum, 10, -32768)
190
+ assert_class_and_value(rs, Fixnum, 11, 0) unless is_iq #IQ Does not have an unsigned small int datatype
191
+ assert_class_and_value(rs, Fixnum, 12, 0)
192
+ assert_class_and_value(rs, Fixnum, 13, 0)
193
+ assert_class_and_value(rs, Fixnum, 14, 0)
194
+ assert_class_and_value(rs, NilClass, 15, nil)
195
+ assert_class_and_value(rs, NilClass, 16, nil)
196
+ assert_class_and_value(rs, NilClass, 17, nil)
197
+ assert_class_and_value(rs, NilClass, 18, nil)
198
+ assert_class_and_float_value(rs, Float, 19, -1.79769313486231e+308, 1e+293 )
199
+ assert_class_and_float_value(rs, Float, 20, -3.402823e+38, 1e+32 )
200
+ assert_class_and_float_value(rs, Float, 21, -3.402823e+38, 1e+32 )
201
+ assert_nil @api.sqlany_free_stmt(rs)
202
+ end
203
+
204
+ def test_prepared_stmt
205
+ is_iq = is_iq_table?("types")
206
+ stmt = @api.sqlany_prepare(@conn, "SELECT * FROM \"types\" WHERE \"id\" = ?")
207
+ assert_not_nil stmt
208
+ assert_failed @api.sqlany_execute(stmt) unless is_iq #IQ does not throw an error here
209
+ assert_equal 1, @api.sqlany_num_params(stmt)
210
+ res, param = @api.sqlany_describe_bind_param(stmt, 0)
211
+ assert_not_equal 0, res
212
+ assert_equal "?", param.get_name()
213
+ assert_equal Direction::DD_INPUT, param.get_direction()
214
+
215
+ assert_nil param.set_value(0);
216
+ @api.sqlany_bind_param(stmt, 0, param)
217
+ assert_succeeded @api.sqlany_execute(stmt)
218
+ assert_succeeded @api.sqlany_fetch_next(stmt)
219
+ assert_class_and_value(stmt, String, 4, "Bounded String Test")
220
+
221
+ assert_nil param.set_value(1);
222
+ @api.sqlany_bind_param(stmt, 0, param)
223
+ assert_succeeded @api.sqlany_execute(stmt)
224
+ assert_succeeded @api.sqlany_fetch_next(stmt)
225
+ assert_class_and_value(stmt, String, 4, "")
226
+
227
+ assert_nil @api.sqlany_free_stmt(stmt)
228
+ end
229
+
230
+ def test_insert_binary
231
+ assert_insert("_binary_", "x", String)
232
+ end
233
+
234
+ def test_insert_numeric
235
+ assert_insert("_numeric_", "1.1", String)
236
+ end
237
+
238
+ def test_insert_decimal
239
+ assert_insert("_decimal_", "1.1", String)
240
+ end
241
+
242
+ def test_insert_bounded_string
243
+ assert_insert("_bounded_string_", "Bounded String Test", String)
244
+ end
245
+
246
+ def test_insert_unbounded_string
247
+ assert_insert("_unbounded_string_", "Unbounded String Test", String)
248
+ end
249
+
250
+ def test_insert_int64
251
+ assert_insert("_signed_bigint_", 9223372036854775807, Bignum)
252
+ assert_insert("_signed_bigint_", -9223372036854775808, Bignum)
253
+ end
254
+
255
+ def test_insert_uint64
256
+ assert_insert("_unsigned_bigint_", 9223372036854775807, Bignum)
257
+ assert_insert("_unsigned_bigint_", 0, Fixnum)
258
+ end
259
+
260
+ def test_insert_int32
261
+ assert_insert("_signed_int_", 2147483647, Bignum)
262
+ assert_insert("_signed_int_", -2147483648, Bignum)
263
+ end
264
+
265
+ def test_insert_uint32
266
+ assert_insert("_unsigned_int_", 4294967295, Bignum)
267
+ assert_insert("_unsigned_int_", 0, Fixnum)
268
+ end
269
+
270
+ def test_insert_int16
271
+ assert_insert("_signed_smallint_", 32767, Fixnum)
272
+ assert_insert("_signed_smallint_", -32768, Fixnum)
273
+ end
274
+
275
+ def test_insert_uint16
276
+ is_iq = is_iq_table?("types") #IQ Does not have an unsigned small int datatype
277
+ assert_insert("_unsigned_smallint_", 65535, Fixnum) unless is_iq
278
+ assert_insert("_unsigned_smallint_", 0, Fixnum) unless is_iq
279
+ end
280
+
281
+ def test_insert_int8
282
+ assert_insert("_signed_smallint_", 255, Fixnum)
283
+ assert_insert("_signed_smallint_", 0, Fixnum)
284
+ end
285
+
286
+ def test_insert_uint8
287
+ is_iq = is_iq_table?("types") #IQ Does not have an unsigned small int datatype
288
+ assert_insert("_unsigned_smallint_", 255, Fixnum) unless is_iq
289
+ assert_insert("_unsigned_smallint_", 0, Fixnum) unless is_iq
290
+ end
291
+
292
+ def test_insert_date
293
+ assert_insert("_date_", Date.new(1999, 1, 2), Date)
294
+ end
295
+
296
+ def test_insert_datetime
297
+ assert_insert("_datetime_", DateTime.new(1999, 1, 2, 21, 20, 53), DateTime)
298
+ end
299
+
300
+ def test_insert_smalldate
301
+ assert_insert("_smalldatetime_", DateTime.new(1999, 1, 2, 21, 20, 53), DateTime)
302
+ end
303
+
304
+ def test_insert_timestamp
305
+ assert_insert("_timestamp_", DateTime.new(1999, 1, 2, 21, 20, 53), DateTime)
306
+ end
307
+
308
+ def test_insert_double
309
+ assert_insert("_double_", 1.79769313486231e+308, Float, 1e+293)
310
+ end
311
+
312
+ def test_insert_float
313
+ assert_insert("_float_", 3.402823e+38, Float, 1e+32)
314
+ end
315
+
316
+ def test_insert_real
317
+ assert_insert("_real_", 3.402823e+38, Float, 1e+32)
318
+ end
319
+
320
+ def is_iq_table?(table_name)
321
+ rs = @api.sqlany_execute_direct(@conn, "SELECT server_type FROM SYS.SYSTABLE WHERE table_name = '#{table_name}'")
322
+ @api.sqlany_fetch_next(rs)
323
+ return @api.sqlany_get_column(rs, 0)[1] == 'IQ'
324
+ end
325
+
326
+ def assert_insert(column_name, value, type, delta = nil)
327
+ stmt = @api.sqlany_prepare(@conn, 'INSERT INTO "types"("id", "' + column_name + '", "_bit_") VALUES(3, ?, 1)')
328
+ assert_not_nil stmt
329
+ res, param = @api.sqlany_describe_bind_param(stmt, 0)
330
+ if type == Date or type == DateTime then
331
+ assert_nil param.set_value(value.strftime("%F %T"));
332
+ else
333
+ assert_nil param.set_value(value);
334
+ end
335
+ @api.sqlany_bind_param(stmt, 0, param)
336
+ assert_succeeded @api.sqlany_execute(stmt)
337
+ assert_nil @api.sqlany_free_stmt(stmt)
338
+
339
+ rs = exec_direct_with_test('SELECT "' + column_name + '" FROM "types" WHERE "id" = 3')
340
+ assert_succeeded @api.sqlany_fetch_next(rs)
341
+ if type == Date or type == DateTime then
342
+ assert_date_and_time(rs, type, 0, value)
343
+ elsif type == Float
344
+ assert_class_and_float_value(rs, type, 0, value, delta)
345
+ else
346
+ assert_class_and_value(rs, type, 0, value)
347
+ end
348
+
349
+ assert_nil @api.sqlany_free_stmt(rs)
350
+
351
+ @api.sqlany_rollback(@conn)
352
+ end
353
+
354
+ def assert_column_info(rs, pos, expected_col_name, expected_col_type, expected_col_size)
355
+ res, col_num, col_name, col_type, col_native_type, col_precision, col_scale, col_size, col_nullable = @api.sqlany_get_column_info(rs, pos);
356
+ assert_succeeded res
357
+ assert_equal expected_col_name, col_name
358
+ assert_equal expected_col_type, col_type
359
+ assert_equal expected_col_size, col_size
360
+ end
361
+
362
+ def assert_class_and_float_value(rs, cl, pos, expected_value, allowed_delta)
363
+ res, val = @api.sqlany_get_column(rs, pos)
364
+ assert_succeeded res
365
+ assert_not_nil val unless expected_value.nil?
366
+ assert_in_delta expected_value, val, allowed_delta
367
+ assert_instance_of cl, val
368
+ end
369
+
370
+ def assert_date_and_time(rs, cl, pos, expected_value)
371
+ res, val = @api.sqlany_get_column(rs, pos)
372
+ assert_succeeded res
373
+ assert_not_nil val unless expected_value.nil?
374
+ parsed = cl.parse(val)
375
+ assert_equal expected_value, parsed
376
+ assert_instance_of cl, parsed
377
+ end
378
+
379
+ def assert_class_and_value(rs, cl, pos, expected_value)
380
+ res, val = @api.sqlany_get_column(rs, pos)
381
+ assert_succeeded res
382
+ assert_not_nil val unless expected_value.nil?
383
+ assert_equal expected_value, val
384
+ assert_instance_of cl, val
385
+ end
386
+
387
+ def setup_transaction
388
+ sql = "INSERT INTO test VALUES( DEFAULT );"
389
+ assert_succeeded @api.sqlany_execute_immediate(@conn, sql)
390
+
391
+ rs = exec_direct_with_test("SELECT @@identity")
392
+ assert_succeeded @api.sqlany_fetch_next(rs)
393
+ res, id = @api.sqlany_get_column(rs, 0)
394
+ assert_succeeded res
395
+ assert_not_nil id
396
+
397
+ sql = "SELECT * FROM test where \"id\" = " + id.to_s + ";"
398
+ rs = @api.sqlany_execute_direct(@conn, sql)
399
+ assert_not_nil rs
400
+
401
+ assert_succeeded @api.sqlany_fetch_next(rs)
402
+ assert_failed @api.sqlany_fetch_next(rs)
403
+ assert_nil @api.sqlany_free_stmt(rs)
404
+ id
405
+ end
406
+
407
+ def exec_direct_with_test(sql)
408
+ rs = @api.sqlany_execute_direct(@conn, sql)
409
+ code, msg = @api.sqlany_error(@conn)
410
+ assert_not_nil rs, "SQL Code: #{code}; Message: #{msg}"
411
+ rs
412
+ end
413
+
414
+ def assert_succeeded(val)
415
+ assert_not_equal 0, val, @api.sqlany_error(@conn)
416
+ end
417
+
418
+ def assert_failed(val)
419
+ assert_equal 0, val, @api.sqlany_error(@conn)
420
+ end
421
+
422
+ end
423
+
data/test/test.sql ADDED
@@ -0,0 +1,92 @@
1
+ // *****************************************************
2
+ // Copyright (c) 2008-2010 iAnywhere Solutions, Inc.
3
+ // Portions copyright (c) 1988-2010 Sybase, Inc.
4
+ // All rights reserved. All unpublished rights reserved.
5
+ // *****************************************************
6
+ IF EXISTS( SELECT * FROM "SYS"."SYSTAB" WHERE "table_name" = 'test') THEN
7
+ DROP TABLE "test";
8
+ END IF;
9
+
10
+ IF EXISTS( SELECT * FROM "SYS"."SYSTAB" WHERE "table_name" = 'types') THEN
11
+ DROP TABLE "types";
12
+ END IF;
13
+
14
+ CREATE TABLE "test" (
15
+ "id" INTEGER NOT NULL DEFAULT AUTOINCREMENT,
16
+ PRIMARY KEY("id")
17
+ );
18
+
19
+ CREATE TABLE "types" (
20
+ "id" INTEGER PRIMARY KEY,
21
+ "_binary_" BINARY(8) DEFAULT NULL,
22
+ "_numeric_" NUMERIC(2,1),
23
+ "_decimal_" DECIMAL(2,1),
24
+ "_bounded_string_" CHAR(255) DEFAULT NULL,
25
+ "_unbounded_string_" LONG VARCHAR DEFAULT NULL,
26
+ "_signed_bigint_" BIGINT DEFAULT NULL,
27
+ "_unsigned_bigint_" UNSIGNED BIGINT DEFAULT NULL,
28
+ "_signed_int_" INTEGER DEFAULT NULL,
29
+ "_unsigned_int_" UNSIGNED INTEGER DEFAULT NULL,
30
+ "_signed_smallint_" SMALLINT DEFAULT NULL,
31
+ "_unsigned_smallint_" UNSIGNED SMALLINT DEFAULT NULL,
32
+ "_signed_tinyint_" TINYINT DEFAULT NULL,
33
+ "_unsigned_tinyint_" UNSIGNED TINYINT DEFAULT NULL,
34
+ "_bit_" BIT,
35
+ "_date_" DATE DEFAULT NULL,
36
+ "_datetime_" DATETIME DEFAULT NULL,
37
+ "_smalldatetime_" SMALLDATETIME DEFAULT NULL,
38
+ "_timestamp_" TIMESTAMP DEFAULT NULL,
39
+ "_double_" DOUBLE DEFAULT NULL,
40
+ "_float_" FLOAT DEFAULT NULL,
41
+ "_real_" REAL DEFAULT NULL
42
+ );
43
+
44
+ INSERT INTO types VALUES
45
+ ( 0,
46
+ CAST ( 0x78 AS BINARY ),
47
+ 1.1,
48
+ 1.1,
49
+ 'Bounded String Test',
50
+ 'Unbounded String Test',
51
+ 9223372036854775807,
52
+ 18446744073709551615,
53
+ 2147483647,
54
+ 4294967295,
55
+ 32767,
56
+ 65535,
57
+ 255,
58
+ 255,
59
+ 1,
60
+ DATE( '1999-01-02 21:20:53' ),
61
+ DATETIME( '1999-01-02 21:20:53' ),
62
+ DATETIME( '1999-01-02 21:20:53' ),
63
+ DATETIME( '1999-01-02 21:20:53' ),
64
+ 1.79769313486231e+308,
65
+ 3.402823e+38,
66
+ 3.402823e+38
67
+ )
68
+
69
+ INSERT INTO types VALUES
70
+ ( 1,
71
+ CAST ( 0xFF AS BINARY ),
72
+ -1.1,
73
+ -1.1,
74
+ '',
75
+ '',
76
+ -9223372036854775808,
77
+ 0,
78
+ -2147483648,
79
+ 0,
80
+ -32768,
81
+ 0,
82
+ 0,
83
+ 0,
84
+ 0,
85
+ NULL,
86
+ NULL,
87
+ NULL,
88
+ NULL,
89
+ -1.79769313486231e+308,
90
+ -3.402823e+38,
91
+ -3.402823e+38
92
+ )