Skip to content

Commit 540370a

Browse files
authored
Fix array/binary parameter binding, refactor fetch_callproc and updated (#1055)
tesst cases binary inputs/outputs, DECFLOAT procedures, and cross-platform error messages Signed-off-by: Earamma K <ek@rocketsoftware.com>
1 parent 3dd02cc commit 540370a

15 files changed

Lines changed: 689 additions & 263 deletions

ibm_db.c

Lines changed: 554 additions & 160 deletions
Large diffs are not rendered by default.

ibm_db_tests/test_091_ConnmsgWrongUser.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class IbmDbTestCase(unittest.TestCase):
1515

1616
def test_091_ConnmsgWrongUser(self):
1717
obj = IbmDbTestFunctions()
18-
obj.assert_expect(self.run_test_091)
18+
obj.assert_expectf(self.run_test_091)
1919

2020
def run_test_091(self):
2121
try:
@@ -27,12 +27,12 @@ def run_test_091(self):
2727

2828
#__END__
2929
#__LUW_EXPECTED__
30-
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001 SQLCODE=-30082
30+
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001%sSQLCODE=-30082
3131
#__ZOS_EXPECTED__
32-
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001 SQLCODE=-30082
32+
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001%sSQLCODE=-30082
3333
#__SYSTEMI_EXPECTED__
34-
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001 SQLCODE=-30082
34+
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001%sSQLCODE=-30082
3535
#__IDS_EXPECTED__
36-
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001 SQLCODE=-30082
36+
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001%sSQLCODE=-30082
3737
#__ZOS_ODBC_EXPECTED__
3838
#??? No way.

ibm_db_tests/test_092_ConnmsgWrongPwd.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class IbmDbTestCase(unittest.TestCase):
1515

1616
def test_092_ConnmsgWrongPwd(self):
1717
obj = IbmDbTestFunctions()
18-
obj.assert_expect(self.run_test_092)
18+
obj.assert_expectf(self.run_test_092)
1919

2020
def run_test_092(self):
2121
try:
@@ -27,12 +27,12 @@ def run_test_092(self):
2727

2828
#__END__
2929
#__LUW_EXPECTED__
30-
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001 SQLCODE=-30082
30+
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001%sSQLCODE=-30082
3131
#__ZOS_EXPECTED__
32-
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001 SQLCODE=-30082
32+
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001%sSQLCODE=-30082
3333
#__SYSTEMI_EXPECTED__
34-
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001 SQLCODE=-30082
34+
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001%sSQLCODE=-30082
3535
#__IDS_EXPECTED__
36-
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001 SQLCODE=-30082
36+
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001%sSQLCODE=-30082
3737
#__ZOS_ODBC_EXPECTED__
3838
#??? No way.

ibm_db_tests/test_133_ExecuteLongInputParams.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,43 +69,43 @@ def run_test_133(self):
6969
#Starting test ...
7070
#
7171
#SQLSTATE: 22001
72-
#Message: [IBM][CLI Driver] CLI0109E String data right truncation. SQLSTATE=22001 SQLCODE=-99999
72+
#Message: [IBM][CLI Driver] CLI0109E String data right truncation. SQLSTATE=22001%sSQLCODE=-99999
7373
#True
7474
#SQLSTATE: 02000
75-
#Message: [IBM][CLI Driver][DB2/%s] SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. SQLSTATE=02000 SQLCODE=100
75+
#Message: [IBM][CLI Driver][DB2/%s] SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. SQLSTATE=02000%sSQLCODE=100
7676
#Done
7777
#__ZOS_EXPECTED__
7878
#Starting test ...
7979
#
8080
#SQLSTATE: 22001
81-
#Message: [IBM][CLI Driver] CLI0109E String data right truncation. SQLSTATE=22001 SQLCODE=-99999
81+
#Message: [IBM][CLI Driver] CLI0109E String data right truncation. SQLSTATE=22001%sSQLCODE=-99999
8282
#True
8383
#SQLSTATE: 02000
84-
#Message: [IBM][CLI Driver][DB2] SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. SQLSTATE=02000 SQLCODE=100
84+
#Message: [IBM][CLI Driver][DB2] SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. SQLSTATE=02000%sSQLCODE=100
8585
#Done
8686
#__SYSTEMI_EXPECTED__
8787
#Starting test ...
8888
#
8989
#SQLSTATE: 22001
90-
#Message: [IBM][CLI Driver] CLI0109E String data right truncation. SQLSTATE=22001 SQLCODE=-99999
90+
#Message: [IBM][CLI Driver] CLI0109E String data right truncation. SQLSTATE=22001%sSQLCODE=-99999
9191
#True
9292
#SQLSTATE: 02000
93-
#Message: [IBM][CLI Driver][AS] SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. SQLSTATE=02000 SQLCODE=100
93+
#Message: [IBM][CLI Driver][AS] SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. SQLSTATE=02000%sSQLCODE=100
9494
#Done
9595
#__IDS_EXPECTED__
9696
#Starting test ...
9797
#
9898
#SQLSTATE: 22001
99-
#Message: [IBM][CLI Driver][IDS%s] Value exceeds string column length. SQLCODE=-1279
99+
#Message: [IBM][CLI Driver][IDS%s] Value exceeds string column length.%sSQLCODE=-1279
100100
#True
101101
#SQLSTATE: 02000
102-
#Message: [IBM][CLI Driver][IDS%s] SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. SQLSTATE=02000 SQLCODE=100
102+
#Message: [IBM][CLI Driver][IDS%s] SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. SQLSTATE=02000%sSQLCODE=100
103103
#Done
104104
#__ZOS_ODBC_EXPECTED__
105105
#Starting test ...
106106
#
107107
#SQLSTATE: 22001
108-
#Message: {DB2 FOR OS/390}{ODBC DRIVER} SQLSTATE=22001 ERRLOC=12:9:1 SQLCODE=-99999
108+
#Message: {DB2 FOR OS/390}{ODBC DRIVER} SQLSTATE=22001 ERRLOC=12:9:1%sSQLCODE=-99999
109109
#True
110110
#SQLSTATE:
111111
#Message:

ibm_db_tests/test_146a_CallSPINAndOUT_Blob_Param.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def run_test_146a(self):
4444
# 1: 1234
4545
#
4646
#Values of bound parameters _after_ CALL:
47-
# 1: 1234567801234567890
47+
# 1: b'1234567801234567890'
4848
#
4949
#__ZOS_EXPECTED__
5050
#SKIPPED

ibm_db_tests/test_180_StmtErrMsg.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ def run_test_180(self):
5151

5252
#__END__
5353
#__LUW_EXPECTED__
54-
#[IBM][CLI Driver][DB2/%s] SQL0104N An unexpected token "insert int0 t_string" was found following "BEGIN-OF-STATEMENT". Expected tokens may include: "<space>". SQLSTATE=42601 SQLCODE=-104col: 0 , affected row: 0
54+
#[IBM][CLI Driver][DB2/%s] SQL0104N An unexpected token "insert int0 t_string" was found following "BEGIN-OF-STATEMENT". Expected tokens may include: "<space>". SQLSTATE=42601%sSQLCODE=-104col: 0 , affected row: 0
5555
#__ZOS_EXPECTED__
56-
#[IBM][CLI Driver][DB2%s] SQL0104N An unexpected token "INT0" was found following "". Expected tokens may include: "INTO". SQLSTATE=42601 SQLCODE=-104col: 0 , affected row: 0
56+
#[IBM][CLI Driver][DB2%s] SQL0104N An unexpected token "INT0" was found following "". Expected tokens may include: "INTO". SQLSTATE=42601%sSQLCODE=-104col: 0 , affected row: 0
5757
#__SYSTEMI_EXPECTED__
58-
#[IBM][CLI Driver][AS] SQL0104N An unexpected token "INT0" was found following "". Expected tokens may include: "INTO". SQLSTATE=42601 SQLCODE=-104col: 0 , affected row: 0
58+
#[IBM][CLI Driver][AS] SQL0104N An unexpected token "INT0" was found following "". Expected tokens may include: "INTO". SQLSTATE=42601%sSQLCODE=-104col: 0 , affected row: 0
5959
#__IDS_EXPECTED__
60-
#[IBM][CLI Driver][IDS/%s] A syntax error has occurred. SQLCODE=-201col: 0 , affected row: 0
60+
#[IBM][CLI Driver][IDS/%s] A syntax error has occurred.%sSQLCODE=-201col: 0 , affected row: 0

ibm_db_tests/test_315_FetchAll_DBI.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class IbmDbTestCase(unittest.TestCase):
1717

1818
def test_315_FetchAll_DBI(self):
1919
obj = IbmDbTestFunctions()
20-
obj.assert_expect(self.run_test_315)
20+
obj.assert_expectf(self.run_test_315)
2121

2222
def run_test_315(self):
2323
conn = ibm_db.connect(config.database, config.user, config.password)
@@ -64,10 +64,10 @@ def run_test_315(self):
6464

6565
#__END__
6666
#__LUW_EXPECTED__
67-
#[IBM][CLI Driver][DB2/LINUXX8664] SQL0137N The length resulting from "CONCAT" is greater than "0000016350 ". SQLSTATE=54006 SQLCODE=-137
67+
#[IBM][CLI Driver][DB2/%s] SQL0137N The length resulting from "CONCAT" is greater than "%d ". SQLSTATE=54006%sSQLCODE=-137
6868
#__ZOS_EXPECTED__
69-
#[IBM][CLI Driver][DB2/LINUXX8664] SQL0137N The length resulting from "CONCAT" is greater than "0000016350 ". SQLSTATE=54006 SQLCODE=-137
69+
#[IBM][CLI Driver][DB2/%s] SQL0137N The length resulting from "CONCAT" is greater than "%d ". SQLSTATE=54006%sSQLCODE=-137
7070
#__SYSTEMI_EXPECTED__
71-
#[IBM][CLI Driver][AS] SQL0137N The length resulting from "CONCAT" is greater than "0000016350 ". SQLSTATE=54006 SQLCODE=-137
71+
#[IBM][CLI Driver][AS] SQL0137N The length resulting from "CONCAT" is greater than "%d ". SQLSTATE=54006%sSQLCODE=-137
7272
#__IDS_EXPECTED__
73-
#[IBM][CLI Driver][IDS/LINUXX8664] SQL0137N The length resulting from "CONCAT" is greater than "0000016350 ". SQLSTATE=54006 SQLCODE=-137
73+
#[IBM][CLI Driver][IDS/%s] SQL0137N The length resulting from "CONCAT" is greater than "%d ". SQLSTATE=54006%sSQLCODE=-137

ibm_db_tests/test_316_stmtErrormsg_stmtError_DBI.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class IbmDbTestCase(unittest.TestCase):
1717

1818
def test_316_stmtErrormsg_stmtError_DBI(self):
1919
obj = IbmDbTestFunctions()
20-
obj.assert_expect(self.run_test_316)
20+
obj.assert_expectf(self.run_test_316)
2121

2222
def run_test_316(self):
2323
conn = ibm_db_dbi.connect(config.database, config.user, config.password)
@@ -34,14 +34,14 @@ def run_test_316(self):
3434

3535
#__END__
3636
#__LUW_EXPECTED__
37-
#[IBM][CLI Driver][DB2/LINUXX8664] SQL0104N An unexpected token "END-OF-STATEMENT" was found following "INVALID SQL". Expected tokens may include: "JOIN <joined_table>". SQLSTATE=42601 SQLCODE=-104
37+
#[IBM][CLI Driver][DB2/%s] SQL0104N An unexpected token "END-OF-STATEMENT" was found following "INVALID SQL". Expected tokens may include: "JOIN <joined_table>". SQLSTATE=42601%sSQLCODE=-104
3838
#42601
3939
#__ZOS_EXPECTED__
40-
#[IBM][CLI Driver][DB2/LINUXX8664] SQL0104N An unexpected token "END-OF-STATEMENT" was found following "INVALID SQL". Expected tokens may include: "JOIN <joined_table>". SQLSTATE=42601 SQLCODE=-104
40+
#[IBM][CLI Driver][DB2/%s] SQL0104N An unexpected token "END-OF-STATEMENT" was found following "INVALID SQL". Expected tokens may include: "JOIN <joined_table>". SQLSTATE=42601%sSQLCODE=-104
4141
#42601
4242
#__SYSTEMI_EXPECTED__
43-
#[IBM][CLI Driver][AS] SQL0104N An unexpected token "END-OF-STATEMENT" was found following "INVALID SQL". Expected tokens may include: "JOIN <joined_table>". SQLSTATE=42601 SQLCODE=-104
43+
#[IBM][CLI Driver][AS] SQL0104N An unexpected token "END-OF-STATEMENT" was found following "INVALID SQL". Expected tokens may include: "JOIN <joined_table>". SQLSTATE=42601%sSQLCODE=-104
4444
#42601
4545
#__IDS_EXPECTED__
46-
#[IBM][CLI Driver][IDS/LINUXX8664] SQL0104N An unexpected token "END-OF-STATEMENT" was found following "INVALID SQL". Expected tokens may include: "JOIN <joined_table>". SQLSTATE=42601 SQLCODE=-104
46+
#[IBM][CLI Driver][IDS/%s] SQL0104N An unexpected token "END-OF-STATEMENT" was found following "INVALID SQL". Expected tokens may include: "JOIN <joined_table>". SQLSTATE=42601%sSQLCODE=-104
4747
#42601

ibm_db_tests/test_317_connErrormsg_connError_DBI.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class IbmDbTestCase(unittest.TestCase):
1717

1818
def test_317_connErrormsg_connError_DBI(self):
1919
obj = IbmDbTestFunctions()
20-
obj.assert_expect(self.run_test_317)
20+
obj.assert_expectf(self.run_test_317)
2121

2222
def run_test_317(self):
2323
try:
@@ -30,14 +30,14 @@ def run_test_317(self):
3030

3131
#__END__
3232
#__LUW_EXPECTED__
33-
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001 SQLCODE=-30082
33+
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001%sSQLCODE=-30082
3434
#08001
3535
#__ZOS_EXPECTED__
36-
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001 SQLCODE=-30082
36+
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001%sSQLCODE=-30082
3737
#08001
3838
#__SYSTEMI_EXPECTED__
39-
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001 SQLCODE=-30082
39+
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001%sSQLCODE=-30082
4040
#08001
4141
#__IDS_EXPECTED__
42-
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001 SQLCODE=-30082
42+
#[IBM][CLI Driver] SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001%sSQLCODE=-30082
4343
#08001

ibm_db_tests/test_ArrayTypeAndSPCreation.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ def run_test_arraytypeandspcreation(self):
8888
ibm_db.exec_immediate(conn, "DROP PROCEDURE array_decflt1622")
8989
ibm_db.exec_immediate(conn, "DROP PROCEDURE array_decflt1631")
9090
ibm_db.exec_immediate(conn, "DROP PROCEDURE array_decflt1641")
91+
ibm_db.exec_immediate(conn, "DROP PROCEDURE array_decfloat3422")
92+
ibm_db.exec_immediate(conn, "DROP PROCEDURE array_decfloat3431")
93+
ibm_db.exec_immediate(conn, "DROP PROCEDURE array_decfloat3441")
9194
ibm_db.exec_immediate(conn, "DROP PROCEDURE array_char22")
9295
ibm_db.exec_immediate(conn, "DROP PROCEDURE array_char31")
9396
ibm_db.exec_immediate(conn, "DROP PROCEDURE array_char41")
@@ -346,6 +349,35 @@ def run_test_arraytypeandspcreation(self):
346349
END FOR;
347350
END""")
348351

352+
ibm_db.exec_immediate(conn, """CREATE PROCEDURE array_decfloat3422(IN var1 DECFLOAT(34), OUT var2 decfloat34_array)
353+
LANGUAGE SQL
354+
BEGIN
355+
SET var2[1] = var1 * var1;
356+
SET var2[2] = var1 * var1 * var1;
357+
SET var2[3] = var1 * 4;
358+
SET var2[4] = var1 - 5;
359+
END""")
360+
361+
ibm_db.exec_immediate(conn, """CREATE PROCEDURE array_decfloat3431(INOUT var1 decfloat34_array)
362+
LANGUAGE SQL
363+
BEGIN
364+
DECLARE var2 decfloat34_array;
365+
FOR v AS SELECT val, idx FROM UNNEST(var1) WITH ORDINALITY AS T(val, idx)
366+
DO
367+
SET var2[idx] = val + 1.33;
368+
END FOR;
369+
SET var1 = var2;
370+
END""")
371+
372+
ibm_db.exec_immediate(conn, """CREATE PROCEDURE array_decfloat3441(IN var1 decfloat34_array, OUT var2 decfloat34_array)
373+
LANGUAGE SQL
374+
BEGIN
375+
FOR v AS SELECT val, idx FROM UNNEST(var1) WITH ORDINALITY AS T(val, idx)
376+
DO
377+
SET var2[idx] = val - 1.67;
378+
END FOR;
379+
END""")
380+
349381
ibm_db.exec_immediate(conn, """CREATE PROCEDURE array_char22( IN var1 CHAR(40), OUT var2 char_array)
350382
LANGUAGE SQL
351383
BEGIN

0 commit comments

Comments
 (0)