mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-30 22:11:07 +00:00 
			
		
		
		
	Fix label count (#8267)
* fix label count * fix vendor * fix import order * update xorm to fix bug * fix tests * fix mssql bug
This commit is contained in:
		
					parent
					
						
							
								7cccada51e
							
						
					
				
			
			
				commit
				
					
						29dda47cbb
					
				
			
		
					 38 changed files with 959 additions and 580 deletions
				
			
		
							
								
								
									
										140
									
								
								vendor/github.com/go-xorm/xorm/.drone.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										140
									
								
								vendor/github.com/go-xorm/xorm/.drone.yml
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -103,7 +103,18 @@ steps: | |||
|   commands: | ||||
|   - "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -schema=xorm -coverprofile=coverage5-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -schema=xorm -cache=true -coverprofile=coverage5-2.txt -covermode=atomic" | ||||
|   - gocovmerge coverage1-1.txt coverage1-2.txt coverage2-1.txt coverage2-2.txt coverage2.1-1.txt coverage2.1-2.txt coverage3-1.txt coverage3-2.txt coverage4-1.txt coverage4-2.txt coverage5-1.txt coverage5-2.txt > coverage.txt | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|     - pull_request | ||||
| 
 | ||||
| - name: test-mssql | ||||
|   pull: default | ||||
|   image: golang:1.10 | ||||
|   commands: | ||||
|   - "go test -v -race -db=\"mssql\" -conn_str=\"server=mssql;user id=sa;password=yourStrong(!)Password;database=xorm_test\" -coverprofile=coverage6-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"mssql\" -conn_str=\"server=mssql;user id=sa;password=yourStrong(!)Password;database=xorm_test\" -cache=true -coverprofile=coverage6-2.txt -covermode=atomic" | ||||
|   - gocovmerge coverage1-1.txt coverage1-2.txt coverage2-1.txt coverage2-2.txt coverage2.1-1.txt coverage2.1-2.txt coverage3-1.txt coverage3-2.txt coverage4-1.txt coverage4-2.txt coverage5-1.txt coverage5-2.txt coverage6-1.txt coverage6-2.txt > coverage.txt | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|  | @ -134,6 +145,19 @@ services: | |||
|     - tag | ||||
|     - pull_request | ||||
| 
 | ||||
| - name: mssql | ||||
|   pull: default | ||||
|   image: microsoft/mssql-server-linux:latest | ||||
|   environment: | ||||
|     ACCEPT_EULA: Y | ||||
|     SA_PASSWORD: yourStrong(!)Password | ||||
|     MSSQL_PID: Developer | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|     - tag | ||||
|     - pull_request | ||||
| 
 | ||||
| --- | ||||
| kind: pipeline | ||||
| name: matrix-2 | ||||
|  | @ -167,11 +191,13 @@ steps: | |||
| - name: build | ||||
|   pull: default | ||||
|   image: golang:1.11 | ||||
|   environment: | ||||
|     GO111MODULE: "off" | ||||
|   commands: | ||||
|     - go get -t -d -v ./...	 | ||||
|     - go get -u xorm.io/core	 | ||||
|     - go get -u xorm.io/builder | ||||
|     - GO111MODULE=off go build -v | ||||
|     - go build -v | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|  | @ -181,9 +207,10 @@ steps: | |||
|   pull: default | ||||
|   image: golang:1.11 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|     - GO111MODULE=on go build -v | ||||
|     - go build -v | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|  | @ -192,8 +219,10 @@ steps: | |||
| - name: test-sqlite | ||||
|   pull: default | ||||
|   image: golang:1.11 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|   - go get -u github.com/wadey/gocovmerge | ||||
|   - "go test -v -race -db=\"sqlite3\" -conn_str=\"./test.db\" -coverprofile=coverage1-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"sqlite3\" -conn_str=\"./test.db\" -cache=true -coverprofile=coverage1-2.txt -covermode=atomic" | ||||
|   when: | ||||
|  | @ -204,6 +233,9 @@ steps: | |||
| - name: test-mysql | ||||
|   pull: default | ||||
|   image: golang:1.11 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|   - "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test\" -coverprofile=coverage2-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test\" -cache=true -coverprofile=coverage2-2.txt -covermode=atomic" | ||||
|  | @ -215,6 +247,9 @@ steps: | |||
| - name: test-mysql-utf8mb4 | ||||
|   pull: default | ||||
|   image: golang:1.11 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|   - "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test?charset=utf8mb4\" -coverprofile=coverage2.1-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test?charset=utf8mb4\" -cache=true -coverprofile=coverage2.1-2.txt -covermode=atomic" | ||||
|  | @ -226,6 +261,9 @@ steps: | |||
| - name: test-mymysql | ||||
|   pull: default | ||||
|   image: golang:1.11 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|   - "go test -v -race -db=\"mymysql\" -conn_str=\"tcp:mysql:3306*xorm_test/root/\" -coverprofile=coverage3-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"mymysql\" -conn_str=\"tcp:mysql:3306*xorm_test/root/\" -cache=true -coverprofile=coverage3-2.txt -covermode=atomic" | ||||
|  | @ -237,6 +275,9 @@ steps: | |||
| - name: test-postgres | ||||
|   pull: default | ||||
|   image: golang:1.11 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|   - "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -coverprofile=coverage4-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -cache=true -coverprofile=coverage4-2.txt -covermode=atomic" | ||||
|  | @ -248,10 +289,28 @@ steps: | |||
| - name: test-postgres-schema | ||||
|   pull: default | ||||
|   image: golang:1.11 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|   - "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -schema=xorm -coverprofile=coverage5-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -schema=xorm -cache=true -coverprofile=coverage5-2.txt -covermode=atomic" | ||||
|   - gocovmerge coverage1-1.txt coverage1-2.txt coverage2-1.txt coverage2-2.txt coverage2.1-1.txt coverage2.1-2.txt coverage3-1.txt coverage3-2.txt coverage4-1.txt coverage4-2.txt coverage5-1.txt coverage5-2.txt > coverage.txt | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|     - pull_request | ||||
| 
 | ||||
| - name: test-mssql | ||||
|   pull: default | ||||
|   image: golang:1.11 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|   - "go test -v -race -db=\"mssql\" -conn_str=\"server=mssql;user id=sa;password=yourStrong(!)Password;database=xorm_test\" -coverprofile=coverage6-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"mssql\" -conn_str=\"server=mssql;user id=sa;password=yourStrong(!)Password;database=xorm_test\" -cache=true -coverprofile=coverage6-2.txt -covermode=atomic" | ||||
|   - go get github.com/wadey/gocovmerge | ||||
|   - gocovmerge coverage1-1.txt coverage1-2.txt coverage2-1.txt coverage2-2.txt coverage2.1-1.txt coverage2.1-2.txt coverage3-1.txt coverage3-2.txt coverage4-1.txt coverage4-2.txt coverage5-1.txt coverage5-2.txt coverage6-1.txt coverage6-2.txt > coverage.txt | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|  | @ -282,6 +341,19 @@ services: | |||
|     - tag | ||||
|     - pull_request | ||||
| 
 | ||||
| - name: mssql | ||||
|   pull: default | ||||
|   image: microsoft/mssql-server-linux:latest | ||||
|   environment: | ||||
|     ACCEPT_EULA: Y | ||||
|     SA_PASSWORD: yourStrong(!)Password | ||||
|     MSSQL_PID: Developer | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|     - tag | ||||
|     - pull_request | ||||
| 
 | ||||
| --- | ||||
| kind: pipeline | ||||
| name: matrix-3 | ||||
|  | @ -315,11 +387,13 @@ steps: | |||
| - name: build | ||||
|   pull: default | ||||
|   image: golang:1.12 | ||||
|   environment: | ||||
|     GO111MODULE: "off" | ||||
|   commands: | ||||
|     - go get -t -d -v ./...	 | ||||
|     - go get -u xorm.io/core	 | ||||
|     - go get -u xorm.io/builder | ||||
|     - GO111MODULE=off go build -v | ||||
|     - go build -v | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|  | @ -329,9 +403,10 @@ steps: | |||
|   pull: default | ||||
|   image: golang:1.12 | ||||
|   environment: | ||||
|     GOPROXY: "https://goproxy.cn"  | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|     - GO111MODULE=on go build -v | ||||
|     - go build -v | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|  | @ -340,8 +415,10 @@ steps: | |||
| - name: test-sqlite | ||||
|   pull: default | ||||
|   image: golang:1.12 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|   - go get -u github.com/wadey/gocovmerge | ||||
|   - "go test -v -race -db=\"sqlite3\" -conn_str=\"./test.db\" -coverprofile=coverage1-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"sqlite3\" -conn_str=\"./test.db\" -cache=true -coverprofile=coverage1-2.txt -covermode=atomic" | ||||
|   when: | ||||
|  | @ -352,6 +429,9 @@ steps: | |||
| - name: test-mysql | ||||
|   pull: default | ||||
|   image: golang:1.12 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|   - "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test\" -coverprofile=coverage2-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test\" -cache=true -coverprofile=coverage2-2.txt -covermode=atomic" | ||||
|  | @ -363,6 +443,9 @@ steps: | |||
| - name: test-mysql-utf8mb4 | ||||
|   pull: default | ||||
|   image: golang:1.12 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|   - "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test?charset=utf8mb4\" -coverprofile=coverage2.1-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test?charset=utf8mb4\" -cache=true -coverprofile=coverage2.1-2.txt -covermode=atomic" | ||||
|  | @ -374,6 +457,9 @@ steps: | |||
| - name: test-mymysql | ||||
|   pull: default | ||||
|   image: golang:1.12 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|   - "go test -v -race -db=\"mymysql\" -conn_str=\"tcp:mysql:3306*xorm_test/root/\" -coverprofile=coverage3-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"mymysql\" -conn_str=\"tcp:mysql:3306*xorm_test/root/\" -cache=true -coverprofile=coverage3-2.txt -covermode=atomic" | ||||
|  | @ -385,6 +471,9 @@ steps: | |||
| - name: test-postgres | ||||
|   pull: default | ||||
|   image: golang:1.12 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|   - "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -coverprofile=coverage4-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -cache=true -coverprofile=coverage4-2.txt -covermode=atomic" | ||||
|  | @ -396,10 +485,28 @@ steps: | |||
| - name: test-postgres-schema | ||||
|   pull: default | ||||
|   image: golang:1.12 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|   - "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -schema=xorm -coverprofile=coverage5-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -schema=xorm -cache=true -coverprofile=coverage5-2.txt -covermode=atomic" | ||||
|   - gocovmerge coverage1-1.txt coverage1-2.txt coverage2-1.txt coverage2-2.txt coverage2.1-1.txt coverage2.1-2.txt coverage3-1.txt coverage3-2.txt coverage4-1.txt coverage4-2.txt coverage5-1.txt coverage5-2.txt > coverage.txt | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|     - pull_request | ||||
| 
 | ||||
| - name: test-mssql | ||||
|   pull: default | ||||
|   image: golang:1.12 | ||||
|   environment: | ||||
|     GO111MODULE: "on" | ||||
|     GOPROXY: "https://goproxy.cn" | ||||
|   commands: | ||||
|   - "go test -v -race -db=\"mssql\" -conn_str=\"server=mssql;user id=sa;password=yourStrong(!)Password;database=xorm_test\" -coverprofile=coverage6-1.txt -covermode=atomic" | ||||
|   - "go test -v -race -db=\"mssql\" -conn_str=\"server=mssql;user id=sa;password=yourStrong(!)Password;database=xorm_test\" -cache=true -coverprofile=coverage6-2.txt -covermode=atomic" | ||||
|   - go get -u github.com/wadey/gocovmerge | ||||
|   - gocovmerge coverage1-1.txt coverage1-2.txt coverage2-1.txt coverage2-2.txt coverage2.1-1.txt coverage2.1-2.txt coverage3-1.txt coverage3-2.txt coverage4-1.txt coverage4-2.txt coverage5-1.txt coverage5-2.txt coverage6-1.txt coverage6-2.txt > coverage.txt | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|  | @ -424,6 +531,19 @@ services: | |||
|   environment: | ||||
|     POSTGRES_DB: xorm_test | ||||
|     POSTGRES_USER: postgres | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|     - tag | ||||
|     - pull_request | ||||
| 
 | ||||
| - name: mssql | ||||
|   pull: default | ||||
|   image: microsoft/mssql-server-linux:latest | ||||
|   environment: | ||||
|     ACCEPT_EULA: Y | ||||
|     SA_PASSWORD: yourStrong(!)Password | ||||
|     MSSQL_PID: Developer | ||||
|   when: | ||||
|     event: | ||||
|     - push | ||||
|  |  | |||
							
								
								
									
										8
									
								
								vendor/github.com/go-xorm/xorm/dialect_postgres.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/go-xorm/xorm/dialect_postgres.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -952,7 +952,7 @@ func (db *postgres) IsColumnExist(tableName, colName string) (bool, error) { | |||
| 
 | ||||
| func (db *postgres) GetColumns(tableName string) ([]string, map[string]*core.Column, error) { | ||||
| 	args := []interface{}{tableName} | ||||
| 	s := `SELECT column_name, column_default, is_nullable, data_type, character_maximum_length, numeric_precision, numeric_precision_radix , | ||||
| 	s := `SELECT column_name, column_default, is_nullable, data_type, character_maximum_length, | ||||
|     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 | ||||
|  | @ -987,14 +987,14 @@ WHERE c.relkind = 'r'::char AND c.relname = $1%s AND f.attnum > 0 ORDER BY f.att | |||
| 		col.Indexes = make(map[string]int) | ||||
| 
 | ||||
| 		var colName, isNullable, dataType string | ||||
| 		var maxLenStr, colDefault, numPrecision, numRadix *string | ||||
| 		var maxLenStr, colDefault *string | ||||
| 		var isPK, isUnique bool | ||||
| 		err = rows.Scan(&colName, &colDefault, &isNullable, &dataType, &maxLenStr, &numPrecision, &numRadix, &isPK, &isUnique) | ||||
| 		err = rows.Scan(&colName, &colDefault, &isNullable, &dataType, &maxLenStr, &isPK, &isUnique) | ||||
| 		if err != nil { | ||||
| 			return nil, nil, err | ||||
| 		} | ||||
| 
 | ||||
| 		// fmt.Println(args, colName, isNullable, dataType, maxLenStr, colDefault, numPrecision, numRadix, isPK, isUnique) | ||||
| 		// fmt.Println(args, colName, isNullable, dataType, maxLenStr, colDefault, isPK, isUnique) | ||||
| 		var maxLen int | ||||
| 		if maxLenStr != nil { | ||||
| 			maxLen, err = strconv.Atoi(*maxLenStr) | ||||
|  |  | |||
							
								
								
									
										6
									
								
								vendor/github.com/go-xorm/xorm/engine.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/go-xorm/xorm/engine.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -190,14 +190,14 @@ func (engine *Engine) Quote(value string) string { | |||
| 		return value | ||||
| 	} | ||||
| 
 | ||||
| 	buf := builder.StringBuilder{} | ||||
| 	buf := strings.Builder{} | ||||
| 	engine.QuoteTo(&buf, value) | ||||
| 
 | ||||
| 	return buf.String() | ||||
| } | ||||
| 
 | ||||
| // QuoteTo quotes string and writes into the buffer | ||||
| func (engine *Engine) QuoteTo(buf *builder.StringBuilder, value string) { | ||||
| func (engine *Engine) QuoteTo(buf *strings.Builder, value string) { | ||||
| 	if buf == nil { | ||||
| 		return | ||||
| 	} | ||||
|  | @ -729,7 +729,7 @@ func (engine *Engine) Decr(column string, arg ...interface{}) *Session { | |||
| } | ||||
| 
 | ||||
| // SetExpr provides a update string like "column = {expression}" | ||||
| func (engine *Engine) SetExpr(column string, expression string) *Session { | ||||
| func (engine *Engine) SetExpr(column string, expression interface{}) *Session { | ||||
| 	session := engine.NewSession() | ||||
| 	session.isAutoClose = true | ||||
| 	return session.SetExpr(column, expression) | ||||
|  |  | |||
							
								
								
									
										9
									
								
								vendor/github.com/go-xorm/xorm/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/go-xorm/xorm/go.mod
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -1,19 +1,20 @@ | |||
| module github.com/go-xorm/xorm | ||||
| 
 | ||||
| go 1.11 | ||||
| 
 | ||||
| require ( | ||||
| 	github.com/cockroachdb/apd v1.1.0 // indirect | ||||
| 	github.com/denisenkom/go-mssqldb v0.0.0-20190707035753-2be1aa521ff4 | ||||
| 	github.com/go-sql-driver/mysql v1.4.1 | ||||
| 	github.com/gofrs/uuid v3.2.0+incompatible // indirect | ||||
| 	github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 // indirect | ||||
| 	github.com/jackc/pgx v3.3.0+incompatible | ||||
| 	github.com/kr/pretty v0.1.0 // indirect | ||||
| 	github.com/jackc/pgx v3.6.0+incompatible | ||||
| 	github.com/lib/pq v1.0.0 | ||||
| 	github.com/mattn/go-sqlite3 v1.10.0 | ||||
| 	github.com/pkg/errors v0.8.1 // indirect | ||||
| 	github.com/satori/go.uuid v1.2.0 // indirect | ||||
| 	github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24 // indirect | ||||
| 	github.com/stretchr/testify v1.3.0 | ||||
| 	github.com/ziutek/mymysql v1.5.4 | ||||
| 	xorm.io/builder v0.3.5 | ||||
| 	xorm.io/builder v0.3.6 | ||||
| 	xorm.io/core v0.7.0 | ||||
| ) | ||||
|  |  | |||
							
								
								
									
										18
									
								
								vendor/github.com/go-xorm/xorm/go.sum
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								vendor/github.com/go-xorm/xorm/go.sum
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -28,6 +28,8 @@ github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG | |||
| github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= | ||||
| github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:9wScpmSP5A3Bk8V3XHWUcJmYTh+ZnlHVyc+A4oZYS3Y= | ||||
| github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:56xuuqnHyryaerycW3BfssRdxQstACi0Epw/yC5E2xM= | ||||
| github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= | ||||
| github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= | ||||
| github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= | ||||
| github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= | ||||
| github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= | ||||
|  | @ -48,18 +50,13 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ | |||
| github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= | ||||
| github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 h1:vr3AYkKovP8uR8AvSGGUK1IDqRa5lAAvEkZG1LKaCRc= | ||||
| github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ= | ||||
| github.com/jackc/pgx v3.3.0+incompatible h1:Wa90/+qsITBAPkAZjiByeIGHFcj3Ztu+VzrrIpHjL90= | ||||
| github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= | ||||
| github.com/jackc/pgx v3.6.0+incompatible h1:bJeo4JdVbDAW8KB2m8XkFeo8CPipREoG37BwEoKGz+Q= | ||||
| github.com/jackc/pgx v3.6.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= | ||||
| github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= | ||||
| github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= | ||||
| github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||||
| github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||||
| github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= | ||||
| github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= | ||||
| github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= | ||||
| github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | ||||
| github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= | ||||
| github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= | ||||
| github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A= | ||||
| github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= | ||||
| github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o= | ||||
|  | @ -84,8 +81,6 @@ github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 | |||
| github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= | ||||
| github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= | ||||
| github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= | ||||
| github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= | ||||
| github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= | ||||
| github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24 h1:pntxY8Ary0t43dCZ5dqY4YTJCObLY1kIXl0uzMv+7DE= | ||||
| github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= | ||||
| github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= | ||||
|  | @ -133,6 +128,7 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w | |||
| golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= | ||||
| golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= | ||||
| golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
|  | @ -162,7 +158,7 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | |||
| honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||
| honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||
| honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | ||||
| xorm.io/builder v0.3.5 h1:EilU39fvWDxjb1cDaELpYhsF+zziRBhew8xk4pngO+A= | ||||
| xorm.io/builder v0.3.5/go.mod h1:ZFbByS/KxZI1FKRjL05PyJ4YrK2bcxlUaAxdum5aTR8= | ||||
| xorm.io/builder v0.3.6 h1:ha28mQ2M+TFx96Hxo+iq6tQgnkC9IZkM6D8w9sKHHF8= | ||||
| xorm.io/builder v0.3.6/go.mod h1:LEFAPISnRzG+zxaxj2vPicRwz67BdhFreKg8yv8/TgU= | ||||
| xorm.io/core v0.7.0 h1:hKxuOKWZNeiFQsSuGet/KV8HZ788hclvAl+7azx3tkM= | ||||
| xorm.io/core v0.7.0/go.mod h1:TuOJjIVa7e3w/rN8tDcAvuLBMtwzdHPbyOzE6Gk1EUI= | ||||
|  |  | |||
							
								
								
									
										2
									
								
								vendor/github.com/go-xorm/xorm/interface.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/go-xorm/xorm/interface.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -54,7 +54,7 @@ type Interface interface { | |||
| 	QueryInterface(sqlOrArgs ...interface{}) ([]map[string]interface{}, error) | ||||
| 	QueryString(sqlOrArgs ...interface{}) ([]map[string]string, error) | ||||
| 	Rows(bean interface{}) (*Rows, error) | ||||
| 	SetExpr(string, string) *Session | ||||
| 	SetExpr(string, interface{}) *Session | ||||
| 	SQL(interface{}, ...interface{}) *Session | ||||
| 	Sum(bean interface{}, colName string) (float64, error) | ||||
| 	SumInt(bean interface{}, colName string) (int64, error) | ||||
|  |  | |||
							
								
								
									
										45
									
								
								vendor/github.com/go-xorm/xorm/session_cols.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								vendor/github.com/go-xorm/xorm/session_cols.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -12,49 +12,6 @@ import ( | |||
| 	"xorm.io/core" | ||||
| ) | ||||
| 
 | ||||
| type incrParam struct { | ||||
| 	colName string | ||||
| 	arg     interface{} | ||||
| } | ||||
| 
 | ||||
| type decrParam struct { | ||||
| 	colName string | ||||
| 	arg     interface{} | ||||
| } | ||||
| 
 | ||||
| type exprParam struct { | ||||
| 	colName string | ||||
| 	expr    string | ||||
| } | ||||
| 
 | ||||
| type columnMap []string | ||||
| 
 | ||||
| func (m columnMap) contain(colName string) bool { | ||||
| 	if len(m) == 0 { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	n := len(colName) | ||||
| 	for _, mk := range m { | ||||
| 		if len(mk) != n { | ||||
| 			continue | ||||
| 		} | ||||
| 		if strings.EqualFold(mk, colName) { | ||||
| 			return true | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| func (m *columnMap) add(colName string) bool { | ||||
| 	if m.contain(colName) { | ||||
| 		return false | ||||
| 	} | ||||
| 	*m = append(*m, colName) | ||||
| 	return true | ||||
| } | ||||
| 
 | ||||
| func setColumnInt(bean interface{}, col *core.Column, t int64) { | ||||
| 	v, err := col.ValueOf(bean) | ||||
| 	if err != nil { | ||||
|  | @ -132,7 +89,7 @@ func (session *Session) Decr(column string, arg ...interface{}) *Session { | |||
| } | ||||
| 
 | ||||
| // SetExpr provides a query string like "column = {expression}" | ||||
| func (session *Session) SetExpr(column string, expression string) *Session { | ||||
| func (session *Session) SetExpr(column string, expression interface{}) *Session { | ||||
| 	session.statement.SetExpr(column, expression) | ||||
| 	return session | ||||
| } | ||||
|  |  | |||
							
								
								
									
										263
									
								
								vendor/github.com/go-xorm/xorm/session_insert.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										263
									
								
								vendor/github.com/go-xorm/xorm/session_insert.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -340,74 +340,96 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { | |||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	// insert expr columns, override if exists | ||||
| 	exprColumns := session.statement.getExpr() | ||||
| 	exprColVals := make([]string, 0, len(exprColumns)) | ||||
| 	for _, v := range exprColumns { | ||||
| 		// remove the expr columns | ||||
| 		for i, colName := range colNames { | ||||
| 			if colName == strings.Trim(v.colName, "`") { | ||||
| 				colNames = append(colNames[:i], colNames[i+1:]...) | ||||
| 				args = append(args[:i], args[i+1:]...) | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		// append expr column to the end | ||||
| 		colNames = append(colNames, v.colName) | ||||
| 		exprColVals = append(exprColVals, v.expr) | ||||
| 	exprs := session.statement.exprColumns | ||||
| 	colPlaces := strings.Repeat("?, ", len(colNames)) | ||||
| 	if exprs.Len() <= 0 && len(colPlaces) > 0 { | ||||
| 		colPlaces = colPlaces[0 : len(colPlaces)-2] | ||||
| 	} | ||||
| 
 | ||||
| 	colPlaces := strings.Repeat("?, ", len(colNames)-len(exprColumns)) | ||||
| 	if len(exprColVals) > 0 { | ||||
| 		colPlaces = colPlaces + strings.Join(exprColVals, ", ") | ||||
| 	} else { | ||||
| 		if len(colPlaces) > 0 { | ||||
| 			colPlaces = colPlaces[0 : len(colPlaces)-2] | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	var sqlStr string | ||||
| 	var tableName = session.statement.TableName() | ||||
| 	var output string | ||||
| 	if session.engine.dialect.DBType() == core.MSSQL && len(table.AutoIncrement) > 0 { | ||||
| 		output = fmt.Sprintf(" OUTPUT Inserted.%s", table.AutoIncrement) | ||||
| 	} | ||||
| 
 | ||||
| 	if len(colPlaces) > 0 { | ||||
| 	var buf = builder.NewWriter() | ||||
| 	if _, err := buf.WriteString(fmt.Sprintf("INSERT INTO %s", session.engine.Quote(tableName))); err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	if len(colPlaces) <= 0 { | ||||
| 		if session.engine.dialect.DBType() == core.MYSQL { | ||||
| 			if _, err := buf.WriteString(" VALUES ()"); err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 		} else { | ||||
| 			if _, err := buf.WriteString(fmt.Sprintf("%s DEFAULT VALUES", output)); err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 		} | ||||
| 	} else { | ||||
| 		if _, err := buf.WriteString(" ("); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 
 | ||||
| 		if err := writeStrings(buf, append(colNames, exprs.colNames...), "`", "`"); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 
 | ||||
| 		if session.statement.cond.IsValid() { | ||||
| 			condSQL, condArgs, err := builder.ToSQL(session.statement.cond) | ||||
| 			if err != nil { | ||||
| 			if _, err := buf.WriteString(fmt.Sprintf(")%s SELECT ", output)); err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 
 | ||||
| 			sqlStr = fmt.Sprintf("INSERT INTO %s (%v)%s SELECT %v FROM %v WHERE %v", | ||||
| 				session.engine.Quote(tableName), | ||||
| 				quoteColumns(colNames, session.engine.Quote, ","), | ||||
| 				output, | ||||
| 				colPlaces, | ||||
| 				session.engine.Quote(tableName), | ||||
| 				condSQL, | ||||
| 			) | ||||
| 			args = append(args, condArgs...) | ||||
| 			if err := session.statement.writeArgs(buf, args); err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 
 | ||||
| 			if len(exprs.args) > 0 { | ||||
| 				if _, err := buf.WriteString(","); err != nil { | ||||
| 					return 0, err | ||||
| 				} | ||||
| 			} | ||||
| 			if err := exprs.writeArgs(buf); err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 
 | ||||
| 			if _, err := buf.WriteString(fmt.Sprintf(" FROM %v WHERE ", session.engine.Quote(tableName))); err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 
 | ||||
| 			if err := session.statement.cond.WriteTo(buf); err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 		} else { | ||||
| 			sqlStr = fmt.Sprintf("INSERT INTO %s (%v)%s VALUES (%v)", | ||||
| 				session.engine.Quote(tableName), | ||||
| 				quoteColumns(colNames, session.engine.Quote, ","), | ||||
| 			buf.Append(args...) | ||||
| 
 | ||||
| 			if _, err := buf.WriteString(fmt.Sprintf(")%s VALUES (%v", | ||||
| 				output, | ||||
| 				colPlaces) | ||||
| 		} | ||||
| 	} else { | ||||
| 		if session.engine.dialect.DBType() == core.MYSQL { | ||||
| 			sqlStr = fmt.Sprintf("INSERT INTO %s VALUES ()", session.engine.Quote(tableName)) | ||||
| 		} else { | ||||
| 			sqlStr = fmt.Sprintf("INSERT INTO %s%s DEFAULT VALUES", session.engine.Quote(tableName), output) | ||||
| 				colPlaces)); err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 
 | ||||
| 			if err := exprs.writeArgs(buf); err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 
 | ||||
| 			if _, err := buf.WriteString(")"); err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if len(table.AutoIncrement) > 0 && session.engine.dialect.DBType() == core.POSTGRES { | ||||
| 		sqlStr = sqlStr + " RETURNING " + session.engine.Quote(table.AutoIncrement) | ||||
| 		if _, err := buf.WriteString(" RETURNING " + session.engine.Quote(table.AutoIncrement)); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	sqlStr := buf.String() | ||||
| 	args = buf.Args() | ||||
| 
 | ||||
| 	handleAfterInsertProcessorFunc := func(bean interface{}) { | ||||
| 		if session.isAutoCommit { | ||||
| 			for _, closure := range session.afterClosures { | ||||
|  | @ -611,9 +633,11 @@ func (session *Session) genInsertColumns(bean interface{}) ([]string, []interfac | |||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		if _, ok := session.statement.incrColumns[col.Name]; ok { | ||||
| 		if session.statement.incrColumns.isColExist(col.Name) { | ||||
| 			continue | ||||
| 		} else if _, ok := session.statement.decrColumns[col.Name]; ok { | ||||
| 		} else if session.statement.decrColumns.isColExist(col.Name) { | ||||
| 			continue | ||||
| 		} else if session.statement.exprColumns.isColExist(col.Name) { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
|  | @ -688,46 +712,66 @@ func (session *Session) insertMapInterface(m map[string]interface{}) (int64, err | |||
| 	} | ||||
| 
 | ||||
| 	var columns = make([]string, 0, len(m)) | ||||
| 	exprs := session.statement.exprColumns | ||||
| 	for k := range m { | ||||
| 		columns = append(columns, k) | ||||
| 		if !exprs.isColExist(k) { | ||||
| 			columns = append(columns, k) | ||||
| 		} | ||||
| 	} | ||||
| 	sort.Strings(columns) | ||||
| 
 | ||||
| 	qm := strings.Repeat("?,", len(columns)) | ||||
| 
 | ||||
| 	var args = make([]interface{}, 0, len(m)) | ||||
| 	for _, colName := range columns { | ||||
| 		args = append(args, m[colName]) | ||||
| 	} | ||||
| 
 | ||||
| 	// insert expr columns, override if exists | ||||
| 	exprColumns := session.statement.getExpr() | ||||
| 	for _, col := range exprColumns { | ||||
| 		columns = append(columns, strings.Trim(col.colName, "`")) | ||||
| 		qm = qm + col.expr + "," | ||||
| 	} | ||||
| 
 | ||||
| 	qm = qm[:len(qm)-1] | ||||
| 
 | ||||
| 	var sql string | ||||
| 
 | ||||
| 	w := builder.NewWriter() | ||||
| 	if session.statement.cond.IsValid() { | ||||
| 		condSQL, condArgs, err := builder.ToSQL(session.statement.cond) | ||||
| 		if err != nil { | ||||
| 		if _, err := w.WriteString(fmt.Sprintf("INSERT INTO %s (", session.engine.Quote(tableName))); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 
 | ||||
| 		if err := writeStrings(w, append(columns, exprs.colNames...), "`", "`"); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 
 | ||||
| 		if _, err := w.WriteString(") SELECT "); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 
 | ||||
| 		if err := session.statement.writeArgs(w, args); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 
 | ||||
| 		if len(exprs.args) > 0 { | ||||
| 			if _, err := w.WriteString(","); err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 			if err := exprs.writeArgs(w); err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if _, err := w.WriteString(fmt.Sprintf(" FROM %s WHERE ", session.engine.Quote(tableName))); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 
 | ||||
| 		if err := session.statement.cond.WriteTo(w); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 		sql = fmt.Sprintf("INSERT INTO %s (`%s`) SELECT %s FROM %s WHERE %s", | ||||
| 			session.engine.Quote(tableName), | ||||
| 			strings.Join(columns, "`,`"), | ||||
| 			qm, | ||||
| 			session.engine.Quote(tableName), | ||||
| 			condSQL, | ||||
| 		) | ||||
| 		args = append(args, condArgs...) | ||||
| 	} else { | ||||
| 		sql = fmt.Sprintf("INSERT INTO %s (`%s`) VALUES (%s)", session.engine.Quote(tableName), strings.Join(columns, "`,`"), qm) | ||||
| 		qm := strings.Repeat("?,", len(columns)) | ||||
| 		qm = qm[:len(qm)-1] | ||||
| 
 | ||||
| 		if _, err := w.WriteString(fmt.Sprintf("INSERT INTO %s (`%s`) VALUES (%s)", session.engine.Quote(tableName), strings.Join(columns, "`,`"), qm)); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 		w.Append(args...) | ||||
| 	} | ||||
| 
 | ||||
| 	sql := w.String() | ||||
| 	args = w.Args() | ||||
| 
 | ||||
| 	if err := session.cacheInsert(tableName); err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
|  | @ -754,8 +798,11 @@ func (session *Session) insertMapString(m map[string]string) (int64, error) { | |||
| 	} | ||||
| 
 | ||||
| 	var columns = make([]string, 0, len(m)) | ||||
| 	exprs := session.statement.exprColumns | ||||
| 	for k := range m { | ||||
| 		columns = append(columns, k) | ||||
| 		if !exprs.isColExist(k) { | ||||
| 			columns = append(columns, k) | ||||
| 		} | ||||
| 	} | ||||
| 	sort.Strings(columns) | ||||
| 
 | ||||
|  | @ -764,37 +811,53 @@ func (session *Session) insertMapString(m map[string]string) (int64, error) { | |||
| 		args = append(args, m[colName]) | ||||
| 	} | ||||
| 
 | ||||
| 	qm := strings.Repeat("?,", len(columns)) | ||||
| 
 | ||||
| 	// insert expr columns, override if exists | ||||
| 	exprColumns := session.statement.getExpr() | ||||
| 	for _, col := range exprColumns { | ||||
| 		columns = append(columns, strings.Trim(col.colName, "`")) | ||||
| 		qm = qm + col.expr + "," | ||||
| 	} | ||||
| 
 | ||||
| 	qm = qm[:len(qm)-1] | ||||
| 
 | ||||
| 	var sql string | ||||
| 
 | ||||
| 	w := builder.NewWriter() | ||||
| 	if session.statement.cond.IsValid() { | ||||
| 		qm = "(" + qm[:len(qm)-1] + ")" | ||||
| 		condSQL, condArgs, err := builder.ToSQL(session.statement.cond) | ||||
| 		if err != nil { | ||||
| 		if _, err := w.WriteString(fmt.Sprintf("INSERT INTO %s (", session.engine.Quote(tableName))); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 
 | ||||
| 		if err := writeStrings(w, append(columns, exprs.colNames...), "`", "`"); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 
 | ||||
| 		if _, err := w.WriteString(") SELECT "); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 
 | ||||
| 		if err := session.statement.writeArgs(w, args); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 
 | ||||
| 		if len(exprs.args) > 0 { | ||||
| 			if _, err := w.WriteString(","); err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 			if err := exprs.writeArgs(w); err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if _, err := w.WriteString(fmt.Sprintf(" FROM %s WHERE ", session.engine.Quote(tableName))); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 
 | ||||
| 		if err := session.statement.cond.WriteTo(w); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 		sql = fmt.Sprintf("INSERT INTO %s (`%s`) SELECT %s FROM %s WHERE %s", | ||||
| 			session.engine.Quote(tableName), | ||||
| 			strings.Join(columns, "`,`"), | ||||
| 			qm, | ||||
| 			session.engine.Quote(tableName), | ||||
| 			condSQL, | ||||
| 		) | ||||
| 		args = append(args, condArgs...) | ||||
| 	} else { | ||||
| 		sql = fmt.Sprintf("INSERT INTO %s (`%s`) VALUES (%s)", session.engine.Quote(tableName), strings.Join(columns, "`,`"), qm) | ||||
| 		qm := strings.Repeat("?,", len(columns)) | ||||
| 		qm = qm[:len(qm)-1] | ||||
| 
 | ||||
| 		if _, err := w.WriteString(fmt.Sprintf("INSERT INTO %s (`%s`) VALUES (%s)", session.engine.Quote(tableName), strings.Join(columns, "`,`"), qm)); err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 		w.Append(args...) | ||||
| 	} | ||||
| 
 | ||||
| 	sql := w.String() | ||||
| 	args = w.Args() | ||||
| 
 | ||||
| 	if err := session.cacheInsert(tableName); err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
|  |  | |||
							
								
								
									
										51
									
								
								vendor/github.com/go-xorm/xorm/session_update.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								vendor/github.com/go-xorm/xorm/session_update.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -223,21 +223,31 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 | |||
| 	} | ||||
| 
 | ||||
| 	// for update action to like "column = column + ?" | ||||
| 	incColumns := session.statement.getInc() | ||||
| 	for _, v := range incColumns { | ||||
| 		colNames = append(colNames, session.engine.Quote(v.colName)+" = "+session.engine.Quote(v.colName)+" + ?") | ||||
| 		args = append(args, v.arg) | ||||
| 	incColumns := session.statement.incrColumns | ||||
| 	for i, colName := range incColumns.colNames { | ||||
| 		colNames = append(colNames, session.engine.Quote(colName)+" = "+session.engine.Quote(colName)+" + ?") | ||||
| 		args = append(args, incColumns.args[i]) | ||||
| 	} | ||||
| 	// for update action to like "column = column - ?" | ||||
| 	decColumns := session.statement.getDec() | ||||
| 	for _, v := range decColumns { | ||||
| 		colNames = append(colNames, session.engine.Quote(v.colName)+" = "+session.engine.Quote(v.colName)+" - ?") | ||||
| 		args = append(args, v.arg) | ||||
| 	decColumns := session.statement.decrColumns | ||||
| 	for i, colName := range decColumns.colNames { | ||||
| 		colNames = append(colNames, session.engine.Quote(colName)+" = "+session.engine.Quote(colName)+" - ?") | ||||
| 		args = append(args, decColumns.args[i]) | ||||
| 	} | ||||
| 	// for update action to like "column = expression" | ||||
| 	exprColumns := session.statement.getExpr() | ||||
| 	for _, v := range exprColumns { | ||||
| 		colNames = append(colNames, session.engine.Quote(v.colName)+" = "+v.expr) | ||||
| 	exprColumns := session.statement.exprColumns | ||||
| 	for i, colName := range exprColumns.colNames { | ||||
| 		switch tp := exprColumns.args[i].(type) { | ||||
| 		case string: | ||||
| 			colNames = append(colNames, session.engine.Quote(colName)+" = "+tp) | ||||
| 		case *builder.Builder: | ||||
| 			subQuery, subArgs, err := builder.ToSQL(tp) | ||||
| 			if err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 			colNames = append(colNames, session.engine.Quote(colName)+" = ("+subQuery+")") | ||||
| 			args = append(args, subArgs...) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if err = session.statement.processIDParam(); err != nil { | ||||
|  | @ -468,14 +478,17 @@ func (session *Session) genUpdateColumns(bean interface{}) ([]string, []interfac | |||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		if len(session.statement.columnMap) > 0 { | ||||
| 			if !session.statement.columnMap.contain(col.Name) { | ||||
| 				continue | ||||
| 			} else if _, ok := session.statement.incrColumns[col.Name]; ok { | ||||
| 				continue | ||||
| 			} else if _, ok := session.statement.decrColumns[col.Name]; ok { | ||||
| 				continue | ||||
| 			} | ||||
| 		// if only update specify columns | ||||
| 		if len(session.statement.columnMap) > 0 && !session.statement.columnMap.contain(col.Name) { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		if session.statement.incrColumns.isColExist(col.Name) { | ||||
| 			continue | ||||
| 		} else if session.statement.decrColumns.isColExist(col.Name) { | ||||
| 			continue | ||||
| 		} else if session.statement.exprColumns.isColExist(col.Name) { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		// !evalphobia! set fieldValue as nil when column is nullable and zero-value | ||||
|  |  | |||
							
								
								
									
										52
									
								
								vendor/github.com/go-xorm/xorm/statement.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										52
									
								
								vendor/github.com/go-xorm/xorm/statement.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -52,9 +52,9 @@ type Statement struct { | |||
| 	omitColumnMap   columnMap | ||||
| 	mustColumnMap   map[string]bool | ||||
| 	nullableMap     map[string]bool | ||||
| 	incrColumns     map[string]incrParam | ||||
| 	decrColumns     map[string]decrParam | ||||
| 	exprColumns     map[string]exprParam | ||||
| 	incrColumns     exprParams | ||||
| 	decrColumns     exprParams | ||||
| 	exprColumns     exprParams | ||||
| 	cond            builder.Cond | ||||
| 	bufferSize      int | ||||
| 	context         ContextCache | ||||
|  | @ -94,9 +94,9 @@ func (statement *Statement) Init() { | |||
| 	statement.nullableMap = make(map[string]bool) | ||||
| 	statement.checkVersion = true | ||||
| 	statement.unscoped = false | ||||
| 	statement.incrColumns = make(map[string]incrParam) | ||||
| 	statement.decrColumns = make(map[string]decrParam) | ||||
| 	statement.exprColumns = make(map[string]exprParam) | ||||
| 	statement.incrColumns = exprParams{} | ||||
| 	statement.decrColumns = exprParams{} | ||||
| 	statement.exprColumns = exprParams{} | ||||
| 	statement.cond = builder.NewCond() | ||||
| 	statement.bufferSize = 0 | ||||
| 	statement.context = nil | ||||
|  | @ -534,48 +534,30 @@ func (statement *Statement) ID(id interface{}) *Statement { | |||
| 
 | ||||
| // Incr Generate  "Update ... Set column = column + arg" statement | ||||
| func (statement *Statement) Incr(column string, arg ...interface{}) *Statement { | ||||
| 	k := strings.ToLower(column) | ||||
| 	if len(arg) > 0 { | ||||
| 		statement.incrColumns[k] = incrParam{column, arg[0]} | ||||
| 		statement.incrColumns.addParam(column, arg[0]) | ||||
| 	} else { | ||||
| 		statement.incrColumns[k] = incrParam{column, 1} | ||||
| 		statement.incrColumns.addParam(column, 1) | ||||
| 	} | ||||
| 	return statement | ||||
| } | ||||
| 
 | ||||
| // Decr Generate  "Update ... Set column = column - arg" statement | ||||
| func (statement *Statement) Decr(column string, arg ...interface{}) *Statement { | ||||
| 	k := strings.ToLower(column) | ||||
| 	if len(arg) > 0 { | ||||
| 		statement.decrColumns[k] = decrParam{column, arg[0]} | ||||
| 		statement.decrColumns.addParam(column, arg[0]) | ||||
| 	} else { | ||||
| 		statement.decrColumns[k] = decrParam{column, 1} | ||||
| 		statement.decrColumns.addParam(column, 1) | ||||
| 	} | ||||
| 	return statement | ||||
| } | ||||
| 
 | ||||
| // SetExpr Generate  "Update ... Set column = {expression}" statement | ||||
| func (statement *Statement) SetExpr(column string, expression string) *Statement { | ||||
| 	k := strings.ToLower(column) | ||||
| 	statement.exprColumns[k] = exprParam{column, expression} | ||||
| func (statement *Statement) SetExpr(column string, expression interface{}) *Statement { | ||||
| 	statement.exprColumns.addParam(column, expression) | ||||
| 	return statement | ||||
| } | ||||
| 
 | ||||
| // Generate  "Update ... Set column = column + arg" statement | ||||
| func (statement *Statement) getInc() map[string]incrParam { | ||||
| 	return statement.incrColumns | ||||
| } | ||||
| 
 | ||||
| // Generate  "Update ... Set column = column - arg" statement | ||||
| func (statement *Statement) getDec() map[string]decrParam { | ||||
| 	return statement.decrColumns | ||||
| } | ||||
| 
 | ||||
| // Generate  "Update ... Set column = {expression}" statement | ||||
| func (statement *Statement) getExpr() map[string]exprParam { | ||||
| 	return statement.exprColumns | ||||
| } | ||||
| 
 | ||||
| func (statement *Statement) col2NewColsWithQuote(columns ...string) []string { | ||||
| 	newColumns := make([]string, 0) | ||||
| 	quotes := append(strings.Split(statement.Engine.Quote(""), ""), "`") | ||||
|  | @ -695,7 +677,7 @@ func (statement *Statement) OrderBy(order string) *Statement { | |||
| 
 | ||||
| // Desc generate `ORDER BY xx DESC` | ||||
| func (statement *Statement) Desc(colNames ...string) *Statement { | ||||
| 	var buf builder.StringBuilder | ||||
| 	var buf strings.Builder | ||||
| 	if len(statement.OrderStr) > 0 { | ||||
| 		fmt.Fprint(&buf, statement.OrderStr, ", ") | ||||
| 	} | ||||
|  | @ -707,7 +689,7 @@ func (statement *Statement) Desc(colNames ...string) *Statement { | |||
| 
 | ||||
| // Asc provide asc order by query condition, the input parameters are columns. | ||||
| func (statement *Statement) Asc(colNames ...string) *Statement { | ||||
| 	var buf builder.StringBuilder | ||||
| 	var buf strings.Builder | ||||
| 	if len(statement.OrderStr) > 0 { | ||||
| 		fmt.Fprint(&buf, statement.OrderStr, ", ") | ||||
| 	} | ||||
|  | @ -736,7 +718,7 @@ func (statement *Statement) Table(tableNameOrBean interface{}) *Statement { | |||
| 
 | ||||
| // Join The joinOP should be one of INNER, LEFT OUTER, CROSS etc - this will be prepended to JOIN | ||||
| func (statement *Statement) Join(joinOP string, tablename interface{}, condition string, args ...interface{}) *Statement { | ||||
| 	var buf builder.StringBuilder | ||||
| 	var buf strings.Builder | ||||
| 	if len(statement.JoinStr) > 0 { | ||||
| 		fmt.Fprintf(&buf, "%v %v JOIN ", statement.JoinStr, joinOP) | ||||
| 	} else { | ||||
|  | @ -801,7 +783,7 @@ func (statement *Statement) genColumnStr() string { | |||
| 		return "" | ||||
| 	} | ||||
| 
 | ||||
| 	var buf builder.StringBuilder | ||||
| 	var buf strings.Builder | ||||
| 	columns := statement.RefTable.Columns() | ||||
| 
 | ||||
| 	for _, col := range columns { | ||||
|  | @ -1118,7 +1100,7 @@ func (statement *Statement) genSelectSQL(columnStr, condSQL string, needLimit, n | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	var buf builder.StringBuilder | ||||
| 	var buf strings.Builder | ||||
| 	fmt.Fprintf(&buf, "SELECT %v%v%v%v%v", distinct, top, columnStr, fromStr, whereStr) | ||||
| 	if len(mssqlCondi) > 0 { | ||||
| 		if len(whereStr) > 0 { | ||||
|  |  | |||
							
								
								
									
										97
									
								
								vendor/github.com/go-xorm/xorm/statement_args.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								vendor/github.com/go-xorm/xorm/statement_args.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,97 @@ | |||
| // Copyright 2019 The Xorm Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package xorm | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"xorm.io/builder" | ||||
| 	"xorm.io/core" | ||||
| ) | ||||
| 
 | ||||
| func (statement *Statement) writeArg(w *builder.BytesWriter, arg interface{}) error { | ||||
| 	switch argv := arg.(type) { | ||||
| 	case string: | ||||
| 		if _, err := w.WriteString("'" + argv + "'"); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	case bool: | ||||
| 		if statement.Engine.dialect.DBType() == core.MSSQL { | ||||
| 			if argv { | ||||
| 				if _, err := w.WriteString("1"); err != nil { | ||||
| 					return err | ||||
| 				} | ||||
| 			} else { | ||||
| 				if _, err := w.WriteString("0"); err != nil { | ||||
| 					return err | ||||
| 				} | ||||
| 			} | ||||
| 		} else { | ||||
| 			if argv { | ||||
| 				if _, err := w.WriteString("true"); err != nil { | ||||
| 					return err | ||||
| 				} | ||||
| 			} else { | ||||
| 				if _, err := w.WriteString("false"); err != nil { | ||||
| 					return err | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	case *builder.Builder: | ||||
| 		if _, err := w.WriteString("("); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if err := argv.WriteTo(w); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if _, err := w.WriteString(")"); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	default: | ||||
| 		if _, err := w.WriteString(fmt.Sprintf("%v", argv)); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (statement *Statement) writeArgs(w *builder.BytesWriter, args []interface{}) error { | ||||
| 	for i, arg := range args { | ||||
| 		if err := statement.writeArg(w, arg); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 
 | ||||
| 		if i+1 != len(args) { | ||||
| 			if _, err := w.WriteString(","); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func writeStrings(w *builder.BytesWriter, cols []string, leftQuote, rightQuote string) error { | ||||
| 	for i, colName := range cols { | ||||
| 		if len(leftQuote) > 0 && colName[0] != '`' { | ||||
| 			if _, err := w.WriteString(leftQuote); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 		if _, err := w.WriteString(colName); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if len(rightQuote) > 0 && colName[len(colName)-1] != '`' { | ||||
| 			if _, err := w.WriteString(rightQuote); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 		if i+1 != len(cols) { | ||||
| 			if _, err := w.WriteString(","); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										35
									
								
								vendor/github.com/go-xorm/xorm/statement_columnmap.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/go-xorm/xorm/statement_columnmap.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | |||
| // Copyright 2019 The Xorm Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package xorm | ||||
| 
 | ||||
| import "strings" | ||||
| 
 | ||||
| type columnMap []string | ||||
| 
 | ||||
| func (m columnMap) contain(colName string) bool { | ||||
| 	if len(m) == 0 { | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
| 	n := len(colName) | ||||
| 	for _, mk := range m { | ||||
| 		if len(mk) != n { | ||||
| 			continue | ||||
| 		} | ||||
| 		if strings.EqualFold(mk, colName) { | ||||
| 			return true | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| func (m *columnMap) add(colName string) bool { | ||||
| 	if m.contain(colName) { | ||||
| 		return false | ||||
| 	} | ||||
| 	*m = append(*m, colName) | ||||
| 	return true | ||||
| } | ||||
							
								
								
									
										112
									
								
								vendor/github.com/go-xorm/xorm/statement_exprparam.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								vendor/github.com/go-xorm/xorm/statement_exprparam.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,112 @@ | |||
| // Copyright 2019 The Xorm Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package xorm | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"xorm.io/builder" | ||||
| ) | ||||
| 
 | ||||
| type ErrUnsupportedExprType struct { | ||||
| 	tp string | ||||
| } | ||||
| 
 | ||||
| func (err ErrUnsupportedExprType) Error() string { | ||||
| 	return fmt.Sprintf("Unsupported expression type: %v", err.tp) | ||||
| } | ||||
| 
 | ||||
| type exprParam struct { | ||||
| 	colName string | ||||
| 	arg     interface{} | ||||
| } | ||||
| 
 | ||||
| type exprParams struct { | ||||
| 	colNames []string | ||||
| 	args     []interface{} | ||||
| } | ||||
| 
 | ||||
| func (exprs *exprParams) Len() int { | ||||
| 	return len(exprs.colNames) | ||||
| } | ||||
| 
 | ||||
| func (exprs *exprParams) addParam(colName string, arg interface{}) { | ||||
| 	exprs.colNames = append(exprs.colNames, colName) | ||||
| 	exprs.args = append(exprs.args, arg) | ||||
| } | ||||
| 
 | ||||
| func (exprs *exprParams) isColExist(colName string) bool { | ||||
| 	for _, name := range exprs.colNames { | ||||
| 		if strings.EqualFold(trimQuote(name), trimQuote(colName)) { | ||||
| 			return true | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| func (exprs *exprParams) getByName(colName string) (exprParam, bool) { | ||||
| 	for i, name := range exprs.colNames { | ||||
| 		if strings.EqualFold(name, colName) { | ||||
| 			return exprParam{name, exprs.args[i]}, true | ||||
| 		} | ||||
| 	} | ||||
| 	return exprParam{}, false | ||||
| } | ||||
| 
 | ||||
| func (exprs *exprParams) writeArgs(w *builder.BytesWriter) error { | ||||
| 	for _, expr := range exprs.args { | ||||
| 		switch arg := expr.(type) { | ||||
| 		case *builder.Builder: | ||||
| 			if _, err := w.WriteString("("); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			if err := arg.WriteTo(w); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			if _, err := w.WriteString(")"); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		default: | ||||
| 			if _, err := w.WriteString(fmt.Sprintf("%v", arg)); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (exprs *exprParams) writeNameArgs(w *builder.BytesWriter) error { | ||||
| 	for i, colName := range exprs.colNames { | ||||
| 		if _, err := w.WriteString(colName); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if _, err := w.WriteString("="); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 
 | ||||
| 		switch arg := exprs.args[i].(type) { | ||||
| 		case *builder.Builder: | ||||
| 			if _, err := w.WriteString("("); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			if err := arg.WriteTo(w); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			if _, err := w.WriteString("("); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		default: | ||||
| 			w.Append(exprs.args[i]) | ||||
| 		} | ||||
| 
 | ||||
| 		if i+1 != len(exprs.colNames) { | ||||
| 			if _, err := w.WriteString(","); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										19
									
								
								vendor/github.com/go-xorm/xorm/statement_quote.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/go-xorm/xorm/statement_quote.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| // Copyright 2019 The Xorm Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package xorm | ||||
| 
 | ||||
| func trimQuote(s string) string { | ||||
| 	if len(s) == 0 { | ||||
| 		return s | ||||
| 	} | ||||
| 
 | ||||
| 	if s[0] == '`' { | ||||
| 		s = s[1:] | ||||
| 	} | ||||
| 	if len(s) > 0 && s[len(s)-1] == '`' { | ||||
| 		return s[:len(s)-1] | ||||
| 	} | ||||
| 	return s | ||||
| } | ||||
							
								
								
									
										2
									
								
								vendor/github.com/go-xorm/xorm/test_mssql.sh
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/go-xorm/xorm/test_mssql.sh
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -1 +1 @@ | |||
| go test -db=mssql -conn_str="server=localhost;user id=sa;password=yourStrong(!)Password;database=xorm_test" | ||||
| go test -db=mssql -conn_str="server=localhost;user id=sa;password=MwantsaSecurePassword1;database=xorm_test" | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue