summaryrefslogtreecommitdiffstats
path: root/vendor/xorm.io/xorm/dialects
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/xorm.io/xorm/dialects')
-rw-r--r--vendor/xorm.io/xorm/dialects/dialect.go3
-rw-r--r--vendor/xorm.io/xorm/dialects/filter.go36
-rw-r--r--vendor/xorm.io/xorm/dialects/mssql.go29
-rw-r--r--vendor/xorm.io/xorm/dialects/mysql.go37
-rw-r--r--vendor/xorm.io/xorm/dialects/oracle.go24
-rw-r--r--vendor/xorm.io/xorm/dialects/postgres.go58
-rw-r--r--vendor/xorm.io/xorm/dialects/sqlite3.go21
7 files changed, 194 insertions, 14 deletions
diff --git a/vendor/xorm.io/xorm/dialects/dialect.go b/vendor/xorm.io/xorm/dialects/dialect.go
index b02ec4ae29..325836b484 100644
--- a/vendor/xorm.io/xorm/dialects/dialect.go
+++ b/vendor/xorm.io/xorm/dialects/dialect.go
@@ -44,6 +44,7 @@ type Dialect interface {
URI() *URI
SQLType(*schemas.Column) string
FormatBytes(b []byte) string
+ Version(ctx context.Context, queryer core.Queryer) (*schemas.Version, error)
IsReserved(string) bool
Quoter() schemas.Quoter
@@ -217,7 +218,7 @@ func regDrvsNDialects() bool {
"sqlite3": {"sqlite3", func() Driver { return &sqlite3Driver{} }, func() Dialect { return &sqlite3{} }},
"sqlite": {"sqlite3", func() Driver { return &sqlite3Driver{} }, func() Dialect { return &sqlite3{} }},
"oci8": {"oracle", func() Driver { return &oci8Driver{} }, func() Dialect { return &oracle{} }},
- "goracle": {"oracle", func() Driver { return &goracleDriver{} }, func() Dialect { return &oracle{} }},
+ "godror": {"oracle", func() Driver { return &godrorDriver{} }, func() Dialect { return &oracle{} }},
}
for driverName, v := range providedDrvsNDialects {
diff --git a/vendor/xorm.io/xorm/dialects/filter.go b/vendor/xorm.io/xorm/dialects/filter.go
index 2a36a731ee..bfe2e93ebc 100644
--- a/vendor/xorm.io/xorm/dialects/filter.go
+++ b/vendor/xorm.io/xorm/dialects/filter.go
@@ -23,13 +23,45 @@ type SeqFilter struct {
func convertQuestionMark(sql, prefix string, start int) string {
var buf strings.Builder
var beginSingleQuote bool
+ var isLineComment bool
+ var isComment bool
+ var isMaybeLineComment bool
+ var isMaybeComment bool
+ var isMaybeCommentEnd bool
var index = start
for _, c := range sql {
- if !beginSingleQuote && c == '?' {
+ if !beginSingleQuote && !isLineComment && !isComment && c == '?' {
buf.WriteString(fmt.Sprintf("%s%v", prefix, index))
index++
} else {
- if c == '\'' {
+ if isMaybeLineComment {
+ if c == '-' {
+ isLineComment = true
+ }
+ isMaybeLineComment = false
+ } else if isMaybeComment {
+ if c == '*' {
+ isComment = true
+ }
+ isMaybeComment = false
+ } else if isMaybeCommentEnd {
+ if c == '/' {
+ isComment = false
+ }
+ isMaybeCommentEnd = false
+ } else if isLineComment {
+ if c == '\n' {
+ isLineComment = false
+ }
+ } else if isComment {
+ if c == '*' {
+ isMaybeCommentEnd = true
+ }
+ } else if !beginSingleQuote && c == '-' {
+ isMaybeLineComment = true
+ } else if !beginSingleQuote && c == '/' {
+ isMaybeComment = true
+ } else if c == '\'' {
beginSingleQuote = !beginSingleQuote
}
buf.WriteRune(c)
diff --git a/vendor/xorm.io/xorm/dialects/mssql.go b/vendor/xorm.io/xorm/dialects/mssql.go
index 15d1cd06c0..7e922e621e 100644
--- a/vendor/xorm.io/xorm/dialects/mssql.go
+++ b/vendor/xorm.io/xorm/dialects/mssql.go
@@ -253,6 +253,31 @@ func (db *mssql) SetParams(params map[string]string) {
}
}
+func (db *mssql) Version(ctx context.Context, queryer core.Queryer) (*schemas.Version, error) {
+ rows, err := queryer.QueryContext(ctx,
+ "SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel') AS ProductLevel, SERVERPROPERTY ('edition') AS ProductEdition")
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+
+ var version, level, edition string
+ if !rows.Next() {
+ return nil, errors.New("unknow version")
+ }
+
+ if err := rows.Scan(&version, &level, &edition); err != nil {
+ return nil, err
+ }
+
+ // MSSQL: Microsoft SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4 (X64) Nov 30 2018 12:57:58 Copyright (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Linux (Ubuntu 16.04.5 LTS)
+ return &schemas.Version{
+ Number: version,
+ Level: level,
+ Edition: edition,
+ }, nil
+}
+
func (db *mssql) SQLType(c *schemas.Column) string {
var res string
switch t := c.SQLType.Name; t {
@@ -284,7 +309,7 @@ func (db *mssql) SQLType(c *schemas.Column) string {
case schemas.TimeStampz:
res = "DATETIMEOFFSET"
c.Length = 7
- case schemas.MediumInt, schemas.UnsignedInt:
+ case schemas.MediumInt:
res = schemas.Int
case schemas.Text, schemas.MediumText, schemas.TinyText, schemas.LongText, schemas.Json:
res = db.defaultVarchar + "(MAX)"
@@ -296,7 +321,7 @@ func (db *mssql) SQLType(c *schemas.Column) string {
case schemas.TinyInt:
res = schemas.TinyInt
c.Length = 0
- case schemas.BigInt, schemas.UnsignedBigInt:
+ case schemas.BigInt, schemas.UnsignedBigInt, schemas.UnsignedInt:
res = schemas.BigInt
c.Length = 0
case schemas.NVarchar:
diff --git a/vendor/xorm.io/xorm/dialects/mysql.go b/vendor/xorm.io/xorm/dialects/mysql.go
index 2b530daf4b..a169b9010e 100644
--- a/vendor/xorm.io/xorm/dialects/mysql.go
+++ b/vendor/xorm.io/xorm/dialects/mysql.go
@@ -188,6 +188,43 @@ func (db *mysql) Init(uri *URI) error {
return db.Base.Init(db, uri)
}
+func (db *mysql) Version(ctx context.Context, queryer core.Queryer) (*schemas.Version, error) {
+ rows, err := queryer.QueryContext(ctx, "SELECT @@VERSION")
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+
+ var version string
+ if !rows.Next() {
+ return nil, errors.New("Unknow version")
+ }
+
+ if err := rows.Scan(&version); err != nil {
+ return nil, err
+ }
+
+ fields := strings.Split(version, "-")
+ if len(fields) == 3 && fields[1] == "TiDB" {
+ // 5.7.25-TiDB-v3.0.3
+ return &schemas.Version{
+ Number: strings.TrimPrefix(fields[2], "v"),
+ Level: fields[0],
+ Edition: fields[1],
+ }, nil
+ }
+
+ var edition string
+ if len(fields) == 2 {
+ edition = fields[1]
+ }
+
+ return &schemas.Version{
+ Number: fields[0],
+ Edition: edition,
+ }, nil
+}
+
func (db *mysql) SetParams(params map[string]string) {
rowFormat, ok := params["rowFormat"]
if ok {
diff --git a/vendor/xorm.io/xorm/dialects/oracle.go b/vendor/xorm.io/xorm/dialects/oracle.go
index 91eed25169..0b06c4c63c 100644
--- a/vendor/xorm.io/xorm/dialects/oracle.go
+++ b/vendor/xorm.io/xorm/dialects/oracle.go
@@ -515,6 +515,26 @@ func (db *oracle) Init(uri *URI) error {
return db.Base.Init(db, uri)
}
+func (db *oracle) Version(ctx context.Context, queryer core.Queryer) (*schemas.Version, error) {
+ rows, err := queryer.QueryContext(ctx, "select * from v$version where banner like 'Oracle%'")
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+
+ var version string
+ if !rows.Next() {
+ return nil, errors.New("unknow version")
+ }
+
+ if err := rows.Scan(&version); err != nil {
+ return nil, err
+ }
+ return &schemas.Version{
+ Number: version,
+ }, nil
+}
+
func (db *oracle) SQLType(c *schemas.Column) string {
var res string
switch t := c.SQLType.Name; t {
@@ -802,10 +822,10 @@ func (db *oracle) Filters() []Filter {
}
}
-type goracleDriver struct {
+type godrorDriver struct {
}
-func (cfg *goracleDriver) Parse(driverName, dataSourceName string) (*URI, error) {
+func (cfg *godrorDriver) Parse(driverName, dataSourceName string) (*URI, error) {
db := &URI{DBType: schemas.ORACLE}
dsnPattern := regexp.MustCompile(
`^(?:(?P<user>.*?)(?::(?P<passwd>.*))?@)?` + // [user[:password]@]
diff --git a/vendor/xorm.io/xorm/dialects/postgres.go b/vendor/xorm.io/xorm/dialects/postgres.go
index e76e5b7ed8..9acf763ab4 100644
--- a/vendor/xorm.io/xorm/dialects/postgres.go
+++ b/vendor/xorm.io/xorm/dialects/postgres.go
@@ -788,6 +788,42 @@ func (db *postgres) Init(uri *URI) error {
return db.Base.Init(db, uri)
}
+func (db *postgres) Version(ctx context.Context, queryer core.Queryer) (*schemas.Version, error) {
+ rows, err := queryer.QueryContext(ctx, "SELECT version()")
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+
+ var version string
+ if !rows.Next() {
+ return nil, errors.New("Unknow version")
+ }
+
+ if err := rows.Scan(&version); err != nil {
+ return nil, err
+ }
+
+ // Postgres: 9.5.22 on x86_64-pc-linux-gnu (Debian 9.5.22-1.pgdg90+1), compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit
+ // CockroachDB CCL v19.2.4 (x86_64-unknown-linux-gnu, built
+ if strings.HasPrefix(version, "CockroachDB") {
+ versions := strings.Split(strings.TrimPrefix(version, "CockroachDB CCL "), " ")
+ return &schemas.Version{
+ Number: strings.TrimPrefix(versions[0], "v"),
+ Edition: "CockroachDB",
+ }, nil
+ } else if strings.HasPrefix(version, "PostgreSQL") {
+ versions := strings.Split(strings.TrimPrefix(version, "PostgreSQL "), " on ")
+ return &schemas.Version{
+ Number: versions[0],
+ Level: versions[1],
+ Edition: "PostgreSQL",
+ }, nil
+ }
+
+ return nil, errors.New("unknow database version")
+}
+
func (db *postgres) getSchema() string {
if db.uri.Schema != "" {
return db.uri.Schema
@@ -838,12 +874,12 @@ func (db *postgres) SQLType(c *schemas.Column) string {
case schemas.Bit:
res = schemas.Boolean
return res
- case schemas.MediumInt, schemas.Int, schemas.Integer, schemas.UnsignedInt:
+ case schemas.MediumInt, schemas.Int, schemas.Integer:
if c.IsAutoIncrement {
return schemas.Serial
}
return schemas.Integer
- case schemas.BigInt, schemas.UnsignedBigInt:
+ case schemas.BigInt, schemas.UnsignedBigInt, schemas.UnsignedInt:
if c.IsAutoIncrement {
return schemas.BigSerial
}
@@ -1008,12 +1044,13 @@ func (db *postgres) IsColumnExist(queryer core.Queryer, ctx context.Context, tab
func (db *postgres) GetColumns(queryer core.Queryer, ctx context.Context, tableName string) ([]string, map[string]*schemas.Column, error) {
args := []interface{}{tableName}
- s := `SELECT column_name, column_default, is_nullable, data_type, character_maximum_length,
+ s := `SELECT column_name, column_default, is_nullable, data_type, character_maximum_length, description,
CASE WHEN p.contype = 'p' THEN true ELSE false END AS primarykey,
CASE WHEN p.contype = 'u' THEN true ELSE false END AS uniquekey
FROM pg_attribute f
JOIN pg_class c ON c.oid = f.attrelid JOIN pg_type t ON t.oid = f.atttypid
LEFT JOIN pg_attrdef d ON d.adrelid = c.oid AND d.adnum = f.attnum
+ LEFT JOIN pg_description de ON f.attrelid=de.objoid AND f.attnum=de.objsubid
LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
LEFT JOIN pg_constraint p ON p.conrelid = c.oid AND f.attnum = ANY (p.conkey)
LEFT JOIN pg_class AS g ON p.confrelid = g.oid
@@ -1042,9 +1079,9 @@ WHERE n.nspname= s.table_schema AND c.relkind = 'r'::char AND c.relname = $1%s A
col.Indexes = make(map[string]int)
var colName, isNullable, dataType string
- var maxLenStr, colDefault *string
+ var maxLenStr, colDefault, description *string
var isPK, isUnique bool
- err = rows.Scan(&colName, &colDefault, &isNullable, &dataType, &maxLenStr, &isPK, &isUnique)
+ err = rows.Scan(&colName, &colDefault, &isNullable, &dataType, &maxLenStr, &description, &isPK, &isUnique)
if err != nil {
return nil, nil, err
}
@@ -1090,6 +1127,10 @@ WHERE n.nspname= s.table_schema AND c.relkind = 'r'::char AND c.relname = $1%s A
col.DefaultIsEmpty = true
}
+ if description != nil {
+ col.Comment = *description
+ }
+
if isPK {
col.IsPrimaryKey = true
}
@@ -1221,7 +1262,8 @@ func (db *postgres) GetIndexes(queryer core.Queryer, ctx context.Context, tableN
continue
}
indexName = strings.Trim(indexName, `" `)
- if strings.HasSuffix(indexName, "_pkey") {
+ // ignore primary index
+ if strings.HasSuffix(indexName, "_pkey") || strings.EqualFold(indexName, "primary") {
continue
}
if strings.HasPrefix(indexdef, "CREATE UNIQUE INDEX") {
@@ -1241,7 +1283,9 @@ func (db *postgres) GetIndexes(queryer core.Queryer, ctx context.Context, tableN
index := &schemas.Index{Name: indexName, Type: indexType, Cols: make([]string, 0)}
for _, colName := range colNames {
- index.Cols = append(index.Cols, strings.TrimSpace(strings.Replace(colName, `"`, "", -1)))
+ col := strings.TrimSpace(strings.Replace(colName, `"`, "", -1))
+ fields := strings.Split(col, " ")
+ index.Cols = append(index.Cols, fields[0])
}
index.IsRegular = isRegular
indexes[index.Name] = index
diff --git a/vendor/xorm.io/xorm/dialects/sqlite3.go b/vendor/xorm.io/xorm/dialects/sqlite3.go
index 8268360645..a42aad4867 100644
--- a/vendor/xorm.io/xorm/dialects/sqlite3.go
+++ b/vendor/xorm.io/xorm/dialects/sqlite3.go
@@ -160,6 +160,27 @@ func (db *sqlite3) Init(uri *URI) error {
return db.Base.Init(db, uri)
}
+func (db *sqlite3) Version(ctx context.Context, queryer core.Queryer) (*schemas.Version, error) {
+ rows, err := queryer.QueryContext(ctx, "SELECT sqlite_version()")
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+
+ var version string
+ if !rows.Next() {
+ return nil, errors.New("Unknow version")
+ }
+
+ if err := rows.Scan(&version); err != nil {
+ return nil, err
+ }
+ return &schemas.Version{
+ Number: version,
+ Edition: "sqlite",
+ }, nil
+}
+
func (db *sqlite3) SetQuotePolicy(quotePolicy QuotePolicy) {
switch quotePolicy {
case QuotePolicyNone: