public String sqlName() { return jdbcType.getName(); }
@Override public void setDataTypeMapper(JDBCType jdbcType, DataTypeMapper mapper) { dataTypeMappers.put(jdbcType.getName(), mapper); }
@Override public void setDataTypeMapper(JDBCType jdbcType, DataTypeMapper mapper) { dataTypeMappers.put(jdbcType.getName(), mapper); }
@Override public void setDataTypeMapper(JDBCType jdbcType, DataTypeMapper mapper) { dataTypeMappers.put(jdbcType.getName(), mapper); }
protected static String getJDBCTypeName(int expected) { try { return JDBCType.valueOf(expected).getName(); } catch (IllegalArgumentException e) { return String.valueOf(expected); } }
private String renderJdbcType(BindableColumn<?> column) { return column.jdbcType().map(jt -> ",jdbcType=" + jt.getName()) //$NON-NLS-1$ .orElse(""); //$NON-NLS-1$ } }
public void registerDatastoreMapping(String javaTypeName, Class datastoreMappingType, JDBCType jdbcType, String sqlType, boolean dflt) { registerDatastoreMapping(javaTypeName, datastoreMappingType, jdbcType != null ? jdbcType.getName() : null, sqlType, dflt); }
public static String toNativeType(Integer dataType) { return JDBCType.valueOf(dataType).getName(); }
@Override public String buildDataType(RDBColumnMetaData columnMetaData) { if (columnMetaData.getJdbcType() == null) return null; DataTypeMapper mapper = dataTypeMappers.get(columnMetaData.getJdbcType().getName()); if (null == mapper) mapper = defaultDataTypeMapper; return mapper.getDataType(columnMetaData); }
@Override public String buildDataType(RDBColumnMetaData columnMetaData) { if (columnMetaData.getJdbcType() == null) return null; DataTypeMapper mapper = dataTypeMappers.get(columnMetaData.getJdbcType().getName()); if (null == mapper) mapper = defaultDataTypeMapper; return mapper.getDataType(columnMetaData); }
@Override public String buildDataType(RDBColumnMetaData columnMetaData) { if (columnMetaData.getJdbcType() == null) return null; DataTypeMapper mapper = dataTypeMappers.get(columnMetaData.getJdbcType().getName()); if (null == mapper) mapper = defaultDataTypeMapper; return mapper.getDataType(columnMetaData); }
private static SchemaBuilder.FieldAssembler<Schema> createAvroFields( ResultSetMetaData meta, SchemaBuilder.FieldAssembler<Schema> builder, boolean useLogicalTypes) throws SQLException { for (int i = 1; i <= meta.getColumnCount(); i++) { String columnName; if (meta.getColumnName(i).isEmpty()) { columnName = meta.getColumnLabel(i); } else { columnName = meta.getColumnName(i); } int columnType = meta.getColumnType(i); String typeName = JDBCType.valueOf(columnType).getName(); SchemaBuilder.FieldBuilder<Schema> field = builder .name(normalizeForAvro(columnName)) .doc(String.format("From sqlType %d %s", columnType, typeName)) .prop("columnName", columnName) .prop("sqlCode", String.valueOf(columnType)) .prop("typeName", typeName); fieldAvroType(columnType, meta.getPrecision(i), field, useLogicalTypes); } return builder; }
@Test public void parseInsertAllColumns() throws SQLException { try (Statement stmt = db.connection.createStatement()) { final String createTable = "CREATE TABLE NAME2 (id INTEGER PRIMARY KEY, firstName VARCHAR(255), " + "lastName VARCHAR(255))"; stmt.executeUpdate(createTable); stmt.executeUpdate("INSERT INTO NAME2 VALUES (1, 'Joe', 'Jackson')"); stmt.executeUpdate("INSERT INTO NAME2 VALUES (2, 'Roger', 'Waters')"); } final String sqlStatement = "INSERT INTO NAME2 VALUES (:#id, :#first, :#last)"; final SqlStatementParser parser = new SqlStatementParser(db.connection, sqlStatement); final SqlStatementMetaData info = parser.parse(); final List<SqlParam> paramList = DatabaseMetaDataHelper.getJDBCInfoByColumnOrder(db.connection.getMetaData(), null, null, "NAME2", info.getInParams()); Assert.assertEquals("INTEGER", paramList.get(0).getJdbcType().getName()); Assert.assertEquals("VARCHAR", paramList.get(1).getJdbcType().getName()); Assert.assertEquals("VARCHAR", paramList.get(2).getJdbcType().getName()); }
@Test public void parseInsertWithSpecifiedColumnNames() throws SQLException { try (Statement stmt = db.connection.createStatement()) { final String createTable = "CREATE TABLE NAME3 (id INTEGER PRIMARY KEY, firstName VARCHAR(255), " + "lastName VARCHAR(255))"; stmt.executeUpdate(createTable); stmt.executeUpdate("INSERT INTO NAME3 (ID, FIRSTNAME, LASTNAME) VALUES (1, 'Joe', 'Jackson')"); stmt.executeUpdate("INSERT INTO NAME3 (ID, FIRSTNAME, LASTNAME) VALUES (2, 'Roger', 'Waters')"); } final String sqlStatement = "INSERT INTO NAME3 (ID, FIRSTNAME, LASTNAME) VALUES (:#id, :#first, :#last)"; final SqlStatementParser parser = new SqlStatementParser(db.connection, sqlStatement); final SqlStatementMetaData info = parser.parse(); final List<SqlParam> paramList = DatabaseMetaDataHelper.getJDBCInfoByColumnNames(db.connection.getMetaData(), null, null, "NAME3", info.getInParams()); Assert.assertEquals("INTEGER", paramList.get(0).getJdbcType().getName()); Assert.assertEquals("VARCHAR", paramList.get(1).getJdbcType().getName()); Assert.assertEquals("VARCHAR", paramList.get(2).getJdbcType().getName()); }
@Test public void parseSelect() throws SQLException { final Statement stmt = db.connection.createStatement(); final String createTable = "CREATE TABLE NAME (id INTEGER PRIMARY KEY, firstName VARCHAR(255), " + "lastName VARCHAR(255))"; stmt.executeUpdate(createTable); stmt.executeUpdate("INSERT INTO name VALUES (1, 'Joe', 'Jackson')"); stmt.executeUpdate("INSERT INTO NAME VALUES (2, 'Roger', 'Waters')"); final String sqlStatement = "SELECT FIRSTNAME, LASTNAME FROM NAME WHERE ID=:#id"; final SqlStatementParser parser = new SqlStatementParser(db.connection, sqlStatement); final SqlStatementMetaData info = parser.parse(); final List<SqlParam> paramList = DatabaseMetaDataHelper.getOutputColumnInfo(db.connection, info.getDefaultedSqlStatement()); Assert.assertEquals("VARCHAR", paramList.get(0).getJdbcType().getName()); Assert.assertEquals("VARCHAR", paramList.get(1).getJdbcType().getName()); }
@Test public void parseSelect() throws JsonProcessingException, JSONException, SQLException { Statement stmt = connection.createStatement(); String createTable = "CREATE TABLE NAME (id INTEGER PRIMARY KEY, firstName VARCHAR(255), " + "lastName VARCHAR(255))"; stmt.executeUpdate(createTable); stmt.executeUpdate("INSERT INTO NAME VALUES (1, 'Joe', 'Jackson')"); stmt.executeUpdate("INSERT INTO NAME VALUES (2, 'Roger', 'Waters')"); String sqlStatement = "SELECT FIRSTNAME, LASTNAME FROM NAME WHERE ID=:#id"; SqlStatementParser parser = new SqlStatementParser(connection, schema, sqlStatement); SqlStatementMetaData info = parser.parse(); List<SqlParam> paramList = DatabaseMetaDataHelper.getOutputColumnInfo(connection, info.getDefaultedSqlStatement()); Assert.assertEquals("VARCHAR", paramList.get(0).getJdbcType().getName()); Assert.assertEquals("VARCHAR", paramList.get(1).getJdbcType().getName()); }
@Test public void parseInsertWithSpecifiedColumnNames() throws SQLException { Statement stmt = connection.createStatement(); String createTable = "CREATE TABLE NAME3 (id INTEGER PRIMARY KEY, firstName VARCHAR(255), " + "lastName VARCHAR(255))"; stmt.executeUpdate(createTable); stmt.executeUpdate("INSERT INTO NAME3 (ID, FIRSTNAME, LASTNAME) VALUES (1, 'Joe', 'Jackson')"); stmt.executeUpdate("INSERT INTO NAME3 (ID, FIRSTNAME, LASTNAME) VALUES (2, 'Roger', 'Waters')"); String sqlStatement = "INSERT INTO NAME3 (ID, FIRSTNAME, LASTNAME) VALUES (:#id, :#first, :#last)"; SqlStatementParser parser = new SqlStatementParser(connection, schema, sqlStatement); SqlStatementMetaData info = parser.parse(); List<SqlParam> paramList = DatabaseMetaDataHelper.getJDBCInfoByColumnNames( connection.getMetaData(), null, null, "NAME3", info.getInParams()); Assert.assertEquals("INTEGER", paramList.get(0).getJdbcType().getName()); Assert.assertEquals("VARCHAR", paramList.get(1).getJdbcType().getName()); Assert.assertEquals("VARCHAR", paramList.get(2).getJdbcType().getName()); } }
protected H2Dialect() { defaultDataTypeMapper = (meta) -> meta.getJdbcType().getName().toLowerCase(); setDataTypeMapper(JDBCType.VARCHAR, (meta) -> StringUtils.concat("varchar(", meta.getLength(), ")")); setDataTypeMapper(JDBCType.TIMESTAMP, (meta) -> "timestamp"); setDataTypeMapper(JDBCType.SMALLINT, (meta) -> "smallint"); setDataTypeMapper(JDBCType.BIGINT, (meta) -> "bigint"); setDataTypeMapper(JDBCType.TIME, (meta) -> "timestamp"); setDataTypeMapper(JDBCType.DATE, (meta) -> "date"); setDataTypeMapper(JDBCType.CLOB, (meta) -> "clob"); setDataTypeMapper(JDBCType.BLOB, (meta) -> "blob"); setDataTypeMapper(JDBCType.INTEGER, (meta) -> "int"); setDataTypeMapper(JDBCType.NUMERIC, (meta) -> StringUtils.concat("decimal(", meta.getPrecision(), ",", meta.getScale(), ")")); setDataTypeMapper(JDBCType.TINYINT, (meta) -> "tinyint"); setDataTypeMapper(JDBCType.DECIMAL, (meta) -> StringUtils.concat("decimal(", meta.getPrecision(), ",", meta.getScale(), ")")); setDataTypeMapper(JDBCType.OTHER, (meta) -> "other"); }
protected OracleDialect() { defaultDataTypeMapper = (meta) -> meta.getJdbcType().getName().toLowerCase(); setDataTypeMapper(JDBCType.CHAR, (meta) -> StringUtils.concat("char(", meta.getLength(), ")")); setDataTypeMapper(JDBCType.VARCHAR, (meta) -> StringUtils.concat("varchar2(", meta.getLength(), ")")); setDataTypeMapper(JDBCType.TIMESTAMP, (meta) -> "timestamp"); setDataTypeMapper(JDBCType.TIME, (meta) -> "datetime"); setDataTypeMapper(JDBCType.DATE, (meta) -> "date"); setDataTypeMapper(JDBCType.TINYINT, (meta) -> "number(2)"); setDataTypeMapper(JDBCType.SMALLINT, (meta) -> "number(5)"); setDataTypeMapper(JDBCType.INTEGER, (meta) -> "integer"); setDataTypeMapper(JDBCType.DOUBLE, (meta) -> "double"); setDataTypeMapper(JDBCType.CLOB, (meta) -> "clob"); setDataTypeMapper(JDBCType.BLOB, (meta) -> "blob"); setDataTypeMapper(JDBCType.BINARY, (meta) -> "blob"); setDataTypeMapper(JDBCType.NUMERIC, (meta) -> StringUtils.concat("number(", meta.getPrecision(), ",", meta.getScale(), ")")); setDataTypeMapper(JDBCType.DECIMAL, (meta) -> StringUtils.concat("number(", meta.getPrecision(), ",", meta.getScale(), ")")); setDataTypeMapper(JDBCType.BIGINT, (meta) -> "bigint"); setDataTypeMapper(JDBCType.OTHER, (meta) -> "other"); }
protected MysqlDialect() { defaultDataTypeMapper = (meta) -> meta.getJdbcType().getName().toLowerCase(); setDataTypeMapper(JDBCType.CHAR, (meta) -> StringUtils.concat("char(", meta.getLength(), ")")); setDataTypeMapper(JDBCType.VARCHAR, (meta) -> StringUtils.concat("varchar(", meta.getLength(), ")")); setDataTypeMapper(JDBCType.TIMESTAMP, (meta) -> "datetime"); setDataTypeMapper(JDBCType.TIME, (meta) -> "time"); setDataTypeMapper(JDBCType.DATE, (meta) -> "year"); setDataTypeMapper(JDBCType.CLOB, (meta) -> "text"); setDataTypeMapper(JDBCType.LONGVARBINARY, (meta) -> "longblob"); setDataTypeMapper(JDBCType.LONGVARCHAR, (meta) -> "longtext"); setDataTypeMapper(JDBCType.BLOB, (meta) -> "blob"); setDataTypeMapper(JDBCType.BIGINT, (meta) -> "bigint"); setDataTypeMapper(JDBCType.DOUBLE, (meta) -> "double"); setDataTypeMapper(JDBCType.INTEGER, (meta) -> "int"); setDataTypeMapper(JDBCType.NUMERIC, (meta) -> StringUtils.concat("decimal(", meta.getPrecision(), ",", meta.getScale(), ")")); setDataTypeMapper(JDBCType.DECIMAL, (meta) -> StringUtils.concat("decimal(", meta.getPrecision(), ",", meta.getScale(), ")")); setDataTypeMapper(JDBCType.TINYINT, (meta) -> "tinyint"); setDataTypeMapper(JDBCType.BIGINT, (meta) -> "bigint"); setDataTypeMapper(JDBCType.OTHER, (meta) -> "other"); }