Skip to content

Commit 54f4ace

Browse files
authored
Fixed Syntax of Inserts for Sybase (#25)
1 parent e243860 commit 54f4ace

5 files changed

Lines changed: 70 additions & 4 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ A Java-Library to build SQL-Statements
2222
<dependency>
2323
<groupId>de.jaggl.sqlbuilder</groupId>
2424
<artifactId>sqlbuilder-core</artifactId>
25-
<version>2.6.8</version>
25+
<version>2.6.9</version>
2626
</dependency>
2727
```
2828

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
<groupId>de.jaggl.sqlbuilder</groupId>
55
<artifactId>sqlbuilder-core</artifactId>
6-
<version>2.6.8</version>
6+
<version>2.6.9</version>
77

88
<packaging>jar</packaging>
99

src/main/java/de/jaggl/sqlbuilder/dialect/SybaseDialect.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
11
package de.jaggl.sqlbuilder.dialect;
22

3+
import static de.jaggl.sqlbuilder.utils.BuilderUtils.columnApostrophe;
4+
5+
import java.util.Map;
6+
7+
import de.jaggl.sqlbuilder.columns.Column;
38
/**
49
* @author Martin Schumacher
510
*
611
* @since 2.0.0
712
*/
813
import de.jaggl.sqlbuilder.domain.BuildingContext;
914
import de.jaggl.sqlbuilder.domain.Limit;
15+
import de.jaggl.sqlbuilder.domain.Valuable;
16+
import de.jaggl.sqlbuilder.domain.ValuableColumn;
1017
import de.jaggl.sqlbuilder.queries.Delete;
18+
import de.jaggl.sqlbuilder.queries.Insert;
1119
import de.jaggl.sqlbuilder.queries.Select;
1220
import de.jaggl.sqlbuilder.utils.Indentation;
1321

@@ -37,6 +45,55 @@ public String getName()
3745
return "Sybase";
3846
}
3947

48+
@Override
49+
protected void appendInsertStatement(StringBuilder builder, Insert insert, BuildingContext context, Indentation indentation)
50+
{
51+
builder.append(context.getDialect().getLabels().getInsertInto()).append(" ").append(insert.getTable().getFullName(context));
52+
builder.append(indentation.getDelimiter());
53+
appendInsertColumns(builder, insert.getValues(), context, indentation.indent());
54+
appendInsertValues(builder, insert.getValues(), context, indentation.indent());
55+
}
56+
57+
protected void appendInsertColumns(StringBuilder builder, Map<Column, Valuable> values, BuildingContext context, Indentation indentation)
58+
{
59+
var counter = 0;
60+
builder.append(indentation.getIndent()).append("(");
61+
for (var entry : values.entrySet())
62+
{
63+
var column = entry.getKey();
64+
builder.append(columnApostrophe(column.getName(), context));
65+
if (++counter < values.size())
66+
{
67+
builder.append(", ");
68+
}
69+
}
70+
builder.append(")").append(indentation.getDelimiter());
71+
}
72+
73+
protected void appendInsertValues(StringBuilder builder, Map<Column, Valuable> values, BuildingContext context, Indentation indentation)
74+
{
75+
var counter = 0;
76+
builder.append("VALUES").append(indentation.getDelimiter());
77+
builder.append(indentation.getIndent()).append("(");
78+
for (var entry : values.entrySet())
79+
{
80+
var value = entry.getValue();
81+
if (ValuableColumn.class.isAssignableFrom(value.getClass()))
82+
{
83+
builder.append(columnApostrophe(((ValuableColumn) value).getName(), context));
84+
}
85+
else
86+
{
87+
builder.append(value.getValue(context, indentation));
88+
}
89+
if (++counter < values.size())
90+
{
91+
builder.append(", ");
92+
}
93+
}
94+
builder.append(")");
95+
}
96+
4097
@Override
4198
protected void appendSelectStatement(StringBuilder builder, Select select, BuildingContext context, Indentation indentation)
4299
{

src/main/java/de/jaggl/sqlbuilder/domain/ValuableColumn.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,9 @@ public String getValue(BuildingContext context, Indentation indentation)
2121
{
2222
return column.getFullNameOrAlias(context);
2323
}
24+
25+
public String getName()
26+
{
27+
return column.getName();
28+
}
2429
}

src/test/java/de/jaggl/sqlbuilder/queries/InsertTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,12 @@ void testBuildInsert()
7272
+ " `persons`.`numbers` = :numbers,\n" //
7373
+ " `persons`.`lastname` = 'Schumacher'");
7474

75-
assertThat(insert.build(MYSQL)).isEqualTo(insert.build(SYBASE));
76-
assertThat(insert.build(MYSQL, enabled())).isEqualTo(insert.build(SYBASE, enabled()));
75+
assertThat(insert.build(SYBASE))
76+
.isEqualTo("INSERT INTO `persons` (`nickname`, `forename`, `birthday`, `deathday`, `lastUpdate`, `count`, `age`, `size`, `numbers`, `lastname`) VALUES (`forename`, 'Martin', NOW(), '2020-04-24', '2020-04-24 13:53:00.000000', 5, 38, 175.89, :numbers, 'Schumacher')");
77+
assertThat(insert.build(SYBASE, enabled())).isEqualTo("INSERT INTO `persons`\n" //
78+
+ " (`nickname`, `forename`, `birthday`, `deathday`, `lastUpdate`, `count`, `age`, `size`, `numbers`, `lastname`)\n" //
79+
+ "VALUES\n" //
80+
+ " (`forename`, 'Martin', NOW(), '2020-04-24', '2020-04-24 13:53:00.000000', 5, 38, 175.89, :numbers, 'Schumacher')");
7781

7882
assertThat(Insert.copy(insert).build(MYSQL)).isEqualTo(insert.build(MYSQL));
7983
}

0 commit comments

Comments
 (0)