Procházet zdrojové kódy

Add support for upcoming Postgres 9.5 UPSERT syntax

tags/v1.6.3
James Moger před 9 roky
rodič
revize
75c995b50c

+ 6
- 3
releases.moxie Zobrazit soubor

@@ -10,10 +10,12 @@ r27: {
text: ~
security: ~
fixes: ~
changes: ~
changes:
- Add support for PostgreSQL 9.5 UPSERT syntax
additions: ~
dependencyChanges: ~
contributors: ~
contributors:
- James Moger
}

#
@@ -32,7 +34,8 @@ r26: {
changes: ~
additions: ~
dependencyChanges: ~
contributors: ~
contributors:
- James Moger
}

#

+ 7
- 7
src/main/java/com/iciql/SQLDialectDefault.java Zobrazit soubor

@@ -49,13 +49,13 @@ public class SQLDialectDefault implements SQLDialect {

final String LITERAL = "'";

float databaseVersion;
int databaseMajorVersion;
int databaseMinorVersion;
String databaseName;
String productVersion;
Mode mode;
Map<Class<? extends DataTypeAdapter<?>>, DataTypeAdapter<?>> typeAdapters;
protected float databaseVersion;
protected int databaseMajorVersion;
protected int databaseMinorVersion;
protected String databaseName;
protected String productVersion;
protected Mode mode;
protected Map<Class<? extends DataTypeAdapter<?>>, DataTypeAdapter<?>> typeAdapters;

public SQLDialectDefault() {
typeAdapters = new ConcurrentHashMap<Class<? extends DataTypeAdapter<?>>, DataTypeAdapter<?>>();

+ 32
- 0
src/main/java/com/iciql/SQLDialectPostgreSQL.java Zobrazit soubor

@@ -16,6 +16,7 @@
package com.iciql;
import com.iciql.TableDefinition.FieldDefinition;
import com.iciql.TableDefinition.IndexDefinition;
import com.iciql.util.StatementBuilder;
@@ -101,4 +102,35 @@ public class SQLDialectPostgreSQL extends SQLDialectDefault {
stat.setSQL(buff.toString().trim());
}
@Override
public <T> void prepareMerge(SQLStatement stat, String schemaName, String tableName,
TableDefinition<T> def, Object obj) {
if (databaseVersion < 9.5f) {
// simulated UPSERT for <= 9.4 release
super.prepareMerge(stat, schemaName, tableName, def, obj);
return;
}
// official UPSERT added in 9.5 release
StatementBuilder buff = new StatementBuilder("INSERT INTO ");
buff.append(prepareTableName(schemaName, tableName)).append(" (");
buff.resetCount();
for (FieldDefinition field : def.fields) {
buff.appendExceptFirst(", ");
buff.append(field.columnName);
}
buff.resetCount();
buff.append(") VALUES (");
for (FieldDefinition field : def.fields) {
buff.appendExceptFirst(", ");
buff.append('?');
Object value = def.getValue(obj, field);
Object parameter = serialize(value, field.typeAdapter);
stat.addParameter(parameter);
}
buff.append(") ON CONFLICT DO UPDATE SET");
stat.setSQL(buff.toString());
}
}

Načítá se…
Zrušit
Uložit