Fixed template queries for PG, MySQL and Snowflake (#6698)
* Fixed template queries * Fixed tests
This commit is contained in:
parent
4b5ca10e0d
commit
8be0580c77
|
|
@ -763,7 +763,12 @@ public class MySqlPlugin extends BasePlugin {
|
|||
|
||||
columnNames.add(name);
|
||||
columnValues.add(value);
|
||||
setFragments.append("\n ").append(name).append(" = ").append(value);
|
||||
setFragments.append("\n ").append(name).append(" = ").append(value).append(",");
|
||||
}
|
||||
|
||||
// Delete the last comma
|
||||
if (setFragments.length() > 0) {
|
||||
setFragments.deleteCharAt(setFragments.length() - 1);
|
||||
}
|
||||
|
||||
final String tableName = table.getName();
|
||||
|
|
@ -779,8 +784,6 @@ public class MySqlPlugin extends BasePlugin {
|
|||
+ "\n WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may delete everything in the table!", null)
|
||||
));
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -643,10 +643,10 @@ public class MySqlPluginTest {
|
|||
new DatasourceStructure.Template("INSERT", "INSERT INTO possessions (id, title, user_id, username, email)\n" +
|
||||
" VALUES (1, '', 1, '', '');", null),
|
||||
new DatasourceStructure.Template("UPDATE", "UPDATE possessions SET\n" +
|
||||
" id = 1\n" +
|
||||
" title = ''\n" +
|
||||
" user_id = 1\n" +
|
||||
" username = ''\n" +
|
||||
" id = 1,\n" +
|
||||
" title = '',\n" +
|
||||
" user_id = 1,\n" +
|
||||
" username = '',\n" +
|
||||
" email = ''\n" +
|
||||
" WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may update every row in the table!", null),
|
||||
new DatasourceStructure.Template("DELETE", "DELETE FROM possessions\n" +
|
||||
|
|
@ -686,15 +686,15 @@ public class MySqlPluginTest {
|
|||
new DatasourceStructure.Template("INSERT", "INSERT INTO users (id, username, password, email, spouse_dob, dob, yob, time1, created_on, updated_on)\n" +
|
||||
" VALUES (1, '', '', '', '2019-07-01', '2019-07-01', '', '', '2019-07-01 10:00:00', '2019-07-01 10:00:00');", null),
|
||||
new DatasourceStructure.Template("UPDATE", "UPDATE users SET\n" +
|
||||
" id = 1\n" +
|
||||
" username = ''\n" +
|
||||
" password = ''\n" +
|
||||
" email = ''\n" +
|
||||
" spouse_dob = '2019-07-01'\n" +
|
||||
" dob = '2019-07-01'\n" +
|
||||
" yob = ''\n" +
|
||||
" time1 = ''\n" +
|
||||
" created_on = '2019-07-01 10:00:00'\n" +
|
||||
" id = 1,\n" +
|
||||
" username = '',\n" +
|
||||
" password = '',\n" +
|
||||
" email = '',\n" +
|
||||
" spouse_dob = '2019-07-01',\n" +
|
||||
" dob = '2019-07-01',\n" +
|
||||
" yob = '',\n" +
|
||||
" time1 = '',\n" +
|
||||
" created_on = '2019-07-01 10:00:00',\n" +
|
||||
" updated_on = '2019-07-01 10:00:00'\n" +
|
||||
" WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may update every row in the table!", null),
|
||||
new DatasourceStructure.Template("DELETE", "DELETE FROM users\n" +
|
||||
|
|
|
|||
|
|
@ -726,6 +726,8 @@ public class PostgresPlugin extends BasePlugin {
|
|||
value = "''";
|
||||
} else if (type.startsWith("int")) {
|
||||
value = "1";
|
||||
} else if (type.startsWith("float") || type.startsWith("double")) {
|
||||
value = "1.0";
|
||||
} else if ("date".equals(type)) {
|
||||
value = "'2019-07-01'";
|
||||
} else if ("time".equals(type)) {
|
||||
|
|
@ -746,7 +748,12 @@ public class PostgresPlugin extends BasePlugin {
|
|||
|
||||
columnNames.add("\"" + name + "\"");
|
||||
columnValues.add(value);
|
||||
setFragments.append("\n \"").append(name).append("\" = ").append(value);
|
||||
setFragments.append("\n \"").append(name).append("\" = ").append(value).append(",");
|
||||
}
|
||||
|
||||
// Delete the last comma
|
||||
if (setFragments.length() > 0) {
|
||||
setFragments.deleteCharAt(setFragments.length() - 1);
|
||||
}
|
||||
|
||||
final String quotedTableName = table.getName().replaceFirst("\\.(\\w+)", ".\"$1\"");
|
||||
|
|
|
|||
|
|
@ -118,7 +118,8 @@ public class PostgresPluginTest {
|
|||
" created_on_tz TIMESTAMP WITH TIME ZONE ,\n" +
|
||||
" interval1 INTERVAL HOUR ,\n" +
|
||||
" numbers INTEGER[3] ,\n" +
|
||||
" texts VARCHAR[2] \n" +
|
||||
" texts VARCHAR[2] ,\n" +
|
||||
" rating FLOAT4 \n" +
|
||||
")");
|
||||
|
||||
statement.execute("CREATE TABLE possessions (\n" +
|
||||
|
|
@ -150,7 +151,7 @@ public class PostgresPluginTest {
|
|||
" '18:32:45', '04:05:06 PST'," +
|
||||
" TIMESTAMP '2018-11-30 20:45:15', TIMESTAMP WITH TIME ZONE '2018-11-30 20:45:15 CET'," +
|
||||
" '1.2 years 3 months 2 hours'," +
|
||||
" '{1, 2, 3}', '{\"a\", \"b\"}'" +
|
||||
" '{1, 2, 3}', '{\"a\", \"b\"}', 1.0" +
|
||||
")");
|
||||
}
|
||||
|
||||
|
|
@ -161,7 +162,7 @@ public class PostgresPluginTest {
|
|||
" '15:45:30', '04:05:06 PST'," +
|
||||
" TIMESTAMP '2019-11-30 23:59:59', TIMESTAMP WITH TIME ZONE '2019-11-30 23:59:59 CET'," +
|
||||
" '2 years'," +
|
||||
" '{1, 2, 3}', '{\"a\", \"b\"}'" +
|
||||
" '{1, 2, 3}', '{\"a\", \"b\"}', 2.0" +
|
||||
")");
|
||||
}
|
||||
|
||||
|
|
@ -172,7 +173,7 @@ public class PostgresPluginTest {
|
|||
" '15:45:30', '04:05:06 PST'," +
|
||||
" TIMESTAMP '2021-01-31 23:59:59', TIMESTAMP WITH TIME ZONE '2021-01-31 23:59:59 CET'," +
|
||||
" '0 years'," +
|
||||
" '{1, 2, 3}', '{\"a\", \"b\"}'" +
|
||||
" '{1, 2, 3}', '{\"a\", \"b\"}', 3.0" +
|
||||
")");
|
||||
}
|
||||
|
||||
|
|
@ -332,6 +333,7 @@ public class PostgresPluginTest {
|
|||
"interval1",
|
||||
"numbers",
|
||||
"texts",
|
||||
"rating"
|
||||
},
|
||||
new ObjectMapper()
|
||||
.convertValue(node, LinkedHashMap.class)
|
||||
|
|
@ -422,7 +424,7 @@ public class PostgresPluginTest {
|
|||
new DatasourceStructure.Template("INSERT", "INSERT INTO public.\"possessions\" (\"title\", \"user_id\")\n" +
|
||||
" VALUES ('', 1);", null),
|
||||
new DatasourceStructure.Template("UPDATE", "UPDATE public.\"possessions\" SET\n" +
|
||||
" \"title\" = ''\n" +
|
||||
" \"title\" = '',\n" +
|
||||
" \"user_id\" = 1\n" +
|
||||
" WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may update every row in the table!", null),
|
||||
new DatasourceStructure.Template("DELETE", "DELETE FROM public.\"possessions\"\n" +
|
||||
|
|
@ -449,6 +451,7 @@ public class PostgresPluginTest {
|
|||
new DatasourceStructure.Column("interval1", "interval", null, false),
|
||||
new DatasourceStructure.Column("numbers", "_int4", null, false),
|
||||
new DatasourceStructure.Column("texts", "_varchar", null, false),
|
||||
new DatasourceStructure.Column("rating", "float4", null, false),
|
||||
},
|
||||
usersTable.getColumns().toArray()
|
||||
);
|
||||
|
|
@ -463,21 +466,22 @@ public class PostgresPluginTest {
|
|||
assertArrayEquals(
|
||||
new DatasourceStructure.Template[]{
|
||||
new DatasourceStructure.Template("SELECT", "SELECT * FROM public.\"users\" LIMIT 10;", null),
|
||||
new DatasourceStructure.Template("INSERT", "INSERT INTO public.\"users\" (\"username\", \"password\", \"email\", \"spouse_dob\", \"dob\", \"time1\", \"time_tz\", \"created_on\", \"created_on_tz\", \"interval1\", \"numbers\", \"texts\")\n" +
|
||||
" VALUES ('', '', '', '2019-07-01', '2019-07-01', '18:32:45', '04:05:06 PST', TIMESTAMP '2019-07-01 10:00:00', TIMESTAMP WITH TIME ZONE '2019-07-01 06:30:00 CET', 1, '{1, 2, 3}', '{\"first\", \"second\"}');", null),
|
||||
new DatasourceStructure.Template("INSERT", "INSERT INTO public.\"users\" (\"username\", \"password\", \"email\", \"spouse_dob\", \"dob\", \"time1\", \"time_tz\", \"created_on\", \"created_on_tz\", \"interval1\", \"numbers\", \"texts\", \"rating\")\n" +
|
||||
" VALUES ('', '', '', '2019-07-01', '2019-07-01', '18:32:45', '04:05:06 PST', TIMESTAMP '2019-07-01 10:00:00', TIMESTAMP WITH TIME ZONE '2019-07-01 06:30:00 CET', 1, '{1, 2, 3}', '{\"first\", \"second\"}', 1.0);", null),
|
||||
new DatasourceStructure.Template("UPDATE", "UPDATE public.\"users\" SET\n" +
|
||||
" \"username\" = ''\n" +
|
||||
" \"password\" = ''\n" +
|
||||
" \"email\" = ''\n" +
|
||||
" \"spouse_dob\" = '2019-07-01'\n" +
|
||||
" \"dob\" = '2019-07-01'\n" +
|
||||
" \"time1\" = '18:32:45'\n" +
|
||||
" \"time_tz\" = '04:05:06 PST'\n" +
|
||||
" \"created_on\" = TIMESTAMP '2019-07-01 10:00:00'\n" +
|
||||
" \"created_on_tz\" = TIMESTAMP WITH TIME ZONE '2019-07-01 06:30:00 CET'\n" +
|
||||
" \"interval1\" = 1\n" +
|
||||
" \"numbers\" = '{1, 2, 3}'\n" +
|
||||
" \"texts\" = '{\"first\", \"second\"}'\n" +
|
||||
" \"username\" = '',\n" +
|
||||
" \"password\" = '',\n" +
|
||||
" \"email\" = '',\n" +
|
||||
" \"spouse_dob\" = '2019-07-01',\n" +
|
||||
" \"dob\" = '2019-07-01',\n" +
|
||||
" \"time1\" = '18:32:45',\n" +
|
||||
" \"time_tz\" = '04:05:06 PST',\n" +
|
||||
" \"created_on\" = TIMESTAMP '2019-07-01 10:00:00',\n" +
|
||||
" \"created_on_tz\" = TIMESTAMP WITH TIME ZONE '2019-07-01 06:30:00 CET',\n" +
|
||||
" \"interval1\" = 1,\n" +
|
||||
" \"numbers\" = '{1, 2, 3}',\n" +
|
||||
" \"texts\" = '{\"first\", \"second\"}',\n" +
|
||||
" \"rating\" = 1.0\n" +
|
||||
" WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may update every row in the table!", null),
|
||||
new DatasourceStructure.Template("DELETE", "DELETE FROM public.\"users\"\n" +
|
||||
" WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may delete everything in the table!", null),
|
||||
|
|
@ -550,6 +554,7 @@ public class PostgresPluginTest {
|
|||
assertEquals("2018-11-30T19:45:15Z", node.get("created_on_tz").asText());
|
||||
assertEquals("1 years 5 mons 0 days 2 hours 0 mins 0.0 secs", node.get("interval1").asText());
|
||||
assertTrue(node.get("spouse_dob").isNull());
|
||||
assertEquals(1.0, node.get("rating").asDouble(), 0.0);
|
||||
|
||||
// Check the order of the columns.
|
||||
assertArrayEquals(
|
||||
|
|
@ -567,6 +572,7 @@ public class PostgresPluginTest {
|
|||
"interval1",
|
||||
"numbers",
|
||||
"texts",
|
||||
"rating"
|
||||
},
|
||||
new ObjectMapper()
|
||||
.convertValue(node, LinkedHashMap.class)
|
||||
|
|
@ -639,6 +645,7 @@ public class PostgresPluginTest {
|
|||
"interval1",
|
||||
"numbers",
|
||||
"texts",
|
||||
"rating"
|
||||
},
|
||||
new ObjectMapper()
|
||||
.convertValue(node, LinkedHashMap.class)
|
||||
|
|
@ -721,6 +728,7 @@ public class PostgresPluginTest {
|
|||
"interval1",
|
||||
"numbers",
|
||||
"texts",
|
||||
"rating"
|
||||
},
|
||||
new ObjectMapper()
|
||||
.convertValue(node, LinkedHashMap.class)
|
||||
|
|
|
|||
|
|
@ -88,15 +88,15 @@ public class SqlUtils {
|
|||
case "BOOLEAN":
|
||||
return "true";
|
||||
case "DATE":
|
||||
return "2021-01-01";
|
||||
return "'2021-01-01'";
|
||||
case "TIME":
|
||||
return "00:00:01";
|
||||
return "'00:00:01'";
|
||||
case "DATETIME":
|
||||
case "TIMESTAMP":
|
||||
case "TIMESTAMP_LTZ":
|
||||
case "TIMESTAMP_NTZ":
|
||||
case "TIMESTAMP_TZ":
|
||||
return "2021-01-01 00:00:01";
|
||||
return "'2021-01-01 00:00:01'";
|
||||
case "ARRAY":
|
||||
return "array_construct(1, 2, 3)";
|
||||
case "VARIANT":
|
||||
|
|
@ -142,7 +142,12 @@ public class SqlUtils {
|
|||
|
||||
columnNames.add(name);
|
||||
columnValues.add(value);
|
||||
setFragments.append("\n ").append(name).append(" = ").append(value);
|
||||
setFragments.append("\n ").append(name).append(" = ").append(value).append(",");
|
||||
}
|
||||
|
||||
// Delete the last comma
|
||||
if (setFragments.length() > 0) {
|
||||
setFragments.deleteCharAt(setFragments.length() - 1);
|
||||
}
|
||||
|
||||
final String tableName = table.getSchema() + "." + table.getName();
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user