Skip to content

Commit 4c4ac62

Browse files
committed
Add tests for Altibase
Signed-off-by: Geoffrey Park <geoffrey.park@altibase.com>
1 parent 3694c4d commit 4c4ac62

21 files changed

+1484
-29
lines changed

src/odbc_connection.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1405,6 +1405,8 @@ class CallProcedureAsyncWorker : public ODBCAsyncWorker {
14051405
data->parameters[i]->ParameterType = data->storedRows[i][SQLPROCEDURECOLUMNS_DATA_TYPE_INDEX].smallint_data; // DataType -> ParameterType
14061406
data->parameters[i]->ColumnSize = data->storedRows[i][SQLPROCEDURECOLUMNS_COLUMN_SIZE_INDEX].integer_data; // ParameterSize -> ColumnSize
14071407
data->parameters[i]->Nullable = data->storedRows[i][SQLPROCEDURECOLUMNS_NULLABLE_INDEX].smallint_data;
1408+
// Decimal digits are missing for IN and INOUT parameters.
1409+
data->parameters[i]->DecimalDigits = data->storedRows[i][SQLPROCEDURECOLUMNS_DECIMAL_DIGITS_INDEX].smallint_data;
14081410

14091411
// For each parameter, need to manipulate the data buffer and C type
14101412
// depending on what the InputOutputType is:
@@ -1736,36 +1738,31 @@ class CallProcedureAsyncWorker : public ODBCAsyncWorker {
17361738
data->parameters[i]->ValueType = SQL_C_CHAR;
17371739
data->parameters[i]->ParameterValuePtr = new SQLCHAR[bufferSize];
17381740
data->parameters[i]->BufferLength = bufferSize;
1739-
data->parameters[i]->DecimalDigits = data->storedRows[i][SQLPROCEDURECOLUMNS_DECIMAL_DIGITS_INDEX].smallint_data;
17401741
break;
17411742

17421743
case SQL_DOUBLE:
17431744
case SQL_FLOAT:
17441745
data->parameters[i]->ValueType = SQL_C_DOUBLE;
17451746
data->parameters[i]->ParameterValuePtr = new SQLDOUBLE();
17461747
data->parameters[i]->BufferLength = sizeof(SQLDOUBLE);
1747-
data->parameters[i]->DecimalDigits = data->storedRows[i][SQLPROCEDURECOLUMNS_DECIMAL_DIGITS_INDEX].smallint_data;
17481748
break;
17491749

17501750
case SQL_TINYINT:
17511751
data->parameters[i]->ValueType = SQL_C_UTINYINT;
17521752
data->parameters[i]->ParameterValuePtr = new SQLCHAR();
17531753
data->parameters[i]->BufferLength = sizeof(SQLCHAR);
1754-
data->parameters[i]->DecimalDigits = data->storedRows[i][SQLPROCEDURECOLUMNS_DECIMAL_DIGITS_INDEX].smallint_data;
17551754
break;
17561755

17571756
case SQL_SMALLINT:
17581757
data->parameters[i]->ValueType = SQL_C_SSHORT;
17591758
data->parameters[i]->ParameterValuePtr = new SQLSMALLINT();
17601759
data->parameters[i]->BufferLength = sizeof(SQLSMALLINT);
1761-
data->parameters[i]->DecimalDigits = data->storedRows[i][SQLPROCEDURECOLUMNS_DECIMAL_DIGITS_INDEX].smallint_data;
17621760
break;
17631761

17641762
case SQL_INTEGER:
17651763
data->parameters[i]->ValueType = SQL_C_SLONG;
17661764
data->parameters[i]->ParameterValuePtr = new SQLINTEGER();
17671765
data->parameters[i]->BufferLength = sizeof(SQLINTEGER);
1768-
data->parameters[i]->DecimalDigits = data->storedRows[i][SQLPROCEDURECOLUMNS_DECIMAL_DIGITS_INDEX].smallint_data;
17691766
break;
17701767

17711768
case SQL_BIGINT:

test/DBMS/_test.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
module.exports = {
2-
ibmi: require('./ibmi/_test.test')
2+
ibmi: require('./ibmi/_test.test'),
3+
altibase: require('./altibase/_test.test')
34
}

test/DBMS/altibase/BIGINT.test.js

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
module.exports = {
2+
dataType: 'BIGINT',
3+
configurations: [
4+
{
5+
size: null,
6+
options: null,
7+
tests: [
8+
// These tests only run if the N-API version supports BigInt
9+
...(parseInt(process.versions.napi) >= 5 ? [
10+
{
11+
name: 'BigInt -> BIGINT (min value)',
12+
values: {
13+
in: {
14+
value: -9223372036854775807n,
15+
expected: -9223372036854775807n,
16+
},
17+
inout: {
18+
value: -9223372036854775808n,
19+
expected: -9223372036854775807n,
20+
},
21+
out: {
22+
value: null,
23+
// expected: -9223372036854775808n,
24+
expected: null, // In Altibase, 0x8000000000000000 is null
25+
},
26+
}
27+
},
28+
{
29+
name: 'BigInt -> BIGINT (max value)',
30+
values: {
31+
in: {
32+
value: 9223372036854775806n,
33+
expected: 9223372036854775806n,
34+
},
35+
inout: {
36+
value: 9223372036854775807n,
37+
expected: 9223372036854775806n,
38+
},
39+
out: {
40+
value: null,
41+
expected: 9223372036854775807n,
42+
},
43+
},
44+
},
45+
] : []),
46+
{
47+
name: 'Number -> BIGINT [MIN_SAFE_INTEGER]',
48+
values: {
49+
in: {
50+
value: Number.MIN_SAFE_INTEGER + 1,
51+
expected: Number.MIN_SAFE_INTEGER + 1,
52+
},
53+
inout: {
54+
value: Number.MIN_SAFE_INTEGER,
55+
expected: Number.MIN_SAFE_INTEGER + 1,
56+
},
57+
out: {
58+
value: null,
59+
expected: BigInt(Number.MIN_SAFE_INTEGER),
60+
},
61+
},
62+
},
63+
{
64+
name: 'Number -> BIGINT [MAX_SAFE_INTEGER]',
65+
values: {
66+
in: {
67+
value: Number.MAX_SAFE_INTEGER - 1,
68+
expected: Number.MAX_SAFE_INTEGER - 1,
69+
},
70+
inout: {
71+
value: Number.MAX_SAFE_INTEGER,
72+
expected: Number.MAX_SAFE_INTEGER - 1,
73+
},
74+
out: {
75+
value: null,
76+
expected: BigInt(Number.MAX_SAFE_INTEGER),
77+
},
78+
},
79+
},
80+
{
81+
name: 'String -> BIGINT (min value)',
82+
values: {
83+
in: {
84+
value: "-9223372036854775807",
85+
expected: "-9223372036854775807",
86+
},
87+
inout: {
88+
// value: "-9223372036854775808",
89+
value: "-9223372036854775807", // In Altibase minimum bigint value is -9223372036854775807
90+
expected: "-9223372036854775807",
91+
},
92+
93+
out: {
94+
value: null,
95+
// binding '-9223372036854775808' makes Numeric value out of range error
96+
expected: -9223372036854775807n,
97+
},
98+
},
99+
},
100+
{
101+
name: 'String -> BIGINT (max value)',
102+
values: {
103+
in: {
104+
value: "9223372036854775806",
105+
expected: "9223372036854775806",
106+
},
107+
inout: {
108+
value: "9223372036854775807",
109+
expected: "9223372036854775806",
110+
},
111+
out: {
112+
value: null,
113+
expected: 9223372036854775807n,
114+
},
115+
},
116+
},
117+
],
118+
},
119+
],
120+
};

test/DBMS/altibase/BINARY.test.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
module.exports = {
2+
dataType: 'BINARY',
3+
configurations: [
4+
{
5+
size: '(16)',
6+
options: null,
7+
tests: [
8+
{
9+
name: 'Buffer -> BINARY',
10+
values: {
11+
in: {
12+
value: Buffer.from('7468697320697320612074c3a97374', 'hex'),
13+
expected: Buffer.from('7468697320697320612074c3a97374', 'hex'),
14+
},
15+
inout: {
16+
value: Buffer.from('00112233445566778899aabbccddeeff', 'hex'),
17+
expected: Buffer.from('7468697320697320612074c3a97374', 'hex'),
18+
},
19+
out: {
20+
value: null,
21+
expected: Buffer.from('00112233445566778899aabbccddeeff', 'hex'),
22+
},
23+
},
24+
},
25+
{
26+
name: 'Buffer -> BINARY [empty buffer]',
27+
values: {
28+
in: {
29+
value: Buffer.alloc(0),
30+
expected: Buffer.alloc(0),
31+
},
32+
inout: {
33+
value: Buffer.alloc(0),
34+
expected: null, // In Altibase, length 0 is treated as null.
35+
},
36+
out: {
37+
value: null,
38+
expected: null,
39+
},
40+
},
41+
},
42+
{
43+
name: 'Buffer -> BINARY [null bytes]',
44+
values: {
45+
in: {
46+
value: Buffer.alloc(16),
47+
expected: Buffer.alloc(16),
48+
},
49+
inout: {
50+
value: Buffer.alloc(16),
51+
expected: Buffer.alloc(16),
52+
},
53+
out: {
54+
value: null,
55+
expected: Buffer.alloc(16),
56+
},
57+
},
58+
},
59+
],
60+
}
61+
],
62+
};
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
module.exports = {
2+
dataType: 'CHAR',
3+
configurations: [
4+
{
5+
size: '(16)',
6+
options: null,
7+
tests: [
8+
{
9+
name: 'string -> CHARACTER [empty]',
10+
values: {
11+
in: {
12+
value: '',
13+
expected: '',
14+
},
15+
inout: {
16+
value: ' ',
17+
expected: null,
18+
},
19+
out: {
20+
value: null,
21+
expected: ' ',
22+
},
23+
},
24+
},
25+
{
26+
name: 'string -> CHAR (partially full values)',
27+
values: {
28+
in: {
29+
value: 'ABCD1234',
30+
expected: 'ABCD1234',
31+
},
32+
inout: {
33+
value: 'Z Y X W 9',
34+
expected: 'ABCD1234 ',
35+
},
36+
out: {
37+
value: null,
38+
expected: 'Z Y X W 9 ',
39+
},
40+
},
41+
},
42+
{
43+
name: 'string -> CHARACTER (full)',
44+
values: {
45+
in: {
46+
value: 'ABCD1234EFGH5678',
47+
expected: 'ABCD1234EFGH5678',
48+
},
49+
inout: {
50+
value: 'Z Y X W 9 8 7 6 ',
51+
expected: 'ABCD1234EFGH5678',
52+
},
53+
out: {
54+
value: null,
55+
expected: 'Z Y X W 9 8 7 6 ',
56+
},
57+
},
58+
},
59+
],
60+
}
61+
],
62+
};

test/DBMS/altibase/CLOB.test.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
module.exports = {
2+
dataType: 'CLOB',
3+
configurations: [
4+
{
5+
size: '(16)',
6+
options: null,
7+
tests: [
8+
{
9+
name: 'string -> CLOB [full]',
10+
values: {
11+
in: {
12+
value: 'ABCD1234EFGH5678',
13+
expected: 'ABCD1234EFGH5678',
14+
},
15+
inout: {
16+
value: ' A B C D E F G H',
17+
expected: 'ABCD1234EFGH5678',
18+
},
19+
out: {
20+
value: null,
21+
expected: ' A B C D E F G H',
22+
},
23+
},
24+
},
25+
{
26+
name: 'Buffer -> CLOB (partially full values)',
27+
values: {
28+
in: {
29+
value: Buffer.from('7468697320697320612074c3a9737400', 'hex'),
30+
expected: Buffer.from('7468697320697320612074c3a9737400', 'hex'),
31+
},
32+
inout: {
33+
value: Buffer.from('c8c5d3d3d65a', 'hex'),
34+
expected: Buffer.from('7468697320697320612074c3a9737400', 'hex'),
35+
},
36+
out: {
37+
value: null,
38+
expected: 'HELLO!',
39+
},
40+
},
41+
}
42+
],
43+
},
44+
],
45+
};

0 commit comments

Comments
 (0)