You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by ab...@apache.org on 2022/10/26 06:50:32 UTC
[incubator-devlake] branch release-v0.14 updated: fix: starrocks sync data type (#3576)
This is an automated email from the ASF dual-hosted git repository.
abeizn pushed a commit to branch release-v0.14
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
The following commit(s) were added to refs/heads/release-v0.14 by this push:
new ed32e1ad fix: starrocks sync data type (#3576)
ed32e1ad is described below
commit ed32e1ad392e842a1abf8ce45a89ac8888c047f0
Author: long2ice <lo...@gmail.com>
AuthorDate: Wed Oct 26 14:50:28 2022 +0800
fix: starrocks sync data type (#3576)
* fix: starrocks sync data type
* fix: improve getStarRocksDataType
---
plugins/starrocks/tasks.go | 4 ++--
plugins/starrocks/utils.go | 26 ++++++++++++++++++++------
2 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/plugins/starrocks/tasks.go b/plugins/starrocks/tasks.go
index 6493ed8f..acf2b1b7 100644
--- a/plugins/starrocks/tasks.go
+++ b/plugins/starrocks/tasks.go
@@ -172,11 +172,11 @@ func createTmpTable(starrocks *sql.DB, db dal.Dal, starrocksTmpTable string, tab
firstcmName := ""
for _, cm := range columeMetas {
name := cm.Name()
- starrocksDatatype, ok := cm.ColumnType()
+ columnDatatype, ok := cm.ColumnType()
if !ok {
return columnMap, "", errors.Default.New(fmt.Sprintf("Get [%s] ColumeType Failed", name))
}
- dataType := getDataType(starrocksDatatype)
+ dataType := getStarRocksDataType(columnDatatype)
columnMap[name] = dataType
column := fmt.Sprintf("`%s` %s", name, dataType)
columns = append(columns, column)
diff --git a/plugins/starrocks/utils.go b/plugins/starrocks/utils.go
index 9588b9fe..104e7235 100644
--- a/plugins/starrocks/utils.go
+++ b/plugins/starrocks/utils.go
@@ -71,6 +71,7 @@ func getTablesByDomainLayer(domainLayer string) []string {
}
return nil
}
+
func hasPrefixes(s string, prefixes ...string) bool {
for _, prefix := range prefixes {
if strings.HasPrefix(s, prefix) {
@@ -79,6 +80,7 @@ func hasPrefixes(s string, prefixes ...string) bool {
}
return false
}
+
func stringIn(s string, l ...string) bool {
for _, item := range l {
if s == item {
@@ -87,24 +89,36 @@ func stringIn(s string, l ...string) bool {
}
return false
}
-func getDataType(dataType string) string {
+
+func getStarRocksDataType(dataType string) string {
+ dataType = strings.ToLower(dataType)
starrocksDatatype := "string"
if hasPrefixes(dataType, "datetime", "timestamp") {
starrocksDatatype = "datetime"
- } else if strings.HasPrefix(dataType, "bigint") {
+ } else if stringIn(dataType, "date") {
+ starrocksDatatype = "date"
+ } else if strings.HasPrefix(dataType, "bigint") || stringIn(dataType, "bigserial") {
starrocksDatatype = "bigint"
- } else if stringIn(dataType, "longtext", "text", "longblob") {
- starrocksDatatype = "string"
- } else if dataType == "tinyint(1)" {
+ } else if stringIn(dataType, "char") {
+ starrocksDatatype = "char"
+ } else if stringIn(dataType, "int", "integer", "serial") {
+ starrocksDatatype = "int"
+ } else if stringIn(dataType, "tinyint(1)", "boolean") {
starrocksDatatype = "boolean"
+ } else if stringIn(dataType, "smallint", "smallserial") {
+ starrocksDatatype = "smallint"
+ } else if stringIn(dataType, "real") {
+ starrocksDatatype = "float"
} else if stringIn(dataType, "numeric", "double precision") {
starrocksDatatype = "double"
+ } else if stringIn(dataType, "decimal") {
+ starrocksDatatype = "decimal"
} else if stringIn(dataType, "json", "jsonb") {
starrocksDatatype = "json"
} else if dataType == "uuid" {
starrocksDatatype = "char(36)"
} else if strings.HasSuffix(dataType, "[]") {
- starrocksDatatype = fmt.Sprintf("array<%s>", getDataType(strings.Split(dataType, "[]")[0]))
+ starrocksDatatype = fmt.Sprintf("array<%s>", getStarRocksDataType(strings.Split(dataType, "[]")[0]))
}
return starrocksDatatype
}