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
 }