This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 7871efd6e9d Normalize sequence values to machine format before
templating (#37465)
7871efd6e9d is described below
commit 7871efd6e9d906690c0520d4c61e88d6f729d46f
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Dec 23 12:05:03 2025 +0800
Normalize sequence values to machine format before templating (#37465)
* Normalize sequence values to machine format before templating
* Normalize sequence values to machine format before templating
* Normalize sequence values to machine format before templating
* Normalize sequence values to machine format before templating
* Normalize sequence values to machine format before templating
* Normalize sequence values to machine format before templating
* Normalize sequence values to machine format before templating
---
RELEASE-NOTES.md | 1 +
.../column/PostgreSQLColumnPropertiesAppender.java | 41 +++++++++++
.../template/component/table/10_plus/create.ftl | 12 ++--
.../template/component/table/11_plus/create.ftl | 12 ++--
.../template/component/table/12_plus/create.ftl | 12 ++--
.../template/component/table/default/create.ftl | 12 ++--
.../PostgreSQLColumnPropertiesAppenderTest.java | 83 ++++++++++++++++++++++
.../PostgreSQLPipelineFreemarkerManagerTest.java | 46 +++++++++++-
8 files changed, 192 insertions(+), 27 deletions(-)
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index 83b6121aa0d..50f97b80f92 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -113,6 +113,7 @@
1. Pipeline: Fix MySQL JDBC query properties extension when SSL is required on
server - [#36581](https://github.com/apache/shardingsphere/pull/36581)
1. Pipeline: Fix migration might skip some records on big table after job
restarting - [#36878](https://github.com/apache/shardingsphere/pull/36878)
1. Pipeline: Fix unsigned number column value type inconsistent in inventory
and incremental - [#37280](https://github.com/apache/shardingsphere/pull/37280)
+1. Pipeline: Fix PostgreSQL migration create table SQL generation failure
caused by locale-formatted sequence values -
[#28360](https://github.com/apache/shardingsphere/issues/28360)
### Change Logs
diff --git
a/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/ddl/column/PostgreSQLColumnPropertiesAppender.java
b/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/ddl/column/PostgreSQLColumnPropertiesAppender.java
index 2b7e74688f6..04f02eed819 100644
---
a/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/ddl/column/PostgreSQLColumnPropertiesAppender.java
+++
b/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/ddl/column/PostgreSQLColumnPropertiesAppender.java
@@ -50,6 +50,10 @@ public final class PostgreSQLColumnPropertiesAppender {
private static final Pattern BRACKETS_PATTERN =
Pattern.compile("(\\(\\d+\\))");
+ private static final Pattern SIGNED_NUMBER_WITH_GROUPING_PATTERN =
Pattern.compile("^([+-])?\\s*[0-9][0-9,\\s]*$");
+
+ private static final Pattern NON_DIGIT_PATTERN = Pattern.compile("[^0-9]");
+
private static final String ATT_OPTION_SPLIT = "=";
private final PostgreSQLDDLTemplateExecutor templateExecutor;
@@ -138,6 +142,7 @@ public final class PostgreSQLColumnPropertiesAppender {
}
private void columnFormatter(final Map<String, Object> column, final
Collection<String> editTypes) throws SQLException {
+ normalizeSequenceValues(column);
handlePrimaryColumn(column);
fetchLengthPrecision(column);
formatColumnVariables(column);
@@ -147,6 +152,42 @@ public final class PostgreSQLColumnPropertiesAppender {
column.put("cltype", parseTypeName(column.get("cltype").toString()));
}
+ private void normalizeSequenceValues(final Map<String, Object> column) {
+ normalizeSequenceValue(column, "seqincrement");
+ normalizeSequenceValue(column, "seqstart");
+ normalizeSequenceValue(column, "seqmin");
+ normalizeSequenceValue(column, "seqmax");
+ normalizeSequenceValue(column, "seqcache");
+ }
+
+ private void normalizeSequenceValue(final Map<String, Object> column,
final String key) {
+ if (!column.containsKey(key)) {
+ return;
+ }
+ Object value = column.get(key);
+ if (null == value || value instanceof Number) {
+ return;
+ }
+ String rawValue = value.toString().trim();
+ Matcher matcher =
SIGNED_NUMBER_WITH_GROUPING_PATTERN.matcher(rawValue);
+ if (!matcher.matches()) {
+ column.remove(key);
+ return;
+ }
+ String digits = NON_DIGIT_PATTERN.matcher(rawValue).replaceAll("");
+ if (digits.isEmpty()) {
+ column.remove(key);
+ return;
+ }
+ String sign = null == matcher.group(1) ? "" : matcher.group(1);
+ String sanitized = sign + digits;
+ try {
+ column.put(key, Long.parseLong(sanitized));
+ } catch (final NumberFormatException ignored) {
+ column.remove(key);
+ }
+ }
+
private void handlePrimaryColumn(final Map<String, Object> column) {
if (null == column.get("attnum") || null == column.get("indkey")) {
return;
diff --git
a/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/10_plus/create.ftl
b/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/10_plus/create.ftl
index a4379054c22..19986f86b9f 100644
---
a/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/10_plus/create.ftl
+++
b/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/10_plus/create.ftl
@@ -40,12 +40,12 @@ INCLUDING COMMENTS</#if><#if columns?size gt 0 >,
<#if c.attidentity?? && c.attidentity == 'a' > GENERATED ALWAYS AS
IDENTITY<#elseif c.attidentity?? && c.attidentity == 'd' > GENERATED BY DEFAULT
AS IDENTITY</#if>
<#if c.seqincrement?? || c.seqcycle!false || c.seqincrement?? || c.seqstart??
|| c.seqmin?? || c.seqmax?? || c.seqcache?? > ( </#if>
<#if c.seqcycle!false >
-CYCLE </#if><#if c.seqincrement?? && c.seqincrement?number gt -1 >
-INCREMENT ${c.seqincrement} </#if><#if c.seqstart?? && c.seqstart?number gt -1>
-START ${c.seqstart} </#if><#if c.seqmin?? && c.seqmin?number gt -1>
-MINVALUE ${c.seqmin} </#if><#if c.seqmax?? && c.seqmax?number gt -1>
-MAXVALUE ${c.seqmax} </#if><#if c.seqcache?? && c.seqcache?number gt -1>
-CACHE ${c.seqcache} </#if>
+CYCLE </#if><#if c.seqincrement?? && c.seqincrement?c?number gt -1 >
+INCREMENT ${c.seqincrement?c} </#if><#if c.seqstart?? && c.seqstart?c?number
gt -1>
+START ${c.seqstart?c} </#if><#if c.seqmin?? && c.seqmin?c?number gt -1>
+MINVALUE ${c.seqmin?c} </#if><#if c.seqmax?? && c.seqmax?c?number gt -1>
+MAXVALUE ${c.seqmax?c} </#if><#if c.seqcache?? && c.seqcache?c?number gt -1>
+CACHE ${c.seqcache?c} </#if>
<#if c.seqincrement?? || c.seqcycle!false || c.seqincrement?? || c.seqstart??
|| c.seqmin?? || c.seqmax?? || c.seqcache?? >)</#if>
</#if>
<#if c?counter lt columns?size>,
diff --git
a/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/11_plus/create.ftl
b/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/11_plus/create.ftl
index 0aaca4ab6c3..d68c8f09963 100644
---
a/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/11_plus/create.ftl
+++
b/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/11_plus/create.ftl
@@ -40,12 +40,12 @@ INCLUDING COMMENTS</#if><#if columns?size gt 0 >,
<#if c.attidentity?? && c.attidentity == 'a' > GENERATED ALWAYS AS
IDENTITY<#elseif c.attidentity?? && c.attidentity == 'd' > GENERATED BY DEFAULT
AS IDENTITY</#if>
<#if c.seqincrement?? || c.seqcycle!false || c.seqincrement?? || c.seqstart??
|| c.seqmin?? || c.seqmax?? || c.seqcache?? > ( </#if>
<#if c.seqcycle!false >
-CYCLE </#if><#if c.seqincrement?? && c.seqincrement?number gt -1 >
-INCREMENT ${c.seqincrement} </#if><#if c.seqstart?? && c.seqstart?number gt -1>
-START ${c.seqstart} </#if><#if c.seqmin?? && c.seqmin?number gt -1>
-MINVALUE ${c.seqmin} </#if><#if c.seqmax?? && c.seqmax?number gt -1>
-MAXVALUE ${c.seqmax} </#if><#if c.seqcache?? && c.seqcache?number gt -1>
-CACHE ${c.seqcache} </#if>
+CYCLE </#if><#if c.seqincrement?? && c.seqincrement?c?number gt -1 >
+INCREMENT ${c.seqincrement?c} </#if><#if c.seqstart?? && c.seqstart?c?number
gt -1>
+START ${c.seqstart?c} </#if><#if c.seqmin?? && c.seqmin?c?number gt -1>
+MINVALUE ${c.seqmin?c} </#if><#if c.seqmax?? && c.seqmax?c?number gt -1>
+MAXVALUE ${c.seqmax?c} </#if><#if c.seqcache?? && c.seqcache?c?number gt -1>
+CACHE ${c.seqcache?c} </#if>
<#if c.seqincrement?? || c.seqcycle!false || c.seqincrement?? || c.seqstart??
|| c.seqmin?? || c.seqmax?? || c.seqcache?? >)</#if>
</#if>
<#if c?counter lt columns?size>,
diff --git
a/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/12_plus/create.ftl
b/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/12_plus/create.ftl
index b2d9ee95829..c7f8ef7842b 100644
---
a/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/12_plus/create.ftl
+++
b/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/12_plus/create.ftl
@@ -44,12 +44,12 @@ LIKE ${like_relation }<#if like_default_value!false >
<#if c.attidentity?? && c.attidentity == 'a' > GENERATED ALWAYS AS
IDENTITY<#elseif c.attidentity?? && c.attidentity == 'd' > GENERATED BY DEFAULT
AS IDENTITY</#if>
<#if c.seqincrement?? || c.seqcycle!false || c.seqincrement?? || c.seqstart??
|| c.seqmin?? || c.seqmax?? || c.seqcache?? > ( </#if>
<#if c.seqcycle!false >
-CYCLE </#if><#if c.seqincrement?? && c.seqincrement?number gt -1 >
-INCREMENT ${c.seqincrement} </#if><#if c.seqstart?? && c.seqstart?number gt -1>
-START ${c.seqstart} </#if><#if c.seqmin?? && c.seqmin?number gt -1>
-MINVALUE ${c.seqmin} </#if><#if c.seqmax?? && c.seqmax?number gt -1>
-MAXVALUE ${c.seqmax} </#if><#if c.seqcache?? && c.seqcache?number gt -1>
-CACHE ${c.seqcache} </#if>
+CYCLE </#if><#if c.seqincrement?? && c.seqincrement?c?number gt -1 >
+INCREMENT ${c.seqincrement?c} </#if><#if c.seqstart?? && c.seqstart?c?number
gt -1>
+START ${c.seqstart?c} </#if><#if c.seqmin?? && c.seqmin?c?number gt -1>
+MINVALUE ${c.seqmin?c} </#if><#if c.seqmax?? && c.seqmax?c?number gt -1>
+MAXVALUE ${c.seqmax?c} </#if><#if c.seqcache?? && c.seqcache?c?number gt -1>
+CACHE ${c.seqcache?c} </#if>
<#if c.seqincrement?? || c.seqcycle!false || c.seqincrement?? || c.seqstart??
|| c.seqmin?? || c.seqmax?? || c.seqcache?? >)</#if>
</#if>
<#if c.colconstype?? && c.colconstype == 'g' && c.genexpr?? && c.genexpr != ''
> GENERATED ALWAYS AS (${c.genexpr}) STORED</#if>
diff --git
a/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/default/create.ftl
b/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/default/create.ftl
index 279a104145f..9573de5dcf3 100644
---
a/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/default/create.ftl
+++
b/kernel/data-pipeline/dialect/postgresql/src/main/resources/template/component/table/default/create.ftl
@@ -40,12 +40,12 @@ INCLUDING COMMENTS</#if><#if columns?size gt 0 >,
<#if c.attidentity?? && c.attidentity == 'a' > GENERATED ALWAYS AS
IDENTITY<#elseif c.attidentity?? && c.attidentity == 'd' > GENERATED BY DEFAULT
AS IDENTITY</#if>
<#if c.seqincrement?? || c.seqcycle!false || c.seqincrement?? || c.seqstart??
|| c.seqmin?? || c.seqmax?? || c.seqcache?? > ( </#if>
<#if c.seqcycle!false >
-CYCLE </#if><#if c.seqincrement?? && c.seqincrement?number gt -1 >
-INCREMENT ${c.seqincrement} </#if><#if c.seqstart?? && c.seqstart?number gt -1>
-START ${c.seqstart} </#if><#if c.seqmin?? && c.seqmin?number gt -1>
-MINVALUE ${c.seqmin} </#if><#if c.seqmax?? && c.seqmax?number gt -1>
-MAXVALUE ${c.seqmax} </#if><#if c.seqcache?? && c.seqcache?number gt -1>
-CACHE ${c.seqcache} </#if>
+CYCLE </#if><#if c.seqincrement?? && c.seqincrement?c?number gt -1 >
+INCREMENT ${c.seqincrement?c} </#if><#if c.seqstart?? && c.seqstart?c?number
gt -1>
+START ${c.seqstart?c} </#if><#if c.seqmin?? && c.seqmin?c?number gt -1>
+MINVALUE ${c.seqmin?c} </#if><#if c.seqmax?? && c.seqmax?c?number gt -1>
+MAXVALUE ${c.seqmax?c} </#if><#if c.seqcache?? && c.seqcache?c?number gt -1>
+CACHE ${c.seqcache?c} </#if>
<#if c.seqincrement?? || c.seqcycle!false || c.seqincrement?? || c.seqstart??
|| c.seqmin?? || c.seqmax?? || c.seqcache?? >)</#if>
</#if>
<#if c?counter lt columns?size>,
diff --git
a/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/ddl/column/PostgreSQLColumnPropertiesAppenderTest.java
b/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/ddl/column/PostgreSQLColumnPropertiesAppenderTest.java
index aee65e94a14..273a3d83d90 100644
---
a/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/ddl/column/PostgreSQLColumnPropertiesAppenderTest.java
+++
b/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/ddl/column/PostgreSQLColumnPropertiesAppenderTest.java
@@ -237,6 +237,79 @@ class PostgreSQLColumnPropertiesAppenderTest {
assertThat(getSingleColumn(context).get("inheritedfromtable"),
is("parent_table"));
}
+ @Test
+ void assertNormalizeSequenceValuesRemovesGroupingSeparator() {
+ Map<String, Object> column = createTextColumnWithName("id");
+ column.put("attidentity", "a");
+ column.put("colconstype", "i");
+ column.put("seqincrement", "1");
+ column.put("seqstart", "1");
+ column.put("seqmin", "1");
+ column.put("seqmax", "2,147,483,647");
+ column.put("seqcache", "1");
+ Map<String, Object> context = new LinkedHashMap<>();
+ when(templateExecutor.executeByTemplate(context,
"component/table/%s/get_columns_for_table.ftl")).thenReturn(Collections.emptyList());
+ when(templateExecutor.executeByTemplate(context,
"component/columns/%s/properties.ftl")).thenReturn(Collections.singletonList(column));
+ when(templateExecutor.executeByTemplate(anyMap(),
eq("component/columns/%s/edit_mode_types_multi.ftl"))).thenReturn(Collections.emptyList());
+ appender.append(context);
+ Map<String, Object> singleColumn = getSingleColumn(context);
+ assertThat(singleColumn.get("seqincrement"), is(1L));
+ assertThat(singleColumn.get("seqstart"), is(1L));
+ assertThat(singleColumn.get("seqmin"), is(1L));
+ assertThat(singleColumn.get("seqmax"), is(2147483647L));
+ assertThat(singleColumn.get("seqcache"), is(1L));
+ }
+
+ @Test
+ void assertNormalizeSequenceValuesKeepsNumberValues() {
+ Map<String, Object> column = createTextColumnWithName("id");
+ column.put("attidentity", "a");
+ column.put("colconstype", "i");
+ column.put("seqincrement", 1L);
+ Map<String, Object> singleColumn = appendWithSingleColumn(column);
+ assertThat(singleColumn.get("seqincrement"), is(1L));
+ }
+
+ @Test
+ void assertNormalizeSequenceValuesIgnoresNullValue() {
+ Map<String, Object> column = createTextColumnWithName("id");
+ column.put("attidentity", "a");
+ column.put("colconstype", "i");
+ column.put("seqmax", null);
+ Map<String, Object> singleColumn = appendWithSingleColumn(column);
+ assertThat(singleColumn.get("seqmax"), nullValue());
+ }
+
+ @Test
+ void assertNormalizeSequenceValuesRemovesInvalidFormat() {
+ Map<String, Object> column = createTextColumnWithName("id");
+ column.put("attidentity", "a");
+ column.put("colconstype", "i");
+ column.put("seqmax", ", ,");
+ Map<String, Object> singleColumn = appendWithSingleColumn(column);
+ assertFalse(singleColumn.containsKey("seqmax"));
+ }
+
+ @Test
+ void assertNormalizeSequenceValuesRemovesMultipleSigns() {
+ Map<String, Object> column = createTextColumnWithName("id");
+ column.put("attidentity", "a");
+ column.put("colconstype", "i");
+ column.put("seqmax", "+-123");
+ Map<String, Object> singleColumn = appendWithSingleColumn(column);
+ assertFalse(singleColumn.containsKey("seqmax"));
+ }
+
+ @Test
+ void assertNormalizeSequenceValuesRemovesOverflowValue() {
+ Map<String, Object> column = createTextColumnWithName("id");
+ column.put("attidentity", "a");
+ column.put("colconstype", "i");
+ column.put("seqmax", "999999999999999999999999");
+ Map<String, Object> singleColumn = appendWithSingleColumn(column);
+ assertFalse(singleColumn.containsKey("seqmax"));
+ }
+
@Test
void assertCheckTypmodInterval() {
Map<String, Object> context = new LinkedHashMap<>();
@@ -857,6 +930,16 @@ class PostgreSQLColumnPropertiesAppenderTest {
return result;
}
+ private Map<String, Object> appendWithSingleColumn(final Map<String,
Object> column) {
+ when(templateExecutor.executeByTemplate(anyMap(),
eq("component/table/%s/get_columns_for_table.ftl"))).thenReturn(Collections.emptyList());
+ when(templateExecutor.executeByTemplate(anyMap(),
eq("component/columns/%s/properties.ftl"))).thenReturn(Collections.singletonList(column));
+ when(templateExecutor.executeByTemplate(anyMap(),
eq("component/columns/%s/edit_mode_types_multi.ftl"))).thenReturn(Collections.emptyList());
+ Map<String, Object> context = new LinkedHashMap<>();
+
+ appender.append(context);
+ return getSingleColumn(context);
+ }
+
private Map<String, Object> getSingleColumn(final Map<String, Object>
context) {
@SuppressWarnings("unchecked")
Collection<Map<String, Object>> columns = (Collection<Map<String,
Object>>) context.get("columns");
diff --git
a/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/template/PostgreSQLPipelineFreemarkerManagerTest.java
b/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/template/PostgreSQLPipelineFreemarkerManagerTest.java
index 742e0a41ddc..fa82ae69057 100644
---
a/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/template/PostgreSQLPipelineFreemarkerManagerTest.java
+++
b/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/template/PostgreSQLPipelineFreemarkerManagerTest.java
@@ -21,14 +21,18 @@ import org.junit.jupiter.api.Test;
import java.util.Collections;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.regex.Pattern;
-import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
class PostgreSQLPipelineFreemarkerManagerTest {
+ private static final Pattern PATTERN = Pattern.compile("\\s+");
+
@Test
void assertGetSQLByDefaultVersion() {
String actual =
PostgreSQLPipelineFreemarkerManager.getSQLByVersion(Collections.singletonMap("databaseName",
"foo_db"), "component/table/%s/get_database_id.ftl", 10, 0);
@@ -42,6 +46,42 @@ class PostgreSQLPipelineFreemarkerManagerTest {
dataModel.put("tid", 1);
dataModel.put("tname", "foo_tb l");
String actual =
PostgreSQLPipelineFreemarkerManager.getSQLByVersion(dataModel,
"component/table/%s/get_columns_for_table.ftl", 10, 0);
- assertNotNull(actual);
+ assertThat(actual, notNullValue());
+ }
+
+ @Test
+ void assertCreateTableTemplateRendersNormalizedSequenceNumbers() {
+ Map<String, Object> column = new LinkedHashMap<>(16, 1F);
+ column.put("name", "id");
+ column.put("cltype", "int4");
+ column.put("displaytypname", "integer");
+ column.put("attnotnull", true);
+ column.put("attidentity", "a");
+ column.put("colconstype", "i");
+ column.put("seqincrement", 1L);
+ column.put("seqstart", 1L);
+ column.put("seqmin", 1L);
+ column.put("seqmax", 2147483647L);
+ column.put("seqcache", 1L);
+ column.put("seqcycle", false);
+ Map<String, Object> dataModel = new LinkedHashMap<>(8, 1F);
+ dataModel.put("schema", "public");
+ dataModel.put("name", "t_order");
+ dataModel.put("columns", Collections.singletonList(column));
+ dataModel.put("primary_key", Collections.emptyList());
+ dataModel.put("unique_constraint", Collections.emptyList());
+ dataModel.put("foreign_key", Collections.emptyList());
+ dataModel.put("check_constraint", Collections.emptyList());
+ dataModel.put("exclude_constraint", Collections.emptyList());
+ dataModel.put("coll_inherits", Collections.emptyList());
+ dataModel.put("autovacuum_enabled", "x");
+ dataModel.put("toast_autovacuum_enabled", "x");
+ dataModel.put("autovacuum_custom", false);
+ dataModel.put("toast_autovacuum", false);
+ dataModel.put("add_vacuum_settings_in_sql", false);
+ String sql =
PostgreSQLPipelineFreemarkerManager.getSQLByVersion(dataModel,
"component/table/%s/create.ftl", 12, 0);
+ String compactSql = PATTERN.matcher(sql).replaceAll("");
+ String expectedSql =
"CREATETABLEIFNOTEXISTSpublic.t_order(idintegerNOTNULLGENERATEDALWAYSASIDENTITY(INCREMENT1START1MINVALUE1MAXVALUE2147483647CACHE1))";
+ assertThat(compactSql, is(expectedSql));
}
}