Skip to content

Commit 6c6d945

Browse files
committed
merge: #4
1 parent aa9c9a2 commit 6c6d945

File tree

120 files changed

+11309
-176
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

120 files changed

+11309
-176
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,5 @@ deploy.sh
4444
/fastmodel-parser/src/test/resources/lsp/FastModelLexer.g4
4545
/fastmodel-parser/gen/lsp/FastModelLexer.java
4646
/fastmodel-parser/src/test/resources/lsp/keyword.txt
47+
/fastmodel-transform/fastmodel-transform-adbmysql/src/main/antlr4/com/aliyun/fastmodel/transform/adbmysql/parser/gen/AdbMysqlLexer.java
48+
/fastmodel-transform/fastmodel-transform-mysql/src/main/antlr4/com/aliyun/fastmodel/transform/mysql/parser/gen/MySqlLexer.java

CHANGELOG

+20
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,26 @@ Core
3434
• 新增Show Statics语句
3535

3636

37+
Transformer
38+
• 新增FML到Sqlite的转换
39+
• 新增FML到Adb Mysql的转换
40+
41+
向下兼容(compatibility)
42+
• 暂无
43+
44+
过期功能(deprecations)
45+
46+
安全漏洞修复(vulnerability)
47+
48+
49+
50+
## 0.5.8
51+
新功能(new features)
52+
Core
53+
• 新增Create ODS TABLE
54+
• 新增Show Statics语句
55+
56+
3757
Transformer
3858
• 新增FML到Sqlite的转换
3959
• 新增FML到Adb Mysql的转换

docs/zh-cn/layer/business_process.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
# 业务过程
22

3+
业务过程是企业在指定的数据域中所执行的业务活动,是数据建模所需要分析的逻辑主体。例如,交易域中可以有加入购物车、下单、支付等业务过程。本文为您介绍如何创建并使用业务过程。
4+
具体描述:[链接](https://help.aliyun.com/document_detail/276956.html?spm=a2c4g.397548.4.1.35e72121xqDgoR&scm=20140722.H_276956._.ID_276956-OR_rec-V_1)
5+
36
业务过程是企业在指定的数据域中所执行的业务活动,是数据建模所需要分析的逻辑主体。例如,交易域中可以有加入购物车、下单、支付等业务过程。本文为您介绍如何创建并使用业务过程。
47
具体描述:[链接](https://help.aliyun.com/document_detail/276956.html?spm=a2c4g.397548.4.1.35e72121xqDgoR&scm=20140722.H_276956._.ID_276956-OR_rec-V_1)

fastmodel-bom/pom.xml

+27-22
Original file line numberDiff line numberDiff line change
@@ -47,129 +47,134 @@
4747
<artifactId>fastmodel-compare</artifactId>
4848
<version>${project.version}</version>
4949
</dependency>
50+
5051
<dependency>
5152
<groupId>com.aliyun.fastmodel</groupId>
5253
<artifactId>fastmodel-parser</artifactId>
5354
<version>${project.version}</version>
5455
</dependency>
56+
5557
<dependency>
5658
<groupId>com.aliyun.fastmodel</groupId>
57-
<artifactId>fastmodel-transform-api</artifactId>
59+
<artifactId>fastmodel-driver-model</artifactId>
5860
<version>${project.version}</version>
5961
</dependency>
62+
6063
<dependency>
6164
<groupId>com.aliyun.fastmodel</groupId>
62-
<artifactId>fastmodel-transform-template</artifactId>
65+
<artifactId>fastmodel-driver-client</artifactId>
6366
<version>${project.version}</version>
6467
</dependency>
68+
6569
<dependency>
6670
<groupId>com.aliyun.fastmodel</groupId>
67-
<artifactId>fastmodel-transform-hive</artifactId>
71+
<artifactId>fastmodel-ide-spi</artifactId>
6872
<version>${project.version}</version>
6973
</dependency>
7074

75+
7176
<dependency>
7277
<groupId>com.aliyun.fastmodel</groupId>
73-
<artifactId>fastmodel-transform-hologres</artifactId>
78+
<artifactId>fastmodel-converter-spi</artifactId>
7479
<version>${project.version}</version>
7580
</dependency>
81+
7682
<dependency>
7783
<groupId>com.aliyun.fastmodel</groupId>
7884
<artifactId>fastmodel-transform-fml</artifactId>
7985
<version>${project.version}</version>
8086
</dependency>
87+
8188
<dependency>
8289
<groupId>com.aliyun.fastmodel</groupId>
8390
<artifactId>fastmodel-transform-plantuml</artifactId>
8491
<version>${project.version}</version>
8592
</dependency>
93+
8694
<dependency>
8795
<groupId>com.aliyun.fastmodel</groupId>
88-
<artifactId>fastmodel-driver-model</artifactId>
96+
<artifactId>fastmodel-transform-zen</artifactId>
8997
<version>${project.version}</version>
9098
</dependency>
9199

92100
<dependency>
93101
<groupId>com.aliyun.fastmodel</groupId>
94-
<artifactId>fastmodel-driver-client</artifactId>
102+
<artifactId>fastmodel-transform-mysql</artifactId>
95103
<version>${project.version}</version>
96104
</dependency>
97105

98106
<dependency>
99107
<groupId>com.aliyun.fastmodel</groupId>
100-
<artifactId>fastmodel-processor</artifactId>
108+
<artifactId>fastmodel-transform-oracle</artifactId>
101109
<version>${project.version}</version>
102110
</dependency>
103111

104112
<dependency>
105113
<groupId>com.aliyun.fastmodel</groupId>
106-
<artifactId>fastmodel-transform-excel</artifactId>
114+
<artifactId>fastmodel-transform-graph</artifactId>
107115
<version>${project.version}</version>
108116
</dependency>
109117

110118
<dependency>
111119
<groupId>com.aliyun.fastmodel</groupId>
112-
<artifactId>fastmodel-converter-spi</artifactId>
120+
<artifactId>fastmodel-transform-clickhouse</artifactId>
113121
<version>${project.version}</version>
114122
</dependency>
115123

116124
<dependency>
117125
<groupId>com.aliyun.fastmodel</groupId>
118-
<artifactId>fastmodel-converter-dqc</artifactId>
126+
<artifactId>fastmodel-transform-adbmysql</artifactId>
119127
<version>${project.version}</version>
120128
</dependency>
121129

122130
<dependency>
123131
<groupId>com.aliyun.fastmodel</groupId>
124-
<artifactId>fastmodel-transform-zen</artifactId>
132+
<artifactId>fastmodel-transform-spark</artifactId>
125133
<version>${project.version}</version>
126134
</dependency>
127135

128136
<dependency>
129137
<groupId>com.aliyun.fastmodel</groupId>
130-
<artifactId>fastmodel-transform-mysql</artifactId>
138+
<artifactId>fastmodel-transform-sqlite</artifactId>
131139
<version>${project.version}</version>
132140
</dependency>
133141

134142
<dependency>
135143
<groupId>com.aliyun.fastmodel</groupId>
136-
<artifactId>fastmodel-transform-oracle</artifactId>
144+
<artifactId>fastmodel-transform-starrocks</artifactId>
137145
<version>${project.version}</version>
138146
</dependency>
139147

140148
<dependency>
141149
<groupId>com.aliyun.fastmodel</groupId>
142-
<artifactId>fastmodel-transform-graph</artifactId>
150+
<artifactId>fastmodel-transform-api</artifactId>
143151
<version>${project.version}</version>
144152
</dependency>
145-
146153
<dependency>
147154
<groupId>com.aliyun.fastmodel</groupId>
148-
<artifactId>fastmodel-transform-clickhouse</artifactId>
155+
<artifactId>fastmodel-transform-template</artifactId>
149156
<version>${project.version}</version>
150157
</dependency>
151158

152159
<dependency>
153160
<groupId>com.aliyun.fastmodel</groupId>
154-
<artifactId>fastmodel-transform-adbmysql</artifactId>
161+
<artifactId>fastmodel-transform-hive</artifactId>
155162
<version>${project.version}</version>
156163
</dependency>
157164

158165
<dependency>
159166
<groupId>com.aliyun.fastmodel</groupId>
160-
<artifactId>fastmodel-transform-spark</artifactId>
167+
<artifactId>fastmodel-transform-hologres</artifactId>
161168
<version>${project.version}</version>
162169
</dependency>
163-
164170
<dependency>
165171
<groupId>com.aliyun.fastmodel</groupId>
166-
<artifactId>fastmodel-transform-sqlite</artifactId>
172+
<artifactId>fastmodel-transform-fml</artifactId>
167173
<version>${project.version}</version>
168174
</dependency>
169-
170175
<dependency>
171176
<groupId>com.aliyun.fastmodel</groupId>
172-
<artifactId>fastmodel-ide-spi</artifactId>
177+
<artifactId>fastmodel-transform-plantuml</artifactId>
173178
<version>${project.version}</version>
174179
</dependency>
175180

fastmodel-compare/src/test/java/com/aliyun/fastmodel/compare/impl/CreateTableCompareNodeTest.java

+5
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@
2828
import com.aliyun.fastmodel.core.tree.QualifiedName;
2929
import com.aliyun.fastmodel.core.tree.datatype.BaseDataType;
3030
import com.aliyun.fastmodel.core.tree.datatype.DataTypeEnums;
31+
import com.aliyun.fastmodel.core.tree.datatype.DataTypeParameter;
32+
import com.aliyun.fastmodel.core.tree.datatype.GenericDataType;
3133
import com.aliyun.fastmodel.core.tree.datatype.NumericParameter;
34+
import com.aliyun.fastmodel.core.tree.datatype.TypeParameter;
3235
import com.aliyun.fastmodel.core.tree.expr.Identifier;
3336
import com.aliyun.fastmodel.core.tree.statement.constants.ColumnPropertyDefaultKey;
3437
import com.aliyun.fastmodel.core.tree.statement.constants.TableDetailType;
@@ -43,6 +46,7 @@
4346
import com.aliyun.fastmodel.core.tree.statement.table.constraint.PrimaryConstraint;
4447
import com.aliyun.fastmodel.core.tree.util.DataTypeUtil;
4548
import com.google.common.collect.ImmutableList;
49+
import com.google.common.collect.Lists;
4650
import org.junit.Test;
4751

4852
import static org.junit.Assert.assertEquals;
@@ -513,6 +517,7 @@ public void testCommentIsNull() {
513517
assertEquals(1, baseStatements.size());
514518
}
515519

520+
516521
private CreateDimTable getCreateDimTable(Comment comment) {
517522
CreateDimTable before = CreateDimTable.builder().tableName(QualifiedName.of("dim_shop")).columns(
518523
ImmutableList.of(ColumnDefinition.builder().dataType(DataTypeUtil.simpleType(DataTypeEnums.BIGINT))

fastmodel-compare/src/test/java/com/aliyun/fastmodel/compare/table/ColumnCompareTest.java

+34
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,19 @@
1616

1717
package com.aliyun.fastmodel.compare.table;
1818

19+
import java.util.ArrayList;
1920
import java.util.List;
2021
import java.util.stream.Collectors;
2122

2223
import com.aliyun.fastmodel.compare.impl.table.ColumnCompare;
2324
import com.aliyun.fastmodel.core.tree.BaseStatement;
2425
import com.aliyun.fastmodel.core.tree.Property;
2526
import com.aliyun.fastmodel.core.tree.QualifiedName;
27+
import com.aliyun.fastmodel.core.tree.datatype.BaseDataType;
2628
import com.aliyun.fastmodel.core.tree.datatype.DataTypeEnums;
29+
import com.aliyun.fastmodel.core.tree.datatype.DataTypeParameter;
30+
import com.aliyun.fastmodel.core.tree.datatype.GenericDataType;
31+
import com.aliyun.fastmodel.core.tree.datatype.TypeParameter;
2732
import com.aliyun.fastmodel.core.tree.expr.Identifier;
2833
import com.aliyun.fastmodel.core.tree.statement.constants.ColumnCategory;
2934
import com.aliyun.fastmodel.core.tree.statement.constants.ColumnPropertyDefaultKey;
@@ -287,6 +292,35 @@ public void testComparePropertiesAfterNull() {
287292
assertEquals(join, "ALTER TABLE dim_shop CHANGE COLUMN c1 c1 BIGINT WITH ('code_table'='')");
288293
}
289294

295+
@Test
296+
public void testCompareWithMultiDataType() {
297+
ArrayList<DataTypeParameter> anInt = Lists.newArrayList(new TypeParameter(DataTypeUtil.simpleType("int", null)));
298+
BaseDataType build = new GenericDataType("array", anInt);
299+
List<ColumnDefinition> leftList = ImmutableList.of(
300+
ColumnDefinition.builder().colName(new Identifier("col1"))
301+
.dataType(build)
302+
.build()
303+
);
304+
BaseDataType build2 = new GenericDataType("ARRAY", anInt);
305+
List<ColumnDefinition> rightList = ImmutableList.of(
306+
ColumnDefinition.builder().colName(new Identifier("col1"))
307+
.dataType(build2)
308+
.build()
309+
);
310+
311+
CreateTable before = CreateTable.builder()
312+
.columns(leftList)
313+
.tableName(QualifiedName.of("dim_shop")).build();
314+
315+
CreateTable after = CreateTable.builder()
316+
.columns(rightList)
317+
.tableName(QualifiedName.of("dim_shop")).build();
318+
319+
List<BaseStatement> baseStatementList = columnCompare.compareTableElement(before, after);
320+
String join = Joiner.on("\n").join(baseStatementList);
321+
assertEquals("", join);
322+
}
323+
290324
@Test
291325
public void testComparePropertiesBeforeNull() {
292326
ColumnDefinition columnDefinition = ColumnDefinition.builder()

fastmodel-core/src/main/java/com/aliyun/fastmodel/core/formatter/ExpressionVisitor.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -351,8 +351,7 @@ public String visitLongLiteral(LongLiteral node, Void context) {
351351
@Override
352352
public String visitIntervalLiteral(IntervalLiteral node, Void context) {
353353
StringBuilder builder = new StringBuilder()
354-
.append("INTERVAL ")
355-
.append(" '").append(node.getValue()).append("' ")
354+
.append("INTERVAL").append(" ").append(process(node.getValue())).append(" ")
356355
.append(node.getFromDateTime());
357356

358357
if (node.getToDateTime() != null) {

fastmodel-core/src/main/java/com/aliyun/fastmodel/core/formatter/FastModelVisitor.java

+17-15
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@
177177
*/
178178
public class FastModelVisitor extends AstVisitor<Boolean, Integer> {
179179

180-
private static final String INDENT = " ";
180+
protected static final String INDENT = " ";
181181
public static final String CONSTRAINT = "CONSTRAINT ";
182182
public static final String SUFFIX = ";";
183183
public static final String NEW_LINE = "\n";
@@ -414,18 +414,20 @@ public Boolean visitRenameTable(RenameTable renameTable, Integer context) {
414414

415415
@Override
416416
public Boolean visitCreateTable(CreateTable node, Integer indent) {
417-
builder.append("CREATE ");
417+
builder.append("CREATE");
418418
if (node.getCreateOrReplace() != null && node.getCreateOrReplace()) {
419-
builder.append("OR REPLACE ");
420-
}
421-
ITableDetailType tableDetailType = node.getTableDetailType() == null ? TableDetailType.NORMAL_DIM
422-
: node.getTableDetailType();
423-
boolean isNormalOrTransaction = tableDetailType == TableDetailType.NORMAL_DIM
424-
|| tableDetailType == TableDetailType.TRANSACTION_FACT;
425-
if (!isNormalOrTransaction && !tableDetailType.isSingle()) {
426-
builder.append(tableDetailType.getCode()).append(" ");
419+
builder.append(" OR REPLACE");
420+
}
421+
ITableDetailType tableDetailType = null;
422+
if (node.getTableDetailType() != null) {
423+
tableDetailType = node.getTableDetailType();
424+
boolean isNormalOrTransaction = tableDetailType == TableDetailType.NORMAL_DIM
425+
|| tableDetailType == TableDetailType.TRANSACTION_FACT;
426+
if (!isNormalOrTransaction && !tableDetailType.isSingle()) {
427+
builder.append(" ").append(tableDetailType.getCode());
428+
}
429+
builder.append(" ").append(tableDetailType.getParent());
427430
}
428-
builder.append(tableDetailType.getParent());
429431
builder.append(" TABLE ");
430432
if (node.isNotExists()) {
431433
builder.append("IF NOT EXISTS ");
@@ -606,7 +608,7 @@ public Boolean visitPrimaryConstraint(PrimaryConstraint primaryConstraint, Integ
606608
builder.append(indentString(ident)).append("PRIMARY KEY(");
607609
}
608610
builder.append(
609-
primaryConstraint.getColNames().stream().map(ExpressionFormatter::formatExpression).collect(joining(",")));
611+
primaryConstraint.getColNames().stream().map(this::formatExpression).collect(joining(",")));
610612
builder.append(")");
611613
if (primaryConstraint.getEnable() != null) {
612614
if (!primaryConstraint.getEnable()) {
@@ -1214,7 +1216,7 @@ public Boolean visitSetTableProperties(SetTableProperties setTableProperties, In
12141216
@Override
12151217
public Boolean visitDropCol(DropCol dropCol, Integer context) {
12161218
builder.append("ALTER TABLE ").append(getCode(dropCol.getQualifiedName()));
1217-
builder.append(" DROP COLUMN ").append(ExpressionFormatter.formatExpression(dropCol.getColumnName()));
1219+
builder.append(" DROP COLUMN ").append(formatExpression(dropCol.getColumnName()));
12181220
return true;
12191221
}
12201222

@@ -1947,7 +1949,7 @@ private String formatWith(List<Property> properties, boolean isNewLine) {
19471949
return stringBuilder.toString();
19481950
}
19491951

1950-
public String indentString(int indent) {
1952+
protected String indentString(int indent) {
19511953
return Strings.repeat(INDENT, indent);
19521954
}
19531955

@@ -1980,7 +1982,7 @@ protected String formatGroupBy(List<GroupingElement> groupingElements) {
19801982
return Joiner.on(", ").join(resultStrings.build());
19811983
}
19821984

1983-
public String formatStringLiteral(String s) {
1985+
protected String formatStringLiteral(String s) {
19841986
if (s == null) {
19851987
return null;
19861988
}

fastmodel-core/src/main/java/com/aliyun/fastmodel/core/tree/Comment.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
import java.util.List;
2020

2121
import com.google.common.collect.ImmutableList;
22-
import lombok.EqualsAndHashCode;
2322
import lombok.Getter;
23+
import org.apache.commons.lang3.StringUtils;
2424

2525
/**
2626
* 备注描述信息
@@ -29,7 +29,6 @@
2929
* @date 2020/11/6
3030
*/
3131
@Getter
32-
@EqualsAndHashCode(callSuper = false)
3332
public class Comment extends AbstractNode {
3433

3534
private final String comment;
@@ -52,4 +51,12 @@ public List<? extends Node> getChildren() {
5251
public <R, C> R accept(IAstVisitor<R, C> visitor, C context) {
5352
return visitor.visitComment(this, context);
5453
}
54+
55+
@Override
56+
public boolean equals(Object o) {
57+
if (this == o) {return true;}
58+
if (o == null || getClass() != o.getClass()) {return false;}
59+
Comment c = (Comment)o;
60+
return StringUtils.equals(comment, c.getComment());
61+
}
5562
}

0 commit comments

Comments
 (0)