Skip to content

Commit

Permalink
RD-10538: Nullable columns sometimes reported as non-nullable (#348)
Browse files Browse the repository at this point in the history
  • Loading branch information
bgaidioz authored Feb 1, 2024
1 parent 32d95d7 commit 8dde369
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,9 @@ class NamedParametersPreparedStatement(conn: Connection, code: String) extends S
val name = metadata.getColumnName(i)
val typeInfo = {
val tipe = metadata.getColumnType(i)
val nullable = metadata.isNullable(i) == ResultSetMetaData.columnNullable
val nullability = metadata.isNullable(i)
val nullable =
nullability == ResultSetMetaData.columnNullable || nullability == ResultSetMetaData.columnNullableUnknown
SqlTypesUtils.rawTypeFromJdbc(tipe).right.map {
case t: RawAnyType => t
case t: RawType => t.cloneWithFlags(nullable, false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -274,9 +274,9 @@ class TestSqlCompilerServiceAirports extends RawTestSuite with SettingsTestConte
| "country": "Portugal",
| "iata_faa": "BGC",
| "icao": "LPBG",
| "latitude": "41.857800",
| "longitude": "-6.707125",
| "altitude": "2241.000",
| "latitude": 41.857800,
| "longitude": -6.707125,
| "altitude": 2241.000,
| "timezone": 0,
| "dst": "E",
| "tz": "Europe/Lisbon"
Expand Down Expand Up @@ -473,7 +473,7 @@ class TestSqlCompilerServiceAirports extends RawTestSuite with SettingsTestConte
val List(main) = description.decls("main")
assert(
main.outType == RawIterableType(
RawRecordType(Vector(RawAttrType("count", RawLongType(false, false))), false, false),
RawRecordType(Vector(RawAttrType("count", RawLongType(true, false))), false, false),
false,
false
)
Expand Down Expand Up @@ -519,7 +519,7 @@ class TestSqlCompilerServiceAirports extends RawTestSuite with SettingsTestConte
val List(main) = description.decls("main")
assert(
main.outType == RawIterableType(
RawRecordType(Vector(RawAttrType("count", RawLongType(false, false))), false, false),
RawRecordType(Vector(RawAttrType("count", RawLongType(true, false))), false, false),
false,
false
)
Expand All @@ -537,4 +537,44 @@ class TestSqlCompilerServiceAirports extends RawTestSuite with SettingsTestConte
assert(compilerService.execute(t.q, withNull, None, baos) == ExecutionSuccess)
assert(baos.toString() == """[{"count":3}]""")
}

test("""SELECT DATE '2002-01-01' - :s::int AS x -- RD-10538""") { t =>
assume(password != "")

val environment = ProgramEnvironment(user, None, Set.empty, Map("output-format" -> "json"))
val v = compilerService.validate(t.q, environment)
assert(v.errors.isEmpty)
val GetProgramDescriptionSuccess(description) = compilerService.getProgramDescription(t.q, environment)
assert(description.maybeType.isEmpty)
val List(main) = description.decls("main")
assert(
main.outType == RawIterableType(
RawRecordType(
Vector(
RawAttrType("x", RawDateType(true, false))
),
false,
false
),
false,
false
)
)
assert(main.params.contains(Vector(ParamDescription("s", RawIntType(true, false), Some(RawNull()), false))))
val baos = new ByteArrayOutputStream()
assert(
compilerService.execute(
t.q,
environment,
None,
baos
) == ExecutionSuccess
)
assert(baos.toString() == """[
| {
| "x": null
| }
|]""".stripMargin.replaceAll("\\s+", ""))
}

}

0 comments on commit 8dde369

Please sign in to comment.