Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-6265

Type coercion is failing for numeric values in prepared statements

    XMLWordPrintableJSON

Details

    Description

      Given a column of type INT. When providing a short value as a placeholder in a prepared statement, a ClassCastException is thrown.

      Test case

      final String sql =
          "select \"empid\" from \"hr\".\"emps\" where \"empid\" in (?, ?)";    CalciteAssert.hr()
          .query(sql)
          .consumesPreparedStatement(p -> {
              p.setShort(1, (short) 100);
              p.setShort(2, (short) 110);
          })
          .returnsUnordered("empid=100", "empid=110");

      Stack trace

      java.lang.ClassCastException: class java.lang.Short cannot be cast to class java.lang.Integer (java.lang.Short and java.lang.Integer are in module java.base of loader 'bootstrap')
          at Baz$1$1.moveNext(Unknown Source)
          at org.apache.calcite.linq4j.Linq4j$EnumeratorIterator.<init>(Linq4j.java:679)

      Attachments

        Issue Links

          Activity

            People

              rubenql Ruben Q L
              tnieradzik Tim Nieradzik
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: