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));
     }
 }

Reply via email to