From 3c0fdb148dd390cb49d57621ca98be17378182a4 Mon Sep 17 00:00:00 2001 From: vlad Date: Mon, 8 Dec 2014 12:33:48 +0100 Subject: [PATCH 1/2] Modified Builders to support custom table schema when provided. --- .../com/j256/ormlite/stmt/DeleteBuilder.java | 19 +++++++++++++++++++ .../com/j256/ormlite/stmt/QueryBuilder.java | 19 +++++++++++++++++++ .../com/j256/ormlite/stmt/UpdateBuilder.java | 17 +++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/src/main/java/com/j256/ormlite/stmt/DeleteBuilder.java b/src/main/java/com/j256/ormlite/stmt/DeleteBuilder.java index 6b55428cb..e1770f399 100644 --- a/src/main/java/com/j256/ormlite/stmt/DeleteBuilder.java +++ b/src/main/java/com/j256/ormlite/stmt/DeleteBuilder.java @@ -19,12 +19,20 @@ */ public class DeleteBuilder extends StatementBuilder { + private String tableSchema; + // NOTE: any fields here should be added to the clear() method below public DeleteBuilder(DatabaseType databaseType, TableInfo tableInfo, Dao dao) { super(databaseType, tableInfo, dao, StatementType.DELETE); } + public DeleteBuilder(DatabaseType databaseType, TableInfo tableInfo, Dao dao, String schema) { + super(databaseType, tableInfo, dao, StatementType.DELETE); + this.tableSchema = schema; + } + + /** * Build and return a prepared delete that can be used by {@link Dao#delete(PreparedDelete)} method. If you change * the where or make other calls you will need to re-call this method to re-prepare the statement for execution. @@ -58,6 +66,10 @@ public void reset() { @Override protected void appendStatementStart(StringBuilder sb, List argList) { sb.append("DELETE FROM "); + if (this.tableSchema != null){ + databaseType.appendEscapedEntityName(sb, tableSchema); + sb.append("."); + } databaseType.appendEscapedEntityName(sb, tableInfo.getTableName()); sb.append(' '); } @@ -66,4 +78,11 @@ protected void appendStatementStart(StringBuilder sb, List argLi protected void appendStatementEnd(StringBuilder sb, List argList) { // noop } + + /** + * Manually force table schema name to this query + */ + public void setSchema(String tableSchema) { + this.tableSchema = tableSchema; + } } diff --git a/src/main/java/com/j256/ormlite/stmt/QueryBuilder.java b/src/main/java/com/j256/ormlite/stmt/QueryBuilder.java index 98a7d99df..b76de37d5 100644 --- a/src/main/java/com/j256/ormlite/stmt/QueryBuilder.java +++ b/src/main/java/com/j256/ormlite/stmt/QueryBuilder.java @@ -45,6 +45,7 @@ public class QueryBuilder extends StatementBuilder { private Long limit; private Long offset; private List joinList; + private String tableSchema; // NOTE: anything added here should be added to the clear() method below @@ -53,6 +54,13 @@ public QueryBuilder(DatabaseType databaseType, TableInfo tableInfo, Dao tableInfo, Dao dao, String tableSchema) { + super(databaseType, tableInfo, dao, StatementType.SELECT); + this.idField = tableInfo.getIdField(); + this.selectIdColumn = (idField != null); + this.tableSchema = tableSchema; + } /** * This is used by the internal call structure to note when a query builder is being used as an inner query. This is @@ -472,6 +480,10 @@ protected void appendStatementStart(StringBuilder sb, List argLi appendSelects(sb); } sb.append("FROM "); + if (tableSchema != null){ + databaseType.appendEscapedEntityName(sb, tableSchema); + sb.append("."); + } databaseType.appendEscapedEntityName(sb, tableName); sb.append(' '); if (joinList != null) { @@ -936,4 +948,11 @@ private JoinWhereOperation(WhereOperation whereOperation) { this.whereOperation = whereOperation; } } + + /** + * Manually force table schema name to this query + */ + public void setSchema(String tableSchema) { + this.tableSchema = tableSchema; + } } diff --git a/src/main/java/com/j256/ormlite/stmt/UpdateBuilder.java b/src/main/java/com/j256/ormlite/stmt/UpdateBuilder.java index 91f0f976a..a5eed0da9 100644 --- a/src/main/java/com/j256/ormlite/stmt/UpdateBuilder.java +++ b/src/main/java/com/j256/ormlite/stmt/UpdateBuilder.java @@ -26,10 +26,16 @@ public class UpdateBuilder extends StatementBuilder { private List updateClauseList = null; // NOTE: anything added here should be added to the clear() method below + private String tableSchema; public UpdateBuilder(DatabaseType databaseType, TableInfo tableInfo, Dao dao) { super(databaseType, tableInfo, dao, StatementType.UPDATE); } + + public UpdateBuilder(DatabaseType databaseType, TableInfo tableInfo, Dao dao, String schema) { + super(databaseType, tableInfo, dao, StatementType.UPDATE); + this.tableSchema = schema; + } /** * Build and return a prepared update that can be used by {@link Dao#update(PreparedUpdate)} method. If you change @@ -137,6 +143,10 @@ protected void appendStatementStart(StringBuilder sb, List argLi throw new IllegalArgumentException("UPDATE statements must have at least one SET column"); } sb.append("UPDATE "); + if (this.tableSchema != null){ + databaseType.appendEscapedEntityName(sb, tableSchema); + sb.append("."); + } databaseType.appendEscapedEntityName(sb, tableInfo.getTableName()); sb.append(" SET "); boolean first = true; @@ -161,4 +171,11 @@ private void addUpdateColumnToList(String columnName, Clause clause) { } updateClauseList.add(clause); } + + /** + * Manually force table schema name to this query + */ + public void setSchema(String tableSchema) { + this.tableSchema = tableSchema; + } } From 4f5aae2b43ad54a143845969c113fe486b588847 Mon Sep 17 00:00:00 2001 From: vlad Date: Mon, 8 Dec 2014 12:42:34 +0100 Subject: [PATCH 2/2] Added return this; to follow builder pattern --- src/main/java/com/j256/ormlite/stmt/DeleteBuilder.java | 4 +++- src/main/java/com/j256/ormlite/stmt/QueryBuilder.java | 4 +++- src/main/java/com/j256/ormlite/stmt/UpdateBuilder.java | 3 ++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/j256/ormlite/stmt/DeleteBuilder.java b/src/main/java/com/j256/ormlite/stmt/DeleteBuilder.java index e1770f399..cf2a41e1c 100644 --- a/src/main/java/com/j256/ormlite/stmt/DeleteBuilder.java +++ b/src/main/java/com/j256/ormlite/stmt/DeleteBuilder.java @@ -81,8 +81,10 @@ protected void appendStatementEnd(StringBuilder sb, List argList /** * Manually force table schema name to this query + * @return */ - public void setSchema(String tableSchema) { + public DeleteBuilder setSchema(String tableSchema) { this.tableSchema = tableSchema; + return this; } } diff --git a/src/main/java/com/j256/ormlite/stmt/QueryBuilder.java b/src/main/java/com/j256/ormlite/stmt/QueryBuilder.java index b76de37d5..bcea3a5a1 100644 --- a/src/main/java/com/j256/ormlite/stmt/QueryBuilder.java +++ b/src/main/java/com/j256/ormlite/stmt/QueryBuilder.java @@ -951,8 +951,10 @@ private JoinWhereOperation(WhereOperation whereOperation) { /** * Manually force table schema name to this query + * @return */ - public void setSchema(String tableSchema) { + public QueryBuilder setSchema(String tableSchema) { this.tableSchema = tableSchema; + return this; } } diff --git a/src/main/java/com/j256/ormlite/stmt/UpdateBuilder.java b/src/main/java/com/j256/ormlite/stmt/UpdateBuilder.java index a5eed0da9..4e2b9f5d6 100644 --- a/src/main/java/com/j256/ormlite/stmt/UpdateBuilder.java +++ b/src/main/java/com/j256/ormlite/stmt/UpdateBuilder.java @@ -175,7 +175,8 @@ private void addUpdateColumnToList(String columnName, Clause clause) { /** * Manually force table schema name to this query */ - public void setSchema(String tableSchema) { + public UpdateBuilder setSchema(String tableSchema) { this.tableSchema = tableSchema; + return this; } }