aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Ahlborn <jtahlborn@yahoo.com>2016-01-12 22:41:43 +0000
committerJames Ahlborn <jtahlborn@yahoo.com>2016-01-12 22:41:43 +0000
commit69b84ac737d53c00bf801eccca774535b0a9610c (patch)
tree8af6e5b4d8258e8b53896a1c81f5f77599a39c0c
parentfb33e1e13f201d8993833a6e7a843483df5c5d7e (diff)
downloadjackcess-69b84ac737d53c00bf801eccca774535b0a9610c.tar.gz
jackcess-69b84ac737d53c00bf801eccca774535b0a9610c.zip
Fix missing column names in AppendQuery SQL strings. Fixes #131
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@977 f203690c-595d-4dc9-a70b-905162fa7fd2
-rw-r--r--src/changes/changes.xml5
-rw-r--r--src/main/java/com/healthmarketscience/jackcess/impl/query/AppendQueryImpl.java32
-rw-r--r--src/main/java/com/healthmarketscience/jackcess/query/AppendQuery.java2
-rw-r--r--src/test/java/com/healthmarketscience/jackcess/query/QueryTest.java23
4 files changed, 55 insertions, 7 deletions
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 621dd17..208fb9c 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -4,6 +4,11 @@
<author email="javajedi@users.sf.net">Tim McCune</author>
</properties>
<body>
+ <release version="2.1.4" date="TBD">
+ <action dev="jahlborn" type="fix" system="SourceForge2" issue="131">
+ Fix missing column names in AppendQuery SQL strings.
+ </action>
+ </release>
<release version="2.1.3" date="2015-12-04">
<action dev="jahlborn" type="fix" system="SourceForge2" issue="127">
Throw a prettier exception when maxing out the row size during row
diff --git a/src/main/java/com/healthmarketscience/jackcess/impl/query/AppendQueryImpl.java b/src/main/java/com/healthmarketscience/jackcess/impl/query/AppendQueryImpl.java
index 8fb3296..140fde3 100644
--- a/src/main/java/com/healthmarketscience/jackcess/impl/query/AppendQueryImpl.java
+++ b/src/main/java/com/healthmarketscience/jackcess/impl/query/AppendQueryImpl.java
@@ -40,6 +40,14 @@ public class AppendQueryImpl extends BaseSelectQueryImpl implements AppendQuery
return getTypeRow().name1;
}
+ public List<String> getTargetColumns() {
+ return new RowFormatter(getTargetRows()) {
+ @Override protected void format(StringBuilder builder, Row row) {
+ toOptionalQuotedExpr(builder, row.name2, true);
+ }
+ }.format();
+ }
+
public String getRemoteDbPath() {
return getTypeRow().name2;
}
@@ -48,6 +56,14 @@ public class AppendQueryImpl extends BaseSelectQueryImpl implements AppendQuery
return getTypeRow().expression;
}
+ public List<String> getValues() {
+ return new RowFormatter(getValueRows()) {
+ @Override protected void format(StringBuilder builder, Row row) {
+ builder.append(row.expression);
+ }
+ }.format();
+ }
+
protected List<Row> getValueRows() {
return filterRowsByFlag(super.getColumnRows(), APPEND_VALUE_FLAG);
}
@@ -57,12 +73,12 @@ public class AppendQueryImpl extends BaseSelectQueryImpl implements AppendQuery
return filterRowsByNotFlag(super.getColumnRows(), APPEND_VALUE_FLAG);
}
- public List<String> getValues() {
- return new RowFormatter(getValueRows()) {
- @Override protected void format(StringBuilder builder, Row row) {
- builder.append(row.expression);
- }
- }.format();
+ protected List<Row> getTargetRows() {
+ return new RowFilter() {
+ @Override protected boolean keep(Row row) {
+ return (row.name2 != null);
+ }
+ }.filter(super.getColumnRows());
}
@Override
@@ -70,6 +86,10 @@ public class AppendQueryImpl extends BaseSelectQueryImpl implements AppendQuery
{
builder.append("INSERT INTO ");
toOptionalQuotedExpr(builder, getTargetTable(), true);
+ List<String> columns = getTargetColumns();
+ if(!columns.isEmpty()) {
+ builder.append(" (").append(columns).append(')');
+ }
toRemoteDb(builder, getRemoteDbPath(), getRemoteDbType());
builder.append(NEWLINE);
List<String> values = getValues();
diff --git a/src/main/java/com/healthmarketscience/jackcess/query/AppendQuery.java b/src/main/java/com/healthmarketscience/jackcess/query/AppendQuery.java
index a62c286..ab4935c 100644
--- a/src/main/java/com/healthmarketscience/jackcess/query/AppendQuery.java
+++ b/src/main/java/com/healthmarketscience/jackcess/query/AppendQuery.java
@@ -30,6 +30,8 @@ public interface AppendQuery extends BaseSelectQuery
public String getTargetTable();
+ public List<String> getTargetColumns();
+
public String getRemoteDbPath();
public String getRemoteDbType();
diff --git a/src/test/java/com/healthmarketscience/jackcess/query/QueryTest.java b/src/test/java/com/healthmarketscience/jackcess/query/QueryTest.java
index 3af50ec..b9a284c 100644
--- a/src/test/java/com/healthmarketscience/jackcess/query/QueryTest.java
+++ b/src/test/java/com/healthmarketscience/jackcess/query/QueryTest.java
@@ -206,7 +206,7 @@ public class QueryTest extends TestCase
"WHERE (((Table1.col1)>\"blah\"));"));
expectedQueries.put(
"AppendQuery",multiline(
- "INSERT INTO Table3",
+ "INSERT INTO Table3 (col2, col2, col3)",
"SELECT [Table1].[col2], [Table2].[col2], [Table2].[col3]",
"FROM Table3, Table1 INNER JOIN Table2 ON [Table1].[col1]=[Table2].[col1];"));
expectedQueries.put(
@@ -257,6 +257,27 @@ public class QueryTest extends TestCase
}
}
+ public void testAppendQuery() throws Exception
+ {
+ AppendQuery query = (AppendQuery)newQuery(
+ Query.Type.APPEND, null, "Table2",
+ // newRow(TABLE_ATTRIBUTE, null, "Table1", null),
+ newRow(COLUMN_ATTRIBUTE, "54", APPEND_VALUE_FLAG, null, null),
+ newRow(COLUMN_ATTRIBUTE, "'hello'", APPEND_VALUE_FLAG, null, null));
+
+ assertEquals(multiline("INSERT INTO Table2",
+ "VALUES (54, 'hello');"), query.toSQLString());
+
+ query = (AppendQuery)newQuery(
+ Query.Type.APPEND, null, "Table2",
+ // newRow(TABLE_ATTRIBUTE, null, "Table1", null),
+ newRow(COLUMN_ATTRIBUTE, "54", APPEND_VALUE_FLAG, null, "ID"),
+ newRow(COLUMN_ATTRIBUTE, "'hello'", APPEND_VALUE_FLAG, null, "Field 3"));
+
+ assertEquals(multiline("INSERT INTO Table2 (ID, [Field 3])",
+ "VALUES (54, 'hello');"), query.toSQLString());
+ }
+
private void doTestColumns(SelectQuery query) throws Exception
{
addRows(query, newRow(COLUMN_ATTRIBUTE, "Table1.id", null, null));