Search in sources :

Example 6 with ParameterMetaData

use of java.sql.ParameterMetaData in project cubrid-manager by CUBRID.

the class PstmtDataDialog method analyzeSql.

protected void analyzeSql() {
    if (!validSql()) {
        return;
    }
    String sql = sqlTxt.getText();
    int count = SqlParser.getStrCount(sql, "?");
    parameterTable.removeAll();
    ParameterMetaData metaData = TableUtil.getParameterMetaData(database, sqlTxt.getText());
    for (int i = 0; i < count; i++) {
        TableItem item = new TableItem(parameterTable, SWT.NONE);
        item.setText(0, String.valueOf(i + 1));
        if (metaData != null) {
            try {
                String type = metaData.getParameterTypeName(i + 1);
                if (type == null || type.trim().length() == 0) {
                    continue;
                }
                int precision = metaData.getPrecision(i + 1);
                int scale = metaData.getScale(i + 1);
                type = FieldHandlerUtils.getComleteType(type, null, precision, scale);
                item.setText(1, type);
            } catch (SQLException e) {
                continue;
            }
        }
    }
    validate();
    packTable();
}
Also used : SQLException(java.sql.SQLException) TableItem(org.eclipse.swt.widgets.TableItem) Point(org.eclipse.swt.graphics.Point) ParameterMetaData(java.sql.ParameterMetaData)

Example 7 with ParameterMetaData

use of java.sql.ParameterMetaData in project calcite-avatica by apache.

the class JdbcMetaTest method testPrepareSetsMaxRows.

@Test
public void testPrepareSetsMaxRows() throws Exception {
    final String id = UUID.randomUUID().toString();
    final String sql = "SELECT * FROM FOO";
    final int maxRows = 500;
    final ConnectionHandle ch = new ConnectionHandle(id);
    final AtomicInteger statementIdGenerator = new AtomicInteger(0);
    JdbcMeta meta = Mockito.mock(JdbcMeta.class);
    Connection connection = Mockito.mock(Connection.class);
    PreparedStatement statement = Mockito.mock(PreparedStatement.class);
    ResultSetMetaData resultSetMetaData = Mockito.mock(ResultSetMetaData.class);
    ParameterMetaData parameterMetaData = Mockito.mock(ParameterMetaData.class);
    @SuppressWarnings("unchecked") Cache<Integer, StatementInfo> statementCache = (Cache<Integer, StatementInfo>) Mockito.mock(Cache.class);
    Mockito.when(meta.getStatementIdGenerator()).thenReturn(statementIdGenerator);
    Mockito.when(meta.getStatementCache()).thenReturn(statementCache);
    Mockito.when(meta.getConnection(id)).thenReturn(connection);
    Mockito.when(connection.prepareStatement(sql)).thenReturn(statement);
    Mockito.when(statement.isWrapperFor(AvaticaPreparedStatement.class)).thenReturn(false);
    Mockito.when(statement.getMetaData()).thenReturn(resultSetMetaData);
    Mockito.when(statement.getParameterMetaData()).thenReturn(parameterMetaData);
    // Call the real methods
    Mockito.doCallRealMethod().when(meta).setMaxRows(statement, maxRows);
    Mockito.doCallRealMethod().when(meta).prepare(ch, sql, maxRows);
    meta.prepare(ch, sql, maxRows);
    Mockito.verify(statement).setMaxRows(maxRows);
}
Also used : ConnectionHandle(org.apache.calcite.avatica.Meta.ConnectionHandle) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) AvaticaPreparedStatement(org.apache.calcite.avatica.AvaticaPreparedStatement) ResultSetMetaData(java.sql.ResultSetMetaData) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ParameterMetaData(java.sql.ParameterMetaData) Cache(com.google.common.cache.Cache) Test(org.junit.Test)

Example 8 with ParameterMetaData

use of java.sql.ParameterMetaData in project calcite-avatica by apache.

the class RemoteDriverTest method checkPrepareBindExecuteFetchDate.

private void checkPrepareBindExecuteFetchDate(Connection connection) throws Exception {
    final String sql0 = "select cast(? as varchar(20)) as c\n" + "from (values (1, 'a'))";
    final String sql1 = "select ? + interval '2' day as c from (values (1, 'a'))";
    final Date date = Date.valueOf("2015-04-08");
    final long time = date.getTime();
    PreparedStatement ps;
    ParameterMetaData parameterMetaData;
    ResultSet resultSet;
    ps = connection.prepareStatement(sql0);
    parameterMetaData = ps.getParameterMetaData();
    assertThat(parameterMetaData.getParameterCount(), equalTo(1));
    ps.setDate(1, date);
    resultSet = ps.executeQuery();
    assertThat(resultSet.next(), is(true));
    assertThat(resultSet.getString(1), is("2015-04-08"));
    ps.setTimestamp(1, new Timestamp(time));
    resultSet = ps.executeQuery();
    assertThat(resultSet.next(), is(true));
    assertThat(resultSet.getString(1), is("2015-04-08 00:00:00.0"));
    ps.setTime(1, new Time(time));
    resultSet = ps.executeQuery();
    assertThat(resultSet.next(), is(true));
    assertThat(resultSet.getString(1), is("00:00:00"));
    ps.close();
    ps = connection.prepareStatement(sql1);
    parameterMetaData = ps.getParameterMetaData();
    assertThat(parameterMetaData.getParameterCount(), equalTo(1));
    ps.setDate(1, date);
    resultSet = ps.executeQuery();
    assertTrue(resultSet.next());
    assertThat(resultSet.getDate(1), equalTo(new Date(time + TimeUnit.DAYS.toMillis(2))));
    assertThat(resultSet.getTimestamp(1), equalTo(new Timestamp(time + TimeUnit.DAYS.toMillis(2))));
    ps.setTimestamp(1, new Timestamp(time));
    resultSet = ps.executeQuery();
    assertTrue(resultSet.next());
    assertThat(resultSet.getTimestamp(1), equalTo(new Timestamp(time + TimeUnit.DAYS.toMillis(2))));
    assertThat(resultSet.getTimestamp(1), equalTo(new Timestamp(time + TimeUnit.DAYS.toMillis(2))));
    ps.setObject(1, new java.util.Date(time));
    resultSet = ps.executeQuery();
    assertTrue(resultSet.next());
    assertThat(resultSet.getDate(1), equalTo(new Date(time + TimeUnit.DAYS.toMillis(2))));
    assertThat(resultSet.getTimestamp(1), equalTo(new Timestamp(time + TimeUnit.DAYS.toMillis(2))));
    resultSet.close();
    ps.close();
    connection.close();
}
Also used : ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement) Time(java.sql.Time) StringContains.containsString(org.hamcrest.core.StringContains.containsString) Timestamp(java.sql.Timestamp) Date(java.sql.Date) ParameterMetaData(java.sql.ParameterMetaData)

Example 9 with ParameterMetaData

use of java.sql.ParameterMetaData in project calcite-avatica by apache.

the class RemoteDriverTest method checkPrepareBindExecuteFetch.

private void checkPrepareBindExecuteFetch(Connection connection) throws SQLException {
    final String sql = "select cast(? as integer) * 3 as c, 'x' as x\n" + "from (values (1, 'a'))";
    final PreparedStatement ps = connection.prepareStatement(sql);
    final ResultSetMetaData metaData = ps.getMetaData();
    assertEquals(2, metaData.getColumnCount());
    assertEquals("C", metaData.getColumnName(1));
    assertEquals("X", metaData.getColumnName(2));
    try {
        final ResultSet resultSet = ps.executeQuery();
        fail("expected error, got " + resultSet);
    } catch (SQLException e) {
        LOG.info("Caught expected error", e);
        assertThat(e.getMessage(), containsString("exception while executing query: unbound parameter"));
    }
    final ParameterMetaData parameterMetaData = ps.getParameterMetaData();
    assertThat(parameterMetaData.getParameterCount(), equalTo(1));
    ps.setInt(1, 10);
    final ResultSet resultSet = ps.executeQuery();
    assertTrue(resultSet.next());
    assertThat(resultSet.getInt(1), equalTo(30));
    assertFalse(resultSet.next());
    resultSet.close();
    ps.setInt(1, 20);
    final ResultSet resultSet2 = ps.executeQuery();
    assertFalse(resultSet2.isClosed());
    assertTrue(resultSet2.next());
    assertThat(resultSet2.getInt(1), equalTo(60));
    assertThat(resultSet2.wasNull(), is(false));
    assertFalse(resultSet2.next());
    resultSet2.close();
    ps.setObject(1, null);
    final ResultSet resultSet3 = ps.executeQuery();
    assertTrue(resultSet3.next());
    assertThat(resultSet3.getInt(1), equalTo(0));
    assertThat(resultSet3.wasNull(), is(true));
    assertFalse(resultSet3.next());
    resultSet3.close();
    ps.close();
    connection.close();
}
Also used : ResultSetMetaData(java.sql.ResultSetMetaData) SQLException(java.sql.SQLException) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement) StringContains.containsString(org.hamcrest.core.StringContains.containsString) ParameterMetaData(java.sql.ParameterMetaData)

Example 10 with ParameterMetaData

use of java.sql.ParameterMetaData in project calcite-avatica by apache.

the class MetadataTest method parameterMetadata.

@Test
public void parameterMetadata() throws Exception {
    final String tableName = getTableName();
    try (Statement stmt = getConnection().createStatement()) {
        assertFalse(stmt.execute("DROP TABLE IF EXISTS " + tableName));
        String sql = "CREATE TABLE " + tableName + " (pk integer not null primary key, " + "col1 DECIMAL(10, 5), col2 boolean not null)";
        assertFalse(stmt.execute(sql));
        String insertSql = "INSERT INTO " + tableName + " values(?, ?, ?)";
        try (PreparedStatement pstmt = getConnection().prepareStatement(insertSql)) {
            ParameterMetaData params = pstmt.getParameterMetaData();
            assertEquals(3, params.getParameterCount());
            assertEquals(Types.INTEGER, params.getParameterType(1));
            assertTrue(params.isSigned(1));
            assertTrue(ParameterMetaData.parameterNoNulls == params.isNullable(1) || ParameterMetaData.parameterNullableUnknown == params.isNullable(1));
            assertEquals(Types.DECIMAL, params.getParameterType(2));
            assertTrue(params.isSigned(2));
            assertTrue(ParameterMetaData.parameterNullable == params.isNullable(2) || ParameterMetaData.parameterNullableUnknown == params.isNullable(2));
            assertEquals(10, params.getPrecision(2));
            assertEquals(5, params.getScale(2));
            assertEquals(Types.BOOLEAN, params.getParameterType(3));
            assertFalse(params.isSigned(3));
            assertTrue(ParameterMetaData.parameterNoNulls == params.isNullable(3) || ParameterMetaData.parameterNullableUnknown == params.isNullable(3));
            // CALCITE-1103 <1.8.0 server mishandled the protobuf translation from BIG_DECIMAL to NUMBER
            pstmt.setInt(1, Integer.MAX_VALUE);
            pstmt.setBigDecimal(2, new BigDecimal("12345.12345"));
            pstmt.setBoolean(3, true);
            assertEquals(1, pstmt.executeUpdate());
            pstmt.setInt(1, Integer.MIN_VALUE);
            pstmt.setBigDecimal(2, new BigDecimal("54321.54321"));
            pstmt.setBoolean(3, false);
            assertEquals(1, pstmt.executeUpdate());
        }
        ResultSet results = stmt.executeQuery("SELECT * FROM " + tableName + " ORDER BY pk");
        assertNotNull(results);
        ResultSetMetaData resultMetadata = results.getMetaData();
        // Verify result metadata
        assertEquals(3, resultMetadata.getColumnCount());
        assertTrue(ParameterMetaData.parameterNoNulls == resultMetadata.isNullable(1) || ParameterMetaData.parameterNullableUnknown == resultMetadata.isNullable(1));
        assertEquals(Types.INTEGER, resultMetadata.getColumnType(1));
        assertTrue(resultMetadata.isSigned(1));
        assertTrue(ParameterMetaData.parameterNullable == resultMetadata.isNullable(2) || ParameterMetaData.parameterNullableUnknown == resultMetadata.isNullable(2));
        assertEquals(Types.DECIMAL, resultMetadata.getColumnType(2));
        assertTrue(resultMetadata.isSigned(2));
        assertEquals(10, resultMetadata.getPrecision(2));
        assertEquals(5, resultMetadata.getScale(2));
        assertTrue(ParameterMetaData.parameterNoNulls == resultMetadata.isNullable(3) || ParameterMetaData.parameterNullableUnknown == resultMetadata.isNullable(3));
        assertEquals(Types.BOOLEAN, resultMetadata.getColumnType(3));
        assertFalse(resultMetadata.isSigned(3));
        // Verify the results
        assertTrue(results.next());
        assertEquals(Integer.MIN_VALUE, results.getInt(1));
        // CALCITE-1103 protobuf truncated decimal value
        BigDecimal buggyDecimalValue = new BigDecimal("54321.00000");
        BigDecimal expectedDecimalValue = new BigDecimal("54321.54321");
        BigDecimal actualDecimalValue = results.getBigDecimal(2);
        assertTrue("Unexpected decimal value of " + actualDecimalValue, expectedDecimalValue.equals(actualDecimalValue) || buggyDecimalValue.equals(actualDecimalValue));
        assertEquals(false, results.getBoolean(3));
        assertTrue(results.next());
        assertEquals(Integer.MAX_VALUE, results.getInt(1));
        // CALCITE-1103 protobuf truncated decimal value
        buggyDecimalValue = new BigDecimal("12345.00000");
        expectedDecimalValue = new BigDecimal("12345.12345");
        actualDecimalValue = results.getBigDecimal(2);
        assertTrue("Unexpected decimal value of " + actualDecimalValue, expectedDecimalValue.equals(actualDecimalValue) || buggyDecimalValue.equals(actualDecimalValue));
        assertEquals(true, results.getBoolean(3));
        assertFalse(results.next());
    }
}
Also used : ResultSetMetaData(java.sql.ResultSetMetaData) Statement(java.sql.Statement) PreparedStatement(java.sql.PreparedStatement) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement) ParameterMetaData(java.sql.ParameterMetaData) BigDecimal(java.math.BigDecimal) Test(org.junit.Test)

Aggregations

ParameterMetaData (java.sql.ParameterMetaData)58 PreparedStatement (java.sql.PreparedStatement)49 Test (org.junit.Test)41 Connection (java.sql.Connection)39 BaseConnectionlessQueryTest (org.apache.phoenix.query.BaseConnectionlessQueryTest)31 ResultSet (java.sql.ResultSet)14 ResultSetMetaData (java.sql.ResultSetMetaData)10 Statement (java.sql.Statement)9 StringContains.containsString (org.hamcrest.core.StringContains.containsString)9 BigDecimal (java.math.BigDecimal)8 Date (java.sql.Date)6 SQLException (java.sql.SQLException)6 Calendar (java.util.Calendar)2 List (java.util.List)2 Set (java.util.Set)2 TimeZone (java.util.TimeZone)2 Scan (org.apache.hadoop.hbase.client.Scan)2 FilterAdapter (com.alibaba.druid.filter.FilterAdapter)1 FilterChain (com.alibaba.druid.filter.FilterChain)1 DruidDataSource (com.alibaba.druid.pool.DruidDataSource)1