From edd18f1663c073877856d5a97dd5fca92c09b475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 8 Mar 2010 09:09:38 +0000 Subject: [PATCH] added findbugs checks --- .../mysema/query/sql/AbstractSQLQuery.java | 1 + .../com/mysema/query/sql/SQLSerializer.java | 19 ++++- .../com/mysema/query/sql/SQLTemplates.java | 22 +++++ .../com/mysema/query/sql/SQLTypeMapping.java | 5 ++ .../mysema/query/sql/dml/SQLDeleteClause.java | 1 + .../mysema/query/sql/dml/SQLInsertClause.java | 80 +++++++++++++++++++ .../mysema/query/sql/dml/SQLUpdateClause.java | 1 + .../query/DerbyQueryMutabilityTest.java | 5 ++ 8 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java index f18f66e75..acb7fc23f 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java @@ -41,6 +41,7 @@ import com.mysema.util.JDBCUtil; * @author tiwe * @version $Id$ */ +@edu.umd.cs.findbugs.annotations.SuppressWarnings("SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING") public abstract class AbstractSQLQuery> extends ProjectableQuery{ diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index 1dec1f019..faa264463 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -25,6 +25,7 @@ import com.mysema.query.types.expr.Expr; import com.mysema.query.types.operation.Operator; import com.mysema.query.types.operation.Ops; import com.mysema.query.types.path.PEntity; +import com.mysema.query.types.path.Path; import com.mysema.query.types.query.SubQuery; /** @@ -238,6 +239,23 @@ public class SQLSerializer extends SerializerBase { } } + public void serializeForInsert(PEntity entity, List> columns, List> values) { + append(templates.getInsertInto()); + handle(entity); + // columns + if (!columns.isEmpty()){ + append("("); + handle(COMMA, columns); + append(")"); + } + // values + append(templates.getValues()); + append("("); + handle(COMMA, values); + append(")"); + } + + @SuppressWarnings("unchecked") public void serializeUnion(SubQuery[] sqs, List> orderBy) { @@ -321,5 +339,4 @@ public class SQLSerializer extends SerializerBase { } } - } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index 1298f7a8d..20dc3a550 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -61,6 +61,8 @@ public class SQLTemplates extends Templates { private String having = "\nhaving "; + private String insertInto = "insert into "; + private String innerJoin = "\ninner join "; private String join = "\njoin "; @@ -102,6 +104,8 @@ public class SQLTemplates extends Templates { private String union = "\nunion\n"; private String update = "update "; + + private String values = "\nvalues "; private String where = "\nwhere "; @@ -481,6 +485,14 @@ public class SQLTemplates extends Templates { this.update = update; } + public final String getValues() { + return values; + } + + public final void setValues(String values) { + this.values = values; + } + public final String getWhere() { return where; } @@ -493,6 +505,14 @@ public class SQLTemplates extends Templates { return true; } + public final String getInsertInto() { + return insertInto; + } + + public final void setInsertInto(String insertInto) { + this.insertInto = insertInto; + } + public final String getJoinSymbol(JoinType joinType){ switch (joinType) { case FULLJOIN: return fullJoin; @@ -502,4 +522,6 @@ public class SQLTemplates extends Templates { } return ", "; } + + } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTypeMapping.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTypeMapping.java index aa0f9b6cb..1ea1c2742 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTypeMapping.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTypeMapping.java @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2009 Mysema Ltd. + * All rights reserved. + * + */ package com.mysema.query.sql; import java.math.BigDecimal; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java index 5ac8bc80d..cd389c7c7 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java @@ -25,6 +25,7 @@ import com.mysema.util.JDBCUtil; * @author tiwe * */ +@edu.umd.cs.findbugs.annotations.SuppressWarnings("SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING") public class SQLDeleteClause implements DeleteClause{ private final QueryMetadata metadata = new DefaultQueryMetadata(); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java new file mode 100644 index 000000000..f05813b9f --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2009 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.query.sql.dml; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.mysema.query.QueryException; +import com.mysema.query.sql.SQLSerializer; +import com.mysema.query.sql.SQLTemplates; +import com.mysema.query.types.expr.Expr; +import com.mysema.query.types.path.PEntity; +import com.mysema.util.JDBCUtil; + +@edu.umd.cs.findbugs.annotations.SuppressWarnings("SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING") +public class SQLInsertClause { + + private final PEntity entity; + + private final Connection connection; + + private final SQLTemplates templates; + + private final List> columns = new ArrayList>(); + + private final List> values = new ArrayList>(); + + public SQLInsertClause(Connection connection, SQLTemplates templates, PEntity entity){ + this.connection = connection; + this.templates = templates; + this.entity = entity; + } + + @edu.umd.cs.findbugs.annotations.SuppressWarnings("SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING") + public long execute() { + SQLSerializer serializer = new SQLSerializer(templates); + serializer.serializeForInsert(entity, columns, values); + String queryString = serializer.toString(); + + PreparedStatement stmt = null; + try { + stmt = connection.prepareStatement(queryString); + JDBCUtil.setParameters(stmt, serializer.getConstants()); + return stmt.executeUpdate(); + } catch (SQLException e) { + throw new QueryException("Caught " + e.getClass().getSimpleName() + " for " + queryString, e); + }finally{ + if (stmt != null){ + close(stmt); + } + } + } + + public SQLInsertClause columns(Expr... columns){ + this.columns.addAll(Arrays.asList(columns)); + return this; + } + + public SQLInsertClause values(Expr... values){ + this.values.addAll(Arrays.asList(values)); + return this; + } + + protected void close(PreparedStatement stmt) { + try { + stmt.close(); + } catch (SQLException e) { + throw new QueryException(e); + } + } + + +} diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java index aa80868bf..db60001f7 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java @@ -26,6 +26,7 @@ import com.mysema.util.JDBCUtil; * @author tiwe * */ +@edu.umd.cs.findbugs.annotations.SuppressWarnings("SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING") public class SQLUpdateClause implements UpdateClause{ private final QueryMetadata metadata = new DefaultQueryMetadata(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/DerbyQueryMutabilityTest.java b/querydsl-sql/src/test/java/com/mysema/query/DerbyQueryMutabilityTest.java index 3bddcbb1e..58fed0acd 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/DerbyQueryMutabilityTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/DerbyQueryMutabilityTest.java @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2009 Mysema Ltd. + * All rights reserved. + * + */ package com.mysema.query; import static org.junit.Assert.assertEquals;