Skip to content

Commit 2d48120

Browse files
committed
[CONJ-1243] CallableStatement.getParameterMetadata for Boolean return wrong values
1 parent 606fe0d commit 2d48120

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

src/main/java/org/mariadb/jdbc/CallableParameterMetaData.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ public int getParameterType(int index) throws SQLException {
147147
case "BIT":
148148
return Types.BIT;
149149
case "TINYINT":
150+
if ("TINYINT(1)".equals(rs.getString("DTD_IDENTIFIER").toUpperCase(Locale.ROOT))) {
151+
return Types.BOOLEAN;
152+
}
150153
return Types.TINYINT;
151154
case "SMALLINT":
152155
case "YEAR":
@@ -211,6 +214,9 @@ public int getParameterType(int index) throws SQLException {
211214
@Override
212215
public String getParameterTypeName(int index) throws SQLException {
213216
setIndex(index);
217+
if ("TINYINT(1)".equals(rs.getString("DTD_IDENTIFIER").toUpperCase(Locale.ROOT))) {
218+
return "BOOLEAN";
219+
}
214220
return rs.getString("DATA_TYPE").toUpperCase(Locale.ROOT);
215221
}
216222

@@ -233,6 +239,9 @@ public String getParameterClassName(int index) throws SQLException {
233239
case "BIT":
234240
return BitSet.class.getName();
235241
case "TINYINT":
242+
if ("TINYINT(1)".equals(rs.getString("DTD_IDENTIFIER").toUpperCase(Locale.ROOT))) {
243+
return boolean.class.getName();
244+
}
236245
return byte.class.getName();
237246
case "SMALLINT":
238247
case "YEAR":

src/test/java/org/mariadb/jdbc/integration/ProcedureParameterTest.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -104,28 +104,31 @@ public void basicProcedure() throws SQLException {
104104
stmt.execute("DROP PROCEDURE IF EXISTS basic_proc2");
105105
stmt.execute(
106106
"CREATE PROCEDURE basic_proc2 (INOUT t1 INT, IN t2 MEDIUMINT unsigned, OUT t3 DECIMAL(8,3),"
107-
+ " OUT t4 VARCHAR(20), IN t5 SMALLINT) BEGIN \n"
107+
+ " OUT t4 VARCHAR(20), IN t5 SMALLINT, IN t6 BOOLEAN) BEGIN \n"
108108
+ "set t3 = t1 * t5;\n"
109109
+ "set t1 = t2 * t1;\n"
110110
+ "set t4 = 'return data';\n"
111+
+ "set t6 = true;\n"
111112
+ "END");
112113
try (CallableStatement callableStatement =
113114
sharedConn.prepareCall("{call basic_proc2(?,?,?,?)}")) {
114115
ParameterMetaData meta = callableStatement.getParameterMetaData();
115-
assertEquals(5, meta.getParameterCount());
116+
assertEquals(6, meta.getParameterCount());
116117
assertEquals("int", meta.getParameterClassName(1));
117118
assertEquals("int", meta.getParameterClassName(2));
118119
assertEquals("java.math.BigDecimal", meta.getParameterClassName(3));
119120
assertEquals("java.lang.String", meta.getParameterClassName(4));
120121
assertEquals("short", meta.getParameterClassName(5));
122+
assertEquals("boolean", meta.getParameterClassName(6));
121123
Common.assertThrowsContains(
122-
SQLException.class, () -> meta.getParameterClassName(6), "invalid parameter index 6");
124+
SQLException.class, () -> meta.getParameterClassName(7), "invalid parameter index 7");
123125

124126
assertEquals("INT", meta.getParameterTypeName(1));
125127
assertEquals("MEDIUMINT", meta.getParameterTypeName(2));
126128
assertEquals("DECIMAL", meta.getParameterTypeName(3));
127129
assertEquals("VARCHAR", meta.getParameterTypeName(4));
128130
assertEquals("SMALLINT", meta.getParameterTypeName(5));
131+
assertEquals("BOOLEAN", meta.getParameterTypeName(6));
129132
Common.assertThrowsContains(
130133
SQLException.class, () -> meta.getParameterTypeName(0), "invalid parameter index 0");
131134

@@ -134,6 +137,7 @@ public void basicProcedure() throws SQLException {
134137
assertEquals(Types.DECIMAL, meta.getParameterType(3));
135138
assertEquals(Types.VARCHAR, meta.getParameterType(4));
136139
assertEquals(Types.SMALLINT, meta.getParameterType(5));
140+
assertEquals(Types.BOOLEAN, meta.getParameterType(6));
137141
Common.assertThrowsContains(
138142
SQLException.class, () -> meta.getParameterType(0), "invalid parameter index 0");
139143

@@ -142,6 +146,7 @@ public void basicProcedure() throws SQLException {
142146
assertEquals(ParameterMetaData.parameterModeOut, meta.getParameterMode(3));
143147
assertEquals(ParameterMetaData.parameterModeOut, meta.getParameterMode(4));
144148
assertEquals(ParameterMetaData.parameterModeIn, meta.getParameterMode(5));
149+
assertEquals(ParameterMetaData.parameterModeIn, meta.getParameterMode(6));
145150
Common.assertThrowsContains(
146151
SQLException.class, () -> meta.getParameterMode(10), "invalid parameter index 10");
147152

@@ -325,14 +330,15 @@ public void getParameterTypeProcedure() throws SQLException {
325330
}
326331
}
327332

328-
329333
@Test
330334
public void failStoredProcedureTest() throws Exception {
331335
Statement stmt = sharedConn.createStatement();
332336
stmt.execute("DROP PROCEDURE IF EXISTS workingStoreProcedure");
333337
stmt.execute("DROP PROCEDURE IF EXISTS failingStoreProcedure");
334338
stmt.execute("CREATE PROCEDURE workingStoreProcedure(a int) begin Do 1; end");
335-
stmt.execute("CREATE PROCEDURE failingStoreProcedure(a int) begin SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Custom error'; end");
339+
stmt.execute(
340+
"CREATE PROCEDURE failingStoreProcedure(a int) begin SIGNAL SQLSTATE '45000' SET"
341+
+ " MESSAGE_TEXT = 'Custom error'; end");
336342

337343
try (CallableStatement call1 = sharedConn.prepareCall("{call useParameterName(?)}")) {
338344
call1.setInt(1, 1);
@@ -363,7 +369,8 @@ public void failStoredProcedureTest2() throws Exception {
363369
stmt.execute("DROP PROCEDURE IF EXISTS workingStoreProcedure");
364370
stmt.execute("DROP TABLE IF EXISTS saveData");
365371
stmt.execute("CREATE TABLE saveData(i int PRIMARY KEY)");
366-
stmt.execute("CREATE PROCEDURE saveDataProc(val int) begin INSERT INTO saveData(i) VALUE (val); end");
372+
stmt.execute(
373+
"CREATE PROCEDURE saveDataProc(val int) begin INSERT INTO saveData(i) VALUE (val); end");
367374

368375
try (CallableStatement call1 = sharedConn.prepareCall("{call saveDataProc(?)}")) {
369376
call1.setInt(1, 1);
@@ -391,5 +398,4 @@ public void failStoredProcedureTest2() throws Exception {
391398
call1.executeBatch();
392399
}
393400
}
394-
395401
}

0 commit comments

Comments
 (0)