Skip to content

Commit

Permalink
0001474: sync blocks with java error when a field with affinity 'INTE…
Browse files Browse the repository at this point in the history
…GER' contains a (empty) string
  • Loading branch information
chenson42 committed Nov 24, 2013
1 parent 5e6cc18 commit 7386f42
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 24 deletions.
Expand Up @@ -72,8 +72,37 @@ public ISqlTemplate getSqlTemplate() {
}

@Override
protected Number parseIntegerObjectValue(String value) {
return new BigDecimal(value);
protected Object parseBigDecimal(String value) {
/* sqlite allows blank data in integer fields */
if ("".equals(value)) {
return value;
} else {
return super.parseBigDecimal(value);
}
}

@Override
protected Object parseBigInteger(String value) {
/* sqlite allows blank data in integer fields */
if ("".equals(value)) {
return value;
} else {
return super.parseBigInteger(value);
}
}

@Override
protected Object parseInteger(String value) {
/* sqlite allows blank data in integer fields */
if ("".equals(value)) {
return value;
} else {
try {
return super.parseInteger(value);
} catch (NumberFormatException ex) {
return new BigDecimal(value);
}
}
}

}
Expand Up @@ -388,13 +388,10 @@ protected Object getObjectValue(String value, Column column, BinaryEncoding enco
} else if (type == Types.BIGINT) {
objectValue = parseBigInteger(value);
} else if (type == Types.INTEGER || type == Types.SMALLINT || type == Types.BIT) {
objectValue = parseIntegerObjectValue(value);
objectValue = parseInteger(value);
} else if (type == Types.NUMERIC || type == Types.DECIMAL || type == Types.FLOAT
|| type == Types.DOUBLE || type == Types.REAL) {
// The number will have either one period or one
// comma for the decimal point, but we need a
// period
objectValue = new BigDecimal(value.replace(',', '.'));
objectValue = parseBigDecimal(value);
} else if (type == Types.BOOLEAN) {
objectValue = value.equals("1") ? Boolean.TRUE : Boolean.FALSE;
} else if (!(column.getJdbcTypeName() != null && column.getJdbcTypeName().toUpperCase()
Expand All @@ -421,16 +418,25 @@ protected Object getObjectValue(String value, Column column, BinaryEncoding enco
return objectValue;

}


protected Object parseBigDecimal(String value) {
/*
* The number will have either one period or one comma for the decimal
* point, but we need a period
*/
return new BigDecimal(value.replace(',', '.'));
}

protected Number parseBigInteger(String value) {
protected Object parseBigInteger(String value) {
try {
return new Long(value);
} catch (NumberFormatException ex) {
return new BigInteger(value);
}
}

protected Number parseIntegerObjectValue(String value) {
protected Object parseInteger(String value) {
try {
return Integer.parseInt(value);
} catch (NumberFormatException ex) {
Expand Down
Expand Up @@ -32,25 +32,27 @@
import org.jumpmind.db.sql.Row;
import org.jumpmind.db.sql.SqlTemplateSettings;

public class SqliteDatabasePlatform extends AbstractJdbcDatabasePlatform implements IDatabasePlatform {
public class SqliteDatabasePlatform extends AbstractJdbcDatabasePlatform implements
IDatabasePlatform {

public static final String JDBC_DRIVER = "org.sqlite.JDBC";

private Map<String, String> sqlScriptReplacementTokens;

public SqliteDatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) {
super(dataSource, settings);
sqlScriptReplacementTokens = new HashMap<String, String>();
sqlScriptReplacementTokens.put("current_timestamp", "strftime('%Y-%m-%d %H:%M:%f','now','localtime')");
sqlScriptReplacementTokens.put("\\{ts([^<]*?)\\}","$1");
sqlScriptReplacementTokens.put("\\{d([^<]*?)\\}","$1");
sqlScriptReplacementTokens.put("current_timestamp",
"strftime('%Y-%m-%d %H:%M:%f','now','localtime')");
sqlScriptReplacementTokens.put("\\{ts([^<]*?)\\}", "$1");
sqlScriptReplacementTokens.put("\\{d([^<]*?)\\}", "$1");
}

@Override
public Map<String, String> getSqlScriptReplacementTokens() {
return sqlScriptReplacementTokens;
}

public String getName() {
return DatabaseNamesConstants.SQLITE;
}
Expand All @@ -62,24 +64,53 @@ public String getDefaultSchema() {
public String getDefaultCatalog() {
return null;
}

@Override
protected SqliteDdlBuilder createDdlBuilder() {
return new SqliteDdlBuilder();
return new SqliteDdlBuilder();
}

@Override
protected SqliteDdlReader createDdlReader() {
return new SqliteDdlReader(this);
}


}

protected ISqlTemplate createSqlTemplate() {
return new SqliteJdbcSqlTemplate(dataSource, settings, null, getDatabaseInfo());
return new SqliteJdbcSqlTemplate(dataSource, settings, null, getDatabaseInfo());
}

@Override
protected String getDateTimeStringValue(String name, int type, Row row, boolean useVariableDates) {
return row.getString(name);
}

@Override
protected Object parseBigDecimal(String value) {
/* sqlite allows blank data in integer fields */
if ("".equals(value)) {
return value;
} else {
return super.parseBigDecimal(value);
}
}

@Override
protected Object parseBigInteger(String value) {
/* sqlite allows blank data in integer fields */
if ("".equals(value)) {
return value;
} else {
return super.parseBigInteger(value);
}
}

@Override
protected Object parseInteger(String value) {
/* sqlite allows blank data in integer fields */
if ("".equals(value)) {
return value;
} else {
return super.parseInteger(value);
}
}
}

0 comments on commit 7386f42

Please sign in to comment.