@Override public DefaultColumnInfo map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException { final String tableName = r.getString("table_name"); final String columnName = r.getString("column_name"); final Integer scale = r.getInt("numeric_scale"); final Integer precision = r.getInt("numeric_precision"); final boolean isNullable = r.getBoolean("is_nullable"); final Integer maximumLength = r.getInt("character_maximum_length"); final String dataType = r.getString("data_type"); return new DefaultColumnInfo(tableName, columnName, scale, precision, isNullable, maximumLength, dataType); } }
private boolean hasValidPrecision(final DefaultColumnInfo columnInfo, final Object value) { if (columnInfo.getPrecision() != 0) { // H2 will report a numeric precision for varchar columns if (value != null && !(value instanceof String)) { final BigDecimal bigDecimalValue = new BigDecimal(value.toString()); if (bigDecimalValue.precision() > columnInfo.getPrecision()) { return false; } } } return true; }
private boolean hasValidScale(final DefaultColumnInfo columnInfo, final Object value) { if (columnInfo.getScale() != 0) { if (value != null) { final BigDecimal bigDecimalValue = new BigDecimal(value.toString()); if (bigDecimalValue.scale() > columnInfo.getScale()) { return false; } } } return true; }
private boolean isValidLengthChar(final DefaultColumnInfo columnInfo, final Object value) { // MySQL reports data_type as Strings, H2 as SQLTypes if (columnInfo.getDataType().equals("char") || columnInfo.getDataType().equals(String.valueOf(Types.CHAR))) { if (value == null) { return false; } else { if (value.toString().length() != columnInfo.getMaximumLength()) { return false; } } } return true; }
public void loadSchemaInformation(final String schemaName) { columnInfoMap.clear(); // get schema information and map it to columnInfo final List<DefaultColumnInfo> columnInfoList = dao.getColumnInfoList(schemaName); for (final DefaultColumnInfo columnInfo : columnInfoList) { final String tableName = columnInfo.getTableName(); if (!columnInfoMap.containsKey(tableName)) { columnInfoMap.put(tableName, new HashMap<String, DefaultColumnInfo>()); } columnInfoMap.get(tableName).put(columnInfo.getColumnName(), columnInfo); } }
@Test(groups = "slow") public void testRetrievingColumnInfo() { final Collection<DefaultColumnInfo> columnInfoList = vm.getTableInfo(TABLE_NAME); assertEquals(columnInfoList.size(), 4); assertNotNull(vm.getColumnInfo(TABLE_NAME, "column1")); assertNull(vm.getColumnInfo(TABLE_NAME, "bogus")); final DefaultColumnInfo numericColumnInfo = vm.getColumnInfo(TABLE_NAME, "column3"); assertNotNull(numericColumnInfo); assertEquals(numericColumnInfo.getScale(), 4); assertEquals(numericColumnInfo.getPrecision(), 10); }
private boolean hasValidNullability(final DefaultColumnInfo columnInfo, final Object value) { if (!columnInfo.getIsNullable()) { if (value == null) { return false; } } return true; }
private boolean isValidLengthString(final DefaultColumnInfo columnInfo, final Object value) { if (columnInfo.getMaximumLength() != 0) { // H2 will report a character_maximum_length for decimal if (value != null && value instanceof String) { if (value.toString().length() > columnInfo.getMaximumLength()) { return false; } } } return true; }
public void exportDataForAccount(final DatabaseExportOutputStream out, final InternalTenantContext context) { if (context.getAccountRecordId() == null || context.getTenantRecordId() == null) { return; } final List<DefaultColumnInfo> columns = databaseSchemaDao.getColumnInfoList(); if (columns.size() == 0) { return; } final List<ColumnInfo> columnsForTable = new ArrayList<ColumnInfo>(); // The list of columns is ordered by table name first String lastSeenTableName = columns.get(0).getTableName(); for (final ColumnInfo column : columns) { if (!column.getTableName().equals(lastSeenTableName)) { exportDataForAccountAndTable(out, columnsForTable, context); lastSeenTableName = column.getTableName(); columnsForTable.clear(); } columnsForTable.add(column); } exportDataForAccountAndTable(out, columnsForTable, context); }
out.newTable(tableName, ImmutableList.<ColumnInfo>of( new DefaultColumnInfo(tableName, "first_name", 0, 0, true, 0, "varchar"), new DefaultColumnInfo(tableName, "last_name", 0, 0, true, 0, "varchar"), new DefaultColumnInfo(tableName, "age", 0, 0, true, 0, "tinyint")) );