mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Retry create issue to cope with duplicate keys (#7898)
* Retry create issue to cope with duplicate keys * Use .SetExpr().Where().Insert()
This commit is contained in:
		
				
					committed by
					
						
						techknowlogick
					
				
			
			
				
	
			
			
			
						parent
						
							541fab196f
						
					
				
				
					commit
					5fe2ec264f
				
			
							
								
								
									
										518
									
								
								vendor/github.com/go-xorm/xorm/.drone.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										518
									
								
								vendor/github.com/go-xorm/xorm/.drone.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,125 +1,431 @@
 | 
			
		||||
---
 | 
			
		||||
kind: pipeline
 | 
			
		||||
name: matrix-1
 | 
			
		||||
 | 
			
		||||
platform:
 | 
			
		||||
  os: linux
 | 
			
		||||
  arch: amd64
 | 
			
		||||
 | 
			
		||||
clone:
 | 
			
		||||
  disable: true
 | 
			
		||||
 | 
			
		||||
workspace:
 | 
			
		||||
  base: /go
 | 
			
		||||
  path: src/github.com/go-xorm/xorm
 | 
			
		||||
 | 
			
		||||
clone:
 | 
			
		||||
  git:
 | 
			
		||||
    image: plugins/git:next
 | 
			
		||||
steps:
 | 
			
		||||
- name: git
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: plugins/git:next
 | 
			
		||||
  settings:
 | 
			
		||||
    depth: 50
 | 
			
		||||
    tags: true
 | 
			
		||||
 | 
			
		||||
- name: init_postgres
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: postgres:9.5
 | 
			
		||||
  commands:
 | 
			
		||||
  - "until psql -U postgres -d xorm_test -h pgsql \\\n -c \"SELECT 1;\" >/dev/null 2>&1; do sleep 1; done\n"
 | 
			
		||||
  - "psql -U postgres -d xorm_test -h pgsql \\\n  -c \"create schema xorm;\"\n"
 | 
			
		||||
 | 
			
		||||
- name: build
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.10
 | 
			
		||||
  commands:
 | 
			
		||||
  - go get -t -d -v ./...
 | 
			
		||||
  - go get -u xorm.io/core
 | 
			
		||||
  - go get -u xorm.io/builder
 | 
			
		||||
  - go build -v
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-sqlite
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.10
 | 
			
		||||
  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:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-mysql
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.10
 | 
			
		||||
  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"
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-mysql-utf8mb4
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.10
 | 
			
		||||
  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"
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-mymysql
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.10
 | 
			
		||||
  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"
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-postgres
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.10
 | 
			
		||||
  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"
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-postgres-schema
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.10
 | 
			
		||||
  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
 | 
			
		||||
 | 
			
		||||
services:
 | 
			
		||||
  mysql:
 | 
			
		||||
    image: mysql:5.7
 | 
			
		||||
    environment:
 | 
			
		||||
      - MYSQL_DATABASE=xorm_test
 | 
			
		||||
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
 | 
			
		||||
    when:
 | 
			
		||||
      event: [ push, tag, pull_request ]
 | 
			
		||||
- name: mysql
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: mysql:5.7
 | 
			
		||||
  environment:
 | 
			
		||||
    MYSQL_ALLOW_EMPTY_PASSWORD: yes
 | 
			
		||||
    MYSQL_DATABASE: xorm_test
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - tag
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
  pgsql:
 | 
			
		||||
    image: postgres:9.5
 | 
			
		||||
    environment:
 | 
			
		||||
      - POSTGRES_USER=postgres
 | 
			
		||||
      - POSTGRES_DB=xorm_test
 | 
			
		||||
    when:
 | 
			
		||||
      event: [ push, tag, pull_request ]
 | 
			
		||||
- name: pgsql
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: postgres:9.5
 | 
			
		||||
  environment:
 | 
			
		||||
    POSTGRES_DB: xorm_test
 | 
			
		||||
    POSTGRES_USER: postgres
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - tag
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
  #mssql:
 | 
			
		||||
  #  image: microsoft/mssql-server-linux:2017-CU11
 | 
			
		||||
  #  environment:
 | 
			
		||||
  #    - ACCEPT_EULA=Y
 | 
			
		||||
  #    - SA_PASSWORD=yourStrong(!)Password
 | 
			
		||||
  #    - MSSQL_PID=Developer
 | 
			
		||||
  #  commands:
 | 
			
		||||
  #    - echo 'CREATE DATABASE xorm_test' > create.sql
 | 
			
		||||
  #    - /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P yourStrong(!)Password -i "create.sql"
 | 
			
		||||
---
 | 
			
		||||
kind: pipeline
 | 
			
		||||
name: matrix-2
 | 
			
		||||
 | 
			
		||||
matrix:
 | 
			
		||||
  GO_VERSION:
 | 
			
		||||
    - 1.8
 | 
			
		||||
    - 1.9
 | 
			
		||||
    - 1.10
 | 
			
		||||
    - 1.11
 | 
			
		||||
platform:
 | 
			
		||||
  os: linux
 | 
			
		||||
  arch: amd64
 | 
			
		||||
 | 
			
		||||
pipeline:
 | 
			
		||||
  init_postgres:
 | 
			
		||||
    image: postgres:9.5
 | 
			
		||||
    commands:
 | 
			
		||||
      # wait for postgres service to become available
 | 
			
		||||
      - |
 | 
			
		||||
        until psql -U postgres -d xorm_test -h pgsql \
 | 
			
		||||
         -c "SELECT 1;" >/dev/null 2>&1; do sleep 1; done
 | 
			
		||||
      # query the database
 | 
			
		||||
      - |
 | 
			
		||||
        psql -U postgres -d xorm_test -h pgsql \
 | 
			
		||||
          -c "create schema xorm;"
 | 
			
		||||
clone:
 | 
			
		||||
  disable: true
 | 
			
		||||
 | 
			
		||||
  build:
 | 
			
		||||
    image: golang:${GO_VERSION}
 | 
			
		||||
    commands:
 | 
			
		||||
      - go get -t -d -v ./...
 | 
			
		||||
      - go get -u xorm.io/core
 | 
			
		||||
      - go get -u xorm.io/builder
 | 
			
		||||
      - go build -v
 | 
			
		||||
    when:
 | 
			
		||||
      event: [ push, pull_request ]
 | 
			
		||||
workspace:
 | 
			
		||||
  base: /go
 | 
			
		||||
  path: src/github.com/go-xorm/xorm
 | 
			
		||||
 | 
			
		||||
  test-sqlite:
 | 
			
		||||
    image: golang:${GO_VERSION}
 | 
			
		||||
    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:
 | 
			
		||||
      event: [ push, pull_request ]
 | 
			
		||||
steps:
 | 
			
		||||
- name: git
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: plugins/git:next
 | 
			
		||||
  settings:
 | 
			
		||||
    depth: 50
 | 
			
		||||
    tags: true
 | 
			
		||||
 | 
			
		||||
  test-mysql:
 | 
			
		||||
    image: golang:${GO_VERSION}
 | 
			
		||||
    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
 | 
			
		||||
    when:
 | 
			
		||||
      event: [ push, pull_request ]
 | 
			
		||||
- name: init_postgres
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: postgres:9.5
 | 
			
		||||
  commands:
 | 
			
		||||
  - "until psql -U postgres -d xorm_test -h pgsql \\\n -c \"SELECT 1;\" >/dev/null 2>&1; do sleep 1; done\n"
 | 
			
		||||
  - "psql -U postgres -d xorm_test -h pgsql \\\n  -c \"create schema xorm;\"\n"
 | 
			
		||||
 | 
			
		||||
  test-mysql-utf8mb4:
 | 
			
		||||
    image: golang:${GO_VERSION}
 | 
			
		||||
    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
 | 
			
		||||
    when:
 | 
			
		||||
      event: [ push, pull_request ]
 | 
			
		||||
- name: build
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.11
 | 
			
		||||
  commands:
 | 
			
		||||
    - go get -t -d -v ./...	
 | 
			
		||||
    - go get -u xorm.io/core	
 | 
			
		||||
    - go get -u xorm.io/builder
 | 
			
		||||
    - GO111MODULE=off go build -v
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
  test-mymysql:
 | 
			
		||||
    image: golang:${GO_VERSION}
 | 
			
		||||
    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
 | 
			
		||||
    when:
 | 
			
		||||
      event: [ push, pull_request ]
 | 
			
		||||
- name: build-gomod
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.11
 | 
			
		||||
  environment:
 | 
			
		||||
    GOPROXY: "https://goproxy.cn"
 | 
			
		||||
  commands:
 | 
			
		||||
    - GO111MODULE=on go build -v
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
  test-postgres:
 | 
			
		||||
    image: golang:${GO_VERSION}
 | 
			
		||||
    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
 | 
			
		||||
    when:
 | 
			
		||||
      event: [ push, pull_request ]
 | 
			
		||||
  
 | 
			
		||||
  test-postgres-schema:
 | 
			
		||||
    image: golang:${GO_VERSION}
 | 
			
		||||
    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-sqlite
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.11
 | 
			
		||||
  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:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
  #coverage:
 | 
			
		||||
  #  image: robertstettner/drone-codecov
 | 
			
		||||
  #  secrets: [ codecov_token ]
 | 
			
		||||
  #  files:
 | 
			
		||||
  #    - coverage.txt
 | 
			
		||||
  #  when:
 | 
			
		||||
  #    event: [ push, pull_request ]
 | 
			
		||||
  #    branch: [ master ]
 | 
			
		||||
- name: test-mysql
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.11
 | 
			
		||||
  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"
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-mysql-utf8mb4
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.11
 | 
			
		||||
  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"
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-mymysql
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.11
 | 
			
		||||
  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"
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-postgres
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.11
 | 
			
		||||
  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"
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-postgres-schema
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.11
 | 
			
		||||
  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
 | 
			
		||||
 | 
			
		||||
services:
 | 
			
		||||
- name: mysql
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: mysql:5.7
 | 
			
		||||
  environment:
 | 
			
		||||
    MYSQL_ALLOW_EMPTY_PASSWORD: yes
 | 
			
		||||
    MYSQL_DATABASE: xorm_test
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - tag
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: pgsql
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: postgres:9.5
 | 
			
		||||
  environment:
 | 
			
		||||
    POSTGRES_DB: xorm_test
 | 
			
		||||
    POSTGRES_USER: postgres
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - tag
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
kind: pipeline
 | 
			
		||||
name: matrix-3
 | 
			
		||||
 | 
			
		||||
platform:
 | 
			
		||||
  os: linux
 | 
			
		||||
  arch: amd64
 | 
			
		||||
 | 
			
		||||
clone:
 | 
			
		||||
  disable: true
 | 
			
		||||
 | 
			
		||||
workspace:
 | 
			
		||||
  base: /go
 | 
			
		||||
  path: src/github.com/go-xorm/xorm
 | 
			
		||||
 | 
			
		||||
steps:
 | 
			
		||||
- name: git
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: plugins/git:next
 | 
			
		||||
  settings:
 | 
			
		||||
    depth: 50
 | 
			
		||||
    tags: true
 | 
			
		||||
 | 
			
		||||
- name: init_postgres
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: postgres:9.5
 | 
			
		||||
  commands:
 | 
			
		||||
  - "until psql -U postgres -d xorm_test -h pgsql \\\n -c \"SELECT 1;\" >/dev/null 2>&1; do sleep 1; done\n"
 | 
			
		||||
  - "psql -U postgres -d xorm_test -h pgsql \\\n  -c \"create schema xorm;\"\n"
 | 
			
		||||
 | 
			
		||||
- name: build
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.12
 | 
			
		||||
  commands:
 | 
			
		||||
    - go get -t -d -v ./...	
 | 
			
		||||
    - go get -u xorm.io/core	
 | 
			
		||||
    - go get -u xorm.io/builder
 | 
			
		||||
    - GO111MODULE=off go build -v
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: build-gomod
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.12
 | 
			
		||||
  environment:
 | 
			
		||||
    GOPROXY: "https://goproxy.cn" 
 | 
			
		||||
  commands:
 | 
			
		||||
    - GO111MODULE=on go build -v
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-sqlite
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.12
 | 
			
		||||
  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:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-mysql
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.12
 | 
			
		||||
  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"
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-mysql-utf8mb4
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.12
 | 
			
		||||
  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"
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-mymysql
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.12
 | 
			
		||||
  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"
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-postgres
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.12
 | 
			
		||||
  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"
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: test-postgres-schema
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: golang:1.12
 | 
			
		||||
  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
 | 
			
		||||
 | 
			
		||||
services:
 | 
			
		||||
- name: mysql
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: mysql:5.7
 | 
			
		||||
  environment:
 | 
			
		||||
    MYSQL_ALLOW_EMPTY_PASSWORD: yes
 | 
			
		||||
    MYSQL_DATABASE: xorm_test
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - tag
 | 
			
		||||
    - pull_request
 | 
			
		||||
 | 
			
		||||
- name: pgsql
 | 
			
		||||
  pull: default
 | 
			
		||||
  image: postgres:9.5
 | 
			
		||||
  environment:
 | 
			
		||||
    POSTGRES_DB: xorm_test
 | 
			
		||||
    POSTGRES_USER: postgres
 | 
			
		||||
  when:
 | 
			
		||||
    event:
 | 
			
		||||
    - push
 | 
			
		||||
    - tag
 | 
			
		||||
    - pull_request
 | 
			
		||||
							
								
								
									
										7
									
								
								vendor/github.com/go-xorm/xorm/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/github.com/go-xorm/xorm/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -284,6 +284,13 @@ counts, err := engine.Count(&user)
 | 
			
		||||
// SELECT count(*) AS total FROM user
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `FindAndCount` combines function `Find` with `Count` which is usually used in query by page
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
var users []User
 | 
			
		||||
counts, err := engine.FindAndCount(&users)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Sum` sum functions
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										374
									
								
								vendor/github.com/go-xorm/xorm/dialect_mssql.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										374
									
								
								vendor/github.com/go-xorm/xorm/dialect_mssql.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -16,191 +16,191 @@ import (
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	mssqlReservedWords = map[string]bool{
 | 
			
		||||
		"ADD":                    true,
 | 
			
		||||
		"EXTERNAL":               true,
 | 
			
		||||
		"PROCEDURE":              true,
 | 
			
		||||
		"ALL":                    true,
 | 
			
		||||
		"FETCH":                  true,
 | 
			
		||||
		"PUBLIC":                 true,
 | 
			
		||||
		"ALTER":                  true,
 | 
			
		||||
		"FILE":                   true,
 | 
			
		||||
		"RAISERROR":              true,
 | 
			
		||||
		"AND":                    true,
 | 
			
		||||
		"FILLFACTOR":             true,
 | 
			
		||||
		"READ":                   true,
 | 
			
		||||
		"ANY":                    true,
 | 
			
		||||
		"FOR":                    true,
 | 
			
		||||
		"READTEXT":               true,
 | 
			
		||||
		"AS":                     true,
 | 
			
		||||
		"FOREIGN":                true,
 | 
			
		||||
		"RECONFIGURE":            true,
 | 
			
		||||
		"ASC":                    true,
 | 
			
		||||
		"FREETEXT":               true,
 | 
			
		||||
		"REFERENCES":             true,
 | 
			
		||||
		"AUTHORIZATION":          true,
 | 
			
		||||
		"FREETEXTTABLE":          true,
 | 
			
		||||
		"REPLICATION":            true,
 | 
			
		||||
		"BACKUP":                 true,
 | 
			
		||||
		"FROM":                   true,
 | 
			
		||||
		"RESTORE":                true,
 | 
			
		||||
		"BEGIN":                  true,
 | 
			
		||||
		"FULL":                   true,
 | 
			
		||||
		"RESTRICT":               true,
 | 
			
		||||
		"BETWEEN":                true,
 | 
			
		||||
		"FUNCTION":               true,
 | 
			
		||||
		"RETURN":                 true,
 | 
			
		||||
		"BREAK":                  true,
 | 
			
		||||
		"GOTO":                   true,
 | 
			
		||||
		"REVERT":                 true,
 | 
			
		||||
		"BROWSE":                 true,
 | 
			
		||||
		"GRANT":                  true,
 | 
			
		||||
		"REVOKE":                 true,
 | 
			
		||||
		"BULK":                   true,
 | 
			
		||||
		"GROUP":                  true,
 | 
			
		||||
		"RIGHT":                  true,
 | 
			
		||||
		"BY":                     true,
 | 
			
		||||
		"HAVING":                 true,
 | 
			
		||||
		"ROLLBACK":               true,
 | 
			
		||||
		"CASCADE":                true,
 | 
			
		||||
		"HOLDLOCK":               true,
 | 
			
		||||
		"ROWCOUNT":               true,
 | 
			
		||||
		"CASE":                   true,
 | 
			
		||||
		"IDENTITY":               true,
 | 
			
		||||
		"ROWGUIDCOL":             true,
 | 
			
		||||
		"CHECK":                  true,
 | 
			
		||||
		"IDENTITY_INSERT":        true,
 | 
			
		||||
		"RULE":                   true,
 | 
			
		||||
		"CHECKPOINT":             true,
 | 
			
		||||
		"IDENTITYCOL":            true,
 | 
			
		||||
		"SAVE":                   true,
 | 
			
		||||
		"CLOSE":                  true,
 | 
			
		||||
		"IF":                     true,
 | 
			
		||||
		"SCHEMA":                 true,
 | 
			
		||||
		"CLUSTERED":              true,
 | 
			
		||||
		"IN":                     true,
 | 
			
		||||
		"SECURITYAUDIT":          true,
 | 
			
		||||
		"COALESCE":               true,
 | 
			
		||||
		"INDEX":                  true,
 | 
			
		||||
		"SELECT":                 true,
 | 
			
		||||
		"COLLATE":                true,
 | 
			
		||||
		"INNER":                  true,
 | 
			
		||||
		"SEMANTICKEYPHRASETABLE": true,
 | 
			
		||||
		"COLUMN":                 true,
 | 
			
		||||
		"INSERT":                 true,
 | 
			
		||||
		"ADD":                            true,
 | 
			
		||||
		"EXTERNAL":                       true,
 | 
			
		||||
		"PROCEDURE":                      true,
 | 
			
		||||
		"ALL":                            true,
 | 
			
		||||
		"FETCH":                          true,
 | 
			
		||||
		"PUBLIC":                         true,
 | 
			
		||||
		"ALTER":                          true,
 | 
			
		||||
		"FILE":                           true,
 | 
			
		||||
		"RAISERROR":                      true,
 | 
			
		||||
		"AND":                            true,
 | 
			
		||||
		"FILLFACTOR":                     true,
 | 
			
		||||
		"READ":                           true,
 | 
			
		||||
		"ANY":                            true,
 | 
			
		||||
		"FOR":                            true,
 | 
			
		||||
		"READTEXT":                       true,
 | 
			
		||||
		"AS":                             true,
 | 
			
		||||
		"FOREIGN":                        true,
 | 
			
		||||
		"RECONFIGURE":                    true,
 | 
			
		||||
		"ASC":                            true,
 | 
			
		||||
		"FREETEXT":                       true,
 | 
			
		||||
		"REFERENCES":                     true,
 | 
			
		||||
		"AUTHORIZATION":                  true,
 | 
			
		||||
		"FREETEXTTABLE":                  true,
 | 
			
		||||
		"REPLICATION":                    true,
 | 
			
		||||
		"BACKUP":                         true,
 | 
			
		||||
		"FROM":                           true,
 | 
			
		||||
		"RESTORE":                        true,
 | 
			
		||||
		"BEGIN":                          true,
 | 
			
		||||
		"FULL":                           true,
 | 
			
		||||
		"RESTRICT":                       true,
 | 
			
		||||
		"BETWEEN":                        true,
 | 
			
		||||
		"FUNCTION":                       true,
 | 
			
		||||
		"RETURN":                         true,
 | 
			
		||||
		"BREAK":                          true,
 | 
			
		||||
		"GOTO":                           true,
 | 
			
		||||
		"REVERT":                         true,
 | 
			
		||||
		"BROWSE":                         true,
 | 
			
		||||
		"GRANT":                          true,
 | 
			
		||||
		"REVOKE":                         true,
 | 
			
		||||
		"BULK":                           true,
 | 
			
		||||
		"GROUP":                          true,
 | 
			
		||||
		"RIGHT":                          true,
 | 
			
		||||
		"BY":                             true,
 | 
			
		||||
		"HAVING":                         true,
 | 
			
		||||
		"ROLLBACK":                       true,
 | 
			
		||||
		"CASCADE":                        true,
 | 
			
		||||
		"HOLDLOCK":                       true,
 | 
			
		||||
		"ROWCOUNT":                       true,
 | 
			
		||||
		"CASE":                           true,
 | 
			
		||||
		"IDENTITY":                       true,
 | 
			
		||||
		"ROWGUIDCOL":                     true,
 | 
			
		||||
		"CHECK":                          true,
 | 
			
		||||
		"IDENTITY_INSERT":                true,
 | 
			
		||||
		"RULE":                           true,
 | 
			
		||||
		"CHECKPOINT":                     true,
 | 
			
		||||
		"IDENTITYCOL":                    true,
 | 
			
		||||
		"SAVE":                           true,
 | 
			
		||||
		"CLOSE":                          true,
 | 
			
		||||
		"IF":                             true,
 | 
			
		||||
		"SCHEMA":                         true,
 | 
			
		||||
		"CLUSTERED":                      true,
 | 
			
		||||
		"IN":                             true,
 | 
			
		||||
		"SECURITYAUDIT":                  true,
 | 
			
		||||
		"COALESCE":                       true,
 | 
			
		||||
		"INDEX":                          true,
 | 
			
		||||
		"SELECT":                         true,
 | 
			
		||||
		"COLLATE":                        true,
 | 
			
		||||
		"INNER":                          true,
 | 
			
		||||
		"SEMANTICKEYPHRASETABLE":         true,
 | 
			
		||||
		"COLUMN":                         true,
 | 
			
		||||
		"INSERT":                         true,
 | 
			
		||||
		"SEMANTICSIMILARITYDETAILSTABLE": true,
 | 
			
		||||
		"COMMIT":                  true,
 | 
			
		||||
		"INTERSECT":               true,
 | 
			
		||||
		"SEMANTICSIMILARITYTABLE": true,
 | 
			
		||||
		"COMPUTE":                 true,
 | 
			
		||||
		"INTO":                    true,
 | 
			
		||||
		"SESSION_USER":            true,
 | 
			
		||||
		"CONSTRAINT":              true,
 | 
			
		||||
		"IS":                      true,
 | 
			
		||||
		"SET":                     true,
 | 
			
		||||
		"CONTAINS":                true,
 | 
			
		||||
		"JOIN":                    true,
 | 
			
		||||
		"SETUSER":                 true,
 | 
			
		||||
		"CONTAINSTABLE":           true,
 | 
			
		||||
		"KEY":                     true,
 | 
			
		||||
		"SHUTDOWN":                true,
 | 
			
		||||
		"CONTINUE":                true,
 | 
			
		||||
		"KILL":                    true,
 | 
			
		||||
		"SOME":                    true,
 | 
			
		||||
		"CONVERT":                 true,
 | 
			
		||||
		"LEFT":                    true,
 | 
			
		||||
		"STATISTICS":              true,
 | 
			
		||||
		"CREATE":                  true,
 | 
			
		||||
		"LIKE":                    true,
 | 
			
		||||
		"SYSTEM_USER":             true,
 | 
			
		||||
		"CROSS":                   true,
 | 
			
		||||
		"LINENO":                  true,
 | 
			
		||||
		"TABLE":                   true,
 | 
			
		||||
		"CURRENT":                 true,
 | 
			
		||||
		"LOAD":                    true,
 | 
			
		||||
		"TABLESAMPLE":             true,
 | 
			
		||||
		"CURRENT_DATE":            true,
 | 
			
		||||
		"MERGE":                   true,
 | 
			
		||||
		"TEXTSIZE":                true,
 | 
			
		||||
		"CURRENT_TIME":            true,
 | 
			
		||||
		"NATIONAL":                true,
 | 
			
		||||
		"THEN":                    true,
 | 
			
		||||
		"CURRENT_TIMESTAMP":       true,
 | 
			
		||||
		"NOCHECK":                 true,
 | 
			
		||||
		"TO":                      true,
 | 
			
		||||
		"CURRENT_USER":            true,
 | 
			
		||||
		"NONCLUSTERED":            true,
 | 
			
		||||
		"TOP":                     true,
 | 
			
		||||
		"CURSOR":                  true,
 | 
			
		||||
		"NOT":                     true,
 | 
			
		||||
		"TRAN":                    true,
 | 
			
		||||
		"DATABASE":                true,
 | 
			
		||||
		"NULL":                    true,
 | 
			
		||||
		"TRANSACTION":             true,
 | 
			
		||||
		"DBCC":                    true,
 | 
			
		||||
		"NULLIF":                  true,
 | 
			
		||||
		"TRIGGER":                 true,
 | 
			
		||||
		"DEALLOCATE":              true,
 | 
			
		||||
		"OF":                      true,
 | 
			
		||||
		"TRUNCATE":                true,
 | 
			
		||||
		"DECLARE":                 true,
 | 
			
		||||
		"OFF":                     true,
 | 
			
		||||
		"TRY_CONVERT":             true,
 | 
			
		||||
		"DEFAULT":                 true,
 | 
			
		||||
		"OFFSETS":                 true,
 | 
			
		||||
		"TSEQUAL":                 true,
 | 
			
		||||
		"DELETE":                  true,
 | 
			
		||||
		"ON":                      true,
 | 
			
		||||
		"UNION":                   true,
 | 
			
		||||
		"DENY":                    true,
 | 
			
		||||
		"OPEN":                    true,
 | 
			
		||||
		"UNIQUE":                  true,
 | 
			
		||||
		"DESC":                    true,
 | 
			
		||||
		"OPENDATASOURCE":          true,
 | 
			
		||||
		"UNPIVOT":                 true,
 | 
			
		||||
		"DISK":                    true,
 | 
			
		||||
		"OPENQUERY":               true,
 | 
			
		||||
		"UPDATE":                  true,
 | 
			
		||||
		"DISTINCT":                true,
 | 
			
		||||
		"OPENROWSET":              true,
 | 
			
		||||
		"UPDATETEXT":              true,
 | 
			
		||||
		"DISTRIBUTED":             true,
 | 
			
		||||
		"OPENXML":                 true,
 | 
			
		||||
		"USE":                     true,
 | 
			
		||||
		"DOUBLE":                  true,
 | 
			
		||||
		"OPTION":                  true,
 | 
			
		||||
		"USER":                    true,
 | 
			
		||||
		"DROP":                    true,
 | 
			
		||||
		"OR":                      true,
 | 
			
		||||
		"VALUES":                  true,
 | 
			
		||||
		"DUMP":                    true,
 | 
			
		||||
		"ORDER":                   true,
 | 
			
		||||
		"VARYING":                 true,
 | 
			
		||||
		"ELSE":                    true,
 | 
			
		||||
		"OUTER":                   true,
 | 
			
		||||
		"VIEW":                    true,
 | 
			
		||||
		"END":                     true,
 | 
			
		||||
		"OVER":                    true,
 | 
			
		||||
		"WAITFOR":                 true,
 | 
			
		||||
		"ERRLVL":                  true,
 | 
			
		||||
		"PERCENT":                 true,
 | 
			
		||||
		"WHEN":                    true,
 | 
			
		||||
		"ESCAPE":                  true,
 | 
			
		||||
		"PIVOT":                   true,
 | 
			
		||||
		"WHERE":                   true,
 | 
			
		||||
		"EXCEPT":                  true,
 | 
			
		||||
		"PLAN":                    true,
 | 
			
		||||
		"WHILE":                   true,
 | 
			
		||||
		"EXEC":                    true,
 | 
			
		||||
		"PRECISION":               true,
 | 
			
		||||
		"WITH":                    true,
 | 
			
		||||
		"EXECUTE":                 true,
 | 
			
		||||
		"PRIMARY":                 true,
 | 
			
		||||
		"WITHIN":                  true,
 | 
			
		||||
		"EXISTS":                  true,
 | 
			
		||||
		"PRINT":                   true,
 | 
			
		||||
		"WRITETEXT":               true,
 | 
			
		||||
		"EXIT":                    true,
 | 
			
		||||
		"PROC":                    true,
 | 
			
		||||
		"COMMIT":                         true,
 | 
			
		||||
		"INTERSECT":                      true,
 | 
			
		||||
		"SEMANTICSIMILARITYTABLE":        true,
 | 
			
		||||
		"COMPUTE":                        true,
 | 
			
		||||
		"INTO":                           true,
 | 
			
		||||
		"SESSION_USER":                   true,
 | 
			
		||||
		"CONSTRAINT":                     true,
 | 
			
		||||
		"IS":                             true,
 | 
			
		||||
		"SET":                            true,
 | 
			
		||||
		"CONTAINS":                       true,
 | 
			
		||||
		"JOIN":                           true,
 | 
			
		||||
		"SETUSER":                        true,
 | 
			
		||||
		"CONTAINSTABLE":                  true,
 | 
			
		||||
		"KEY":                            true,
 | 
			
		||||
		"SHUTDOWN":                       true,
 | 
			
		||||
		"CONTINUE":                       true,
 | 
			
		||||
		"KILL":                           true,
 | 
			
		||||
		"SOME":                           true,
 | 
			
		||||
		"CONVERT":                        true,
 | 
			
		||||
		"LEFT":                           true,
 | 
			
		||||
		"STATISTICS":                     true,
 | 
			
		||||
		"CREATE":                         true,
 | 
			
		||||
		"LIKE":                           true,
 | 
			
		||||
		"SYSTEM_USER":                    true,
 | 
			
		||||
		"CROSS":                          true,
 | 
			
		||||
		"LINENO":                         true,
 | 
			
		||||
		"TABLE":                          true,
 | 
			
		||||
		"CURRENT":                        true,
 | 
			
		||||
		"LOAD":                           true,
 | 
			
		||||
		"TABLESAMPLE":                    true,
 | 
			
		||||
		"CURRENT_DATE":                   true,
 | 
			
		||||
		"MERGE":                          true,
 | 
			
		||||
		"TEXTSIZE":                       true,
 | 
			
		||||
		"CURRENT_TIME":                   true,
 | 
			
		||||
		"NATIONAL":                       true,
 | 
			
		||||
		"THEN":                           true,
 | 
			
		||||
		"CURRENT_TIMESTAMP":              true,
 | 
			
		||||
		"NOCHECK":                        true,
 | 
			
		||||
		"TO":                             true,
 | 
			
		||||
		"CURRENT_USER":                   true,
 | 
			
		||||
		"NONCLUSTERED":                   true,
 | 
			
		||||
		"TOP":                            true,
 | 
			
		||||
		"CURSOR":                         true,
 | 
			
		||||
		"NOT":                            true,
 | 
			
		||||
		"TRAN":                           true,
 | 
			
		||||
		"DATABASE":                       true,
 | 
			
		||||
		"NULL":                           true,
 | 
			
		||||
		"TRANSACTION":                    true,
 | 
			
		||||
		"DBCC":                           true,
 | 
			
		||||
		"NULLIF":                         true,
 | 
			
		||||
		"TRIGGER":                        true,
 | 
			
		||||
		"DEALLOCATE":                     true,
 | 
			
		||||
		"OF":                             true,
 | 
			
		||||
		"TRUNCATE":                       true,
 | 
			
		||||
		"DECLARE":                        true,
 | 
			
		||||
		"OFF":                            true,
 | 
			
		||||
		"TRY_CONVERT":                    true,
 | 
			
		||||
		"DEFAULT":                        true,
 | 
			
		||||
		"OFFSETS":                        true,
 | 
			
		||||
		"TSEQUAL":                        true,
 | 
			
		||||
		"DELETE":                         true,
 | 
			
		||||
		"ON":                             true,
 | 
			
		||||
		"UNION":                          true,
 | 
			
		||||
		"DENY":                           true,
 | 
			
		||||
		"OPEN":                           true,
 | 
			
		||||
		"UNIQUE":                         true,
 | 
			
		||||
		"DESC":                           true,
 | 
			
		||||
		"OPENDATASOURCE":                 true,
 | 
			
		||||
		"UNPIVOT":                        true,
 | 
			
		||||
		"DISK":                           true,
 | 
			
		||||
		"OPENQUERY":                      true,
 | 
			
		||||
		"UPDATE":                         true,
 | 
			
		||||
		"DISTINCT":                       true,
 | 
			
		||||
		"OPENROWSET":                     true,
 | 
			
		||||
		"UPDATETEXT":                     true,
 | 
			
		||||
		"DISTRIBUTED":                    true,
 | 
			
		||||
		"OPENXML":                        true,
 | 
			
		||||
		"USE":                            true,
 | 
			
		||||
		"DOUBLE":                         true,
 | 
			
		||||
		"OPTION":                         true,
 | 
			
		||||
		"USER":                           true,
 | 
			
		||||
		"DROP":                           true,
 | 
			
		||||
		"OR":                             true,
 | 
			
		||||
		"VALUES":                         true,
 | 
			
		||||
		"DUMP":                           true,
 | 
			
		||||
		"ORDER":                          true,
 | 
			
		||||
		"VARYING":                        true,
 | 
			
		||||
		"ELSE":                           true,
 | 
			
		||||
		"OUTER":                          true,
 | 
			
		||||
		"VIEW":                           true,
 | 
			
		||||
		"END":                            true,
 | 
			
		||||
		"OVER":                           true,
 | 
			
		||||
		"WAITFOR":                        true,
 | 
			
		||||
		"ERRLVL":                         true,
 | 
			
		||||
		"PERCENT":                        true,
 | 
			
		||||
		"WHEN":                           true,
 | 
			
		||||
		"ESCAPE":                         true,
 | 
			
		||||
		"PIVOT":                          true,
 | 
			
		||||
		"WHERE":                          true,
 | 
			
		||||
		"EXCEPT":                         true,
 | 
			
		||||
		"PLAN":                           true,
 | 
			
		||||
		"WHILE":                          true,
 | 
			
		||||
		"EXEC":                           true,
 | 
			
		||||
		"PRECISION":                      true,
 | 
			
		||||
		"WITH":                           true,
 | 
			
		||||
		"EXECUTE":                        true,
 | 
			
		||||
		"PRIMARY":                        true,
 | 
			
		||||
		"WITHIN":                         true,
 | 
			
		||||
		"EXISTS":                         true,
 | 
			
		||||
		"PRINT":                          true,
 | 
			
		||||
		"WRITETEXT":                      true,
 | 
			
		||||
		"EXIT":                           true,
 | 
			
		||||
		"PROC":                           true,
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -286,10 +286,6 @@ func (db *mssql) Quote(name string) string {
 | 
			
		||||
	return "\"" + name + "\""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (db *mssql) QuoteStr() string {
 | 
			
		||||
	return "\""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (db *mssql) SupportEngine() bool {
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
@@ -507,7 +503,7 @@ func (db *mssql) CreateTableSql(table *core.Table, tableName, storeEngine, chars
 | 
			
		||||
 | 
			
		||||
	sql = "IF NOT EXISTS (SELECT [name] FROM sys.tables WHERE [name] = '" + tableName + "' ) CREATE TABLE "
 | 
			
		||||
 | 
			
		||||
	sql += db.QuoteStr() + tableName + db.QuoteStr() + " ("
 | 
			
		||||
	sql += db.Quote(tableName) + " ("
 | 
			
		||||
 | 
			
		||||
	pkList := table.PrimaryKeys
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								vendor/github.com/go-xorm/xorm/dialect_mysql.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								vendor/github.com/go-xorm/xorm/dialect_mysql.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -220,7 +220,7 @@ func (db *mysql) SqlType(c *core.Column) string {
 | 
			
		||||
	case core.TimeStampz:
 | 
			
		||||
		res = core.Char
 | 
			
		||||
		c.Length = 64
 | 
			
		||||
	case core.Enum: //mysql enum
 | 
			
		||||
	case core.Enum: // mysql enum
 | 
			
		||||
		res = core.Enum
 | 
			
		||||
		res += "("
 | 
			
		||||
		opts := ""
 | 
			
		||||
@@ -229,7 +229,7 @@ func (db *mysql) SqlType(c *core.Column) string {
 | 
			
		||||
		}
 | 
			
		||||
		res += strings.TrimLeft(opts, ",")
 | 
			
		||||
		res += ")"
 | 
			
		||||
	case core.Set: //mysql set
 | 
			
		||||
	case core.Set: // mysql set
 | 
			
		||||
		res = core.Set
 | 
			
		||||
		res += "("
 | 
			
		||||
		opts := ""
 | 
			
		||||
@@ -278,10 +278,6 @@ func (db *mysql) Quote(name string) string {
 | 
			
		||||
	return "`" + name + "`"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (db *mysql) QuoteStr() string {
 | 
			
		||||
	return "`"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (db *mysql) SupportEngine() bool {
 | 
			
		||||
	return true
 | 
			
		||||
}
 | 
			
		||||
@@ -360,7 +356,7 @@ func (db *mysql) GetColumns(tableName string) ([]string, map[string]*core.Column
 | 
			
		||||
		var len1, len2 int
 | 
			
		||||
		if len(cts) == 2 {
 | 
			
		||||
			idx := strings.Index(cts[1], ")")
 | 
			
		||||
			if colType == core.Enum && cts[1][0] == '\'' { //enum
 | 
			
		||||
			if colType == core.Enum && cts[1][0] == '\'' { // enum
 | 
			
		||||
				options := strings.Split(cts[1][0:idx], ",")
 | 
			
		||||
				col.EnumOptions = make(map[string]int)
 | 
			
		||||
				for k, v := range options {
 | 
			
		||||
@@ -408,7 +404,7 @@ func (db *mysql) GetColumns(tableName string) ([]string, map[string]*core.Column
 | 
			
		||||
			col.IsPrimaryKey = true
 | 
			
		||||
		}
 | 
			
		||||
		if colKey == "UNI" {
 | 
			
		||||
			//col.is
 | 
			
		||||
			// col.is
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if extra == "auto_increment" {
 | 
			
		||||
@@ -554,12 +550,10 @@ func (db *mysql) CreateTableSql(table *core.Table, tableName, storeEngine, chars
 | 
			
		||||
 | 
			
		||||
	if len(charset) == 0 {
 | 
			
		||||
		charset = db.URI().Charset
 | 
			
		||||
	} 
 | 
			
		||||
	}
 | 
			
		||||
	if len(charset) != 0 {
 | 
			
		||||
		sql += " DEFAULT CHARSET " + charset
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	if db.rowFormat != "" {
 | 
			
		||||
		sql += " ROW_FORMAT=" + db.rowFormat
 | 
			
		||||
@@ -633,7 +627,7 @@ func (p *mysqlDriver) Parse(driverName, dataSourceName string) (*core.Uri, error
 | 
			
		||||
			`\/(?P<dbname>.*?)` + // /dbname
 | 
			
		||||
			`(?:\?(?P<params>[^\?]*))?$`) // [?param1=value1¶mN=valueN]
 | 
			
		||||
	matches := dsnPattern.FindStringSubmatch(dataSourceName)
 | 
			
		||||
	//tlsConfigRegister := make(map[string]*tls.Config)
 | 
			
		||||
	// tlsConfigRegister := make(map[string]*tls.Config)
 | 
			
		||||
	names := dsnPattern.SubexpNames()
 | 
			
		||||
 | 
			
		||||
	uri := &core.Uri{DbType: core.MYSQL}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										544
									
								
								vendor/github.com/go-xorm/xorm/dialect_oracle.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										544
									
								
								vendor/github.com/go-xorm/xorm/dialect_oracle.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -230,271 +230,271 @@ var (
 | 
			
		||||
		"LOGGING":                   true,
 | 
			
		||||
		"LOGICAL_READS_PER_CALL":    true,
 | 
			
		||||
		"LOGICAL_READS_PER_SESSION": true,
 | 
			
		||||
		"LONG":                     true,
 | 
			
		||||
		"MANAGE":                   true,
 | 
			
		||||
		"MASTER":                   true,
 | 
			
		||||
		"MAX":                      true,
 | 
			
		||||
		"MAXARCHLOGS":              true,
 | 
			
		||||
		"MAXDATAFILES":             true,
 | 
			
		||||
		"MAXEXTENTS":               true,
 | 
			
		||||
		"MAXINSTANCES":             true,
 | 
			
		||||
		"MAXLOGFILES":              true,
 | 
			
		||||
		"MAXLOGHISTORY":            true,
 | 
			
		||||
		"MAXLOGMEMBERS":            true,
 | 
			
		||||
		"MAXSIZE":                  true,
 | 
			
		||||
		"MAXTRANS":                 true,
 | 
			
		||||
		"MAXVALUE":                 true,
 | 
			
		||||
		"MIN":                      true,
 | 
			
		||||
		"MEMBER":                   true,
 | 
			
		||||
		"MINIMUM":                  true,
 | 
			
		||||
		"MINEXTENTS":               true,
 | 
			
		||||
		"MINUS":                    true,
 | 
			
		||||
		"MINVALUE":                 true,
 | 
			
		||||
		"MLSLABEL":                 true,
 | 
			
		||||
		"MLS_LABEL_FORMAT":         true,
 | 
			
		||||
		"MODE":                     true,
 | 
			
		||||
		"MODIFY":                   true,
 | 
			
		||||
		"MOUNT":                    true,
 | 
			
		||||
		"MOVE":                     true,
 | 
			
		||||
		"MTS_DISPATCHERS":          true,
 | 
			
		||||
		"MULTISET":                 true,
 | 
			
		||||
		"NATIONAL":                 true,
 | 
			
		||||
		"NCHAR":                    true,
 | 
			
		||||
		"NCHAR_CS":                 true,
 | 
			
		||||
		"NCLOB":                    true,
 | 
			
		||||
		"NEEDED":                   true,
 | 
			
		||||
		"NESTED":                   true,
 | 
			
		||||
		"NETWORK":                  true,
 | 
			
		||||
		"NEW":                      true,
 | 
			
		||||
		"NEXT":                     true,
 | 
			
		||||
		"NOARCHIVELOG":             true,
 | 
			
		||||
		"NOAUDIT":                  true,
 | 
			
		||||
		"NOCACHE":                  true,
 | 
			
		||||
		"NOCOMPRESS":               true,
 | 
			
		||||
		"NOCYCLE":                  true,
 | 
			
		||||
		"NOFORCE":                  true,
 | 
			
		||||
		"NOLOGGING":                true,
 | 
			
		||||
		"NOMAXVALUE":               true,
 | 
			
		||||
		"NOMINVALUE":               true,
 | 
			
		||||
		"NONE":                     true,
 | 
			
		||||
		"NOORDER":                  true,
 | 
			
		||||
		"NOOVERRIDE":               true,
 | 
			
		||||
		"NOPARALLEL":               true,
 | 
			
		||||
		"NOREVERSE":                true,
 | 
			
		||||
		"NORMAL":                   true,
 | 
			
		||||
		"NOSORT":                   true,
 | 
			
		||||
		"NOT":                      true,
 | 
			
		||||
		"NOTHING":                  true,
 | 
			
		||||
		"NOWAIT":                   true,
 | 
			
		||||
		"NULL":                     true,
 | 
			
		||||
		"NUMBER":                   true,
 | 
			
		||||
		"NUMERIC":                  true,
 | 
			
		||||
		"NVARCHAR2":                true,
 | 
			
		||||
		"OBJECT":                   true,
 | 
			
		||||
		"OBJNO":                    true,
 | 
			
		||||
		"OBJNO_REUSE":              true,
 | 
			
		||||
		"OF":                       true,
 | 
			
		||||
		"OFF":                      true,
 | 
			
		||||
		"OFFLINE":                  true,
 | 
			
		||||
		"OID":                      true,
 | 
			
		||||
		"OIDINDEX":                 true,
 | 
			
		||||
		"OLD":                      true,
 | 
			
		||||
		"ON":                       true,
 | 
			
		||||
		"ONLINE":                   true,
 | 
			
		||||
		"ONLY":                     true,
 | 
			
		||||
		"OPCODE":                   true,
 | 
			
		||||
		"OPEN":                     true,
 | 
			
		||||
		"OPTIMAL":                  true,
 | 
			
		||||
		"OPTIMIZER_GOAL":           true,
 | 
			
		||||
		"OPTION":                   true,
 | 
			
		||||
		"OR":                       true,
 | 
			
		||||
		"ORDER":                    true,
 | 
			
		||||
		"ORGANIZATION":             true,
 | 
			
		||||
		"OSLABEL":                  true,
 | 
			
		||||
		"OVERFLOW":                 true,
 | 
			
		||||
		"OWN":                      true,
 | 
			
		||||
		"PACKAGE":                  true,
 | 
			
		||||
		"PARALLEL":                 true,
 | 
			
		||||
		"PARTITION":                true,
 | 
			
		||||
		"PASSWORD":                 true,
 | 
			
		||||
		"PASSWORD_GRACE_TIME":      true,
 | 
			
		||||
		"PASSWORD_LIFE_TIME":       true,
 | 
			
		||||
		"PASSWORD_LOCK_TIME":       true,
 | 
			
		||||
		"PASSWORD_REUSE_MAX":       true,
 | 
			
		||||
		"PASSWORD_REUSE_TIME":      true,
 | 
			
		||||
		"PASSWORD_VERIFY_FUNCTION": true,
 | 
			
		||||
		"PCTFREE":                  true,
 | 
			
		||||
		"PCTINCREASE":              true,
 | 
			
		||||
		"PCTTHRESHOLD":             true,
 | 
			
		||||
		"PCTUSED":                  true,
 | 
			
		||||
		"PCTVERSION":               true,
 | 
			
		||||
		"PERCENT":                  true,
 | 
			
		||||
		"PERMANENT":                true,
 | 
			
		||||
		"PLAN":                     true,
 | 
			
		||||
		"PLSQL_DEBUG":              true,
 | 
			
		||||
		"POST_TRANSACTION":         true,
 | 
			
		||||
		"PRECISION":                true,
 | 
			
		||||
		"PRESERVE":                 true,
 | 
			
		||||
		"PRIMARY":                  true,
 | 
			
		||||
		"PRIOR":                    true,
 | 
			
		||||
		"PRIVATE":                  true,
 | 
			
		||||
		"PRIVATE_SGA":              true,
 | 
			
		||||
		"PRIVILEGE":                true,
 | 
			
		||||
		"PRIVILEGES":               true,
 | 
			
		||||
		"PROCEDURE":                true,
 | 
			
		||||
		"PROFILE":                  true,
 | 
			
		||||
		"PUBLIC":                   true,
 | 
			
		||||
		"PURGE":                    true,
 | 
			
		||||
		"QUEUE":                    true,
 | 
			
		||||
		"QUOTA":                    true,
 | 
			
		||||
		"RANGE":                    true,
 | 
			
		||||
		"RAW":                      true,
 | 
			
		||||
		"RBA":                      true,
 | 
			
		||||
		"READ":                     true,
 | 
			
		||||
		"READUP":                   true,
 | 
			
		||||
		"REAL":                     true,
 | 
			
		||||
		"REBUILD":                  true,
 | 
			
		||||
		"RECOVER":                  true,
 | 
			
		||||
		"RECOVERABLE":              true,
 | 
			
		||||
		"RECOVERY":                 true,
 | 
			
		||||
		"REF":                      true,
 | 
			
		||||
		"REFERENCES":               true,
 | 
			
		||||
		"REFERENCING":              true,
 | 
			
		||||
		"REFRESH":                  true,
 | 
			
		||||
		"RENAME":                   true,
 | 
			
		||||
		"REPLACE":                  true,
 | 
			
		||||
		"RESET":                    true,
 | 
			
		||||
		"RESETLOGS":                true,
 | 
			
		||||
		"RESIZE":                   true,
 | 
			
		||||
		"RESOURCE":                 true,
 | 
			
		||||
		"RESTRICTED":               true,
 | 
			
		||||
		"RETURN":                   true,
 | 
			
		||||
		"RETURNING":                true,
 | 
			
		||||
		"REUSE":                    true,
 | 
			
		||||
		"REVERSE":                  true,
 | 
			
		||||
		"REVOKE":                   true,
 | 
			
		||||
		"ROLE":                     true,
 | 
			
		||||
		"ROLES":                    true,
 | 
			
		||||
		"ROLLBACK":                 true,
 | 
			
		||||
		"ROW":                      true,
 | 
			
		||||
		"ROWID":                    true,
 | 
			
		||||
		"ROWNUM":                   true,
 | 
			
		||||
		"ROWS":                     true,
 | 
			
		||||
		"RULE":                     true,
 | 
			
		||||
		"SAMPLE":                   true,
 | 
			
		||||
		"SAVEPOINT":                true,
 | 
			
		||||
		"SB4":                      true,
 | 
			
		||||
		"SCAN_INSTANCES":           true,
 | 
			
		||||
		"SCHEMA":                   true,
 | 
			
		||||
		"SCN":                      true,
 | 
			
		||||
		"SCOPE":                    true,
 | 
			
		||||
		"SD_ALL":                   true,
 | 
			
		||||
		"SD_INHIBIT":               true,
 | 
			
		||||
		"SD_SHOW":                  true,
 | 
			
		||||
		"SEGMENT":                  true,
 | 
			
		||||
		"SEG_BLOCK":                true,
 | 
			
		||||
		"SEG_FILE":                 true,
 | 
			
		||||
		"SELECT":                   true,
 | 
			
		||||
		"SEQUENCE":                 true,
 | 
			
		||||
		"SERIALIZABLE":             true,
 | 
			
		||||
		"SESSION":                  true,
 | 
			
		||||
		"SESSION_CACHED_CURSORS":   true,
 | 
			
		||||
		"SESSIONS_PER_USER":        true,
 | 
			
		||||
		"SET":                      true,
 | 
			
		||||
		"SHARE":                    true,
 | 
			
		||||
		"SHARED":                   true,
 | 
			
		||||
		"SHARED_POOL":              true,
 | 
			
		||||
		"SHRINK":                   true,
 | 
			
		||||
		"SIZE":                     true,
 | 
			
		||||
		"SKIP":                     true,
 | 
			
		||||
		"SKIP_UNUSABLE_INDEXES":    true,
 | 
			
		||||
		"SMALLINT":                 true,
 | 
			
		||||
		"SNAPSHOT":                 true,
 | 
			
		||||
		"SOME":                     true,
 | 
			
		||||
		"SORT":                     true,
 | 
			
		||||
		"SPECIFICATION":            true,
 | 
			
		||||
		"SPLIT":                    true,
 | 
			
		||||
		"SQL_TRACE":                true,
 | 
			
		||||
		"STANDBY":                  true,
 | 
			
		||||
		"START":                    true,
 | 
			
		||||
		"STATEMENT_ID":             true,
 | 
			
		||||
		"STATISTICS":               true,
 | 
			
		||||
		"STOP":                     true,
 | 
			
		||||
		"STORAGE":                  true,
 | 
			
		||||
		"STORE":                    true,
 | 
			
		||||
		"STRUCTURE":                true,
 | 
			
		||||
		"SUCCESSFUL":               true,
 | 
			
		||||
		"SWITCH":                   true,
 | 
			
		||||
		"SYS_OP_ENFORCE_NOT_NULL$": true,
 | 
			
		||||
		"SYS_OP_NTCIMG$":           true,
 | 
			
		||||
		"SYNONYM":                  true,
 | 
			
		||||
		"SYSDATE":                  true,
 | 
			
		||||
		"SYSDBA":                   true,
 | 
			
		||||
		"SYSOPER":                  true,
 | 
			
		||||
		"SYSTEM":                   true,
 | 
			
		||||
		"TABLE":                    true,
 | 
			
		||||
		"TABLES":                   true,
 | 
			
		||||
		"TABLESPACE":               true,
 | 
			
		||||
		"TABLESPACE_NO":            true,
 | 
			
		||||
		"TABNO":                    true,
 | 
			
		||||
		"TEMPORARY":                true,
 | 
			
		||||
		"THAN":                     true,
 | 
			
		||||
		"THE":                      true,
 | 
			
		||||
		"THEN":                     true,
 | 
			
		||||
		"THREAD":                   true,
 | 
			
		||||
		"TIMESTAMP":                true,
 | 
			
		||||
		"TIME":                     true,
 | 
			
		||||
		"TO":                       true,
 | 
			
		||||
		"TOPLEVEL":                 true,
 | 
			
		||||
		"TRACE":                    true,
 | 
			
		||||
		"TRACING":                  true,
 | 
			
		||||
		"TRANSACTION":              true,
 | 
			
		||||
		"TRANSITIONAL":             true,
 | 
			
		||||
		"TRIGGER":                  true,
 | 
			
		||||
		"TRIGGERS":                 true,
 | 
			
		||||
		"TRUE":                     true,
 | 
			
		||||
		"TRUNCATE":                 true,
 | 
			
		||||
		"TX":                       true,
 | 
			
		||||
		"TYPE":                     true,
 | 
			
		||||
		"UB2":                      true,
 | 
			
		||||
		"UBA":                      true,
 | 
			
		||||
		"UID":                      true,
 | 
			
		||||
		"UNARCHIVED":               true,
 | 
			
		||||
		"UNDO":                     true,
 | 
			
		||||
		"UNION":                    true,
 | 
			
		||||
		"UNIQUE":                   true,
 | 
			
		||||
		"UNLIMITED":                true,
 | 
			
		||||
		"UNLOCK":                   true,
 | 
			
		||||
		"UNRECOVERABLE":            true,
 | 
			
		||||
		"UNTIL":                    true,
 | 
			
		||||
		"UNUSABLE":                 true,
 | 
			
		||||
		"UNUSED":                   true,
 | 
			
		||||
		"UPDATABLE":                true,
 | 
			
		||||
		"UPDATE":                   true,
 | 
			
		||||
		"USAGE":                    true,
 | 
			
		||||
		"USE":                      true,
 | 
			
		||||
		"USER":                     true,
 | 
			
		||||
		"USING":                    true,
 | 
			
		||||
		"VALIDATE":                 true,
 | 
			
		||||
		"VALIDATION":               true,
 | 
			
		||||
		"VALUE":                    true,
 | 
			
		||||
		"VALUES":                   true,
 | 
			
		||||
		"VARCHAR":                  true,
 | 
			
		||||
		"VARCHAR2":                 true,
 | 
			
		||||
		"VARYING":                  true,
 | 
			
		||||
		"VIEW":                     true,
 | 
			
		||||
		"WHEN":                     true,
 | 
			
		||||
		"WHENEVER":                 true,
 | 
			
		||||
		"WHERE":                    true,
 | 
			
		||||
		"WITH":                     true,
 | 
			
		||||
		"WITHOUT":                  true,
 | 
			
		||||
		"WORK":                     true,
 | 
			
		||||
		"WRITE":                    true,
 | 
			
		||||
		"WRITEDOWN":                true,
 | 
			
		||||
		"WRITEUP":                  true,
 | 
			
		||||
		"XID":                      true,
 | 
			
		||||
		"YEAR":                     true,
 | 
			
		||||
		"ZONE":                     true,
 | 
			
		||||
		"LONG":                      true,
 | 
			
		||||
		"MANAGE":                    true,
 | 
			
		||||
		"MASTER":                    true,
 | 
			
		||||
		"MAX":                       true,
 | 
			
		||||
		"MAXARCHLOGS":               true,
 | 
			
		||||
		"MAXDATAFILES":              true,
 | 
			
		||||
		"MAXEXTENTS":                true,
 | 
			
		||||
		"MAXINSTANCES":              true,
 | 
			
		||||
		"MAXLOGFILES":               true,
 | 
			
		||||
		"MAXLOGHISTORY":             true,
 | 
			
		||||
		"MAXLOGMEMBERS":             true,
 | 
			
		||||
		"MAXSIZE":                   true,
 | 
			
		||||
		"MAXTRANS":                  true,
 | 
			
		||||
		"MAXVALUE":                  true,
 | 
			
		||||
		"MIN":                       true,
 | 
			
		||||
		"MEMBER":                    true,
 | 
			
		||||
		"MINIMUM":                   true,
 | 
			
		||||
		"MINEXTENTS":                true,
 | 
			
		||||
		"MINUS":                     true,
 | 
			
		||||
		"MINVALUE":                  true,
 | 
			
		||||
		"MLSLABEL":                  true,
 | 
			
		||||
		"MLS_LABEL_FORMAT":          true,
 | 
			
		||||
		"MODE":                      true,
 | 
			
		||||
		"MODIFY":                    true,
 | 
			
		||||
		"MOUNT":                     true,
 | 
			
		||||
		"MOVE":                      true,
 | 
			
		||||
		"MTS_DISPATCHERS":           true,
 | 
			
		||||
		"MULTISET":                  true,
 | 
			
		||||
		"NATIONAL":                  true,
 | 
			
		||||
		"NCHAR":                     true,
 | 
			
		||||
		"NCHAR_CS":                  true,
 | 
			
		||||
		"NCLOB":                     true,
 | 
			
		||||
		"NEEDED":                    true,
 | 
			
		||||
		"NESTED":                    true,
 | 
			
		||||
		"NETWORK":                   true,
 | 
			
		||||
		"NEW":                       true,
 | 
			
		||||
		"NEXT":                      true,
 | 
			
		||||
		"NOARCHIVELOG":              true,
 | 
			
		||||
		"NOAUDIT":                   true,
 | 
			
		||||
		"NOCACHE":                   true,
 | 
			
		||||
		"NOCOMPRESS":                true,
 | 
			
		||||
		"NOCYCLE":                   true,
 | 
			
		||||
		"NOFORCE":                   true,
 | 
			
		||||
		"NOLOGGING":                 true,
 | 
			
		||||
		"NOMAXVALUE":                true,
 | 
			
		||||
		"NOMINVALUE":                true,
 | 
			
		||||
		"NONE":                      true,
 | 
			
		||||
		"NOORDER":                   true,
 | 
			
		||||
		"NOOVERRIDE":                true,
 | 
			
		||||
		"NOPARALLEL":                true,
 | 
			
		||||
		"NOREVERSE":                 true,
 | 
			
		||||
		"NORMAL":                    true,
 | 
			
		||||
		"NOSORT":                    true,
 | 
			
		||||
		"NOT":                       true,
 | 
			
		||||
		"NOTHING":                   true,
 | 
			
		||||
		"NOWAIT":                    true,
 | 
			
		||||
		"NULL":                      true,
 | 
			
		||||
		"NUMBER":                    true,
 | 
			
		||||
		"NUMERIC":                   true,
 | 
			
		||||
		"NVARCHAR2":                 true,
 | 
			
		||||
		"OBJECT":                    true,
 | 
			
		||||
		"OBJNO":                     true,
 | 
			
		||||
		"OBJNO_REUSE":               true,
 | 
			
		||||
		"OF":                        true,
 | 
			
		||||
		"OFF":                       true,
 | 
			
		||||
		"OFFLINE":                   true,
 | 
			
		||||
		"OID":                       true,
 | 
			
		||||
		"OIDINDEX":                  true,
 | 
			
		||||
		"OLD":                       true,
 | 
			
		||||
		"ON":                        true,
 | 
			
		||||
		"ONLINE":                    true,
 | 
			
		||||
		"ONLY":                      true,
 | 
			
		||||
		"OPCODE":                    true,
 | 
			
		||||
		"OPEN":                      true,
 | 
			
		||||
		"OPTIMAL":                   true,
 | 
			
		||||
		"OPTIMIZER_GOAL":            true,
 | 
			
		||||
		"OPTION":                    true,
 | 
			
		||||
		"OR":                        true,
 | 
			
		||||
		"ORDER":                     true,
 | 
			
		||||
		"ORGANIZATION":              true,
 | 
			
		||||
		"OSLABEL":                   true,
 | 
			
		||||
		"OVERFLOW":                  true,
 | 
			
		||||
		"OWN":                       true,
 | 
			
		||||
		"PACKAGE":                   true,
 | 
			
		||||
		"PARALLEL":                  true,
 | 
			
		||||
		"PARTITION":                 true,
 | 
			
		||||
		"PASSWORD":                  true,
 | 
			
		||||
		"PASSWORD_GRACE_TIME":       true,
 | 
			
		||||
		"PASSWORD_LIFE_TIME":        true,
 | 
			
		||||
		"PASSWORD_LOCK_TIME":        true,
 | 
			
		||||
		"PASSWORD_REUSE_MAX":        true,
 | 
			
		||||
		"PASSWORD_REUSE_TIME":       true,
 | 
			
		||||
		"PASSWORD_VERIFY_FUNCTION":  true,
 | 
			
		||||
		"PCTFREE":                   true,
 | 
			
		||||
		"PCTINCREASE":               true,
 | 
			
		||||
		"PCTTHRESHOLD":              true,
 | 
			
		||||
		"PCTUSED":                   true,
 | 
			
		||||
		"PCTVERSION":                true,
 | 
			
		||||
		"PERCENT":                   true,
 | 
			
		||||
		"PERMANENT":                 true,
 | 
			
		||||
		"PLAN":                      true,
 | 
			
		||||
		"PLSQL_DEBUG":               true,
 | 
			
		||||
		"POST_TRANSACTION":          true,
 | 
			
		||||
		"PRECISION":                 true,
 | 
			
		||||
		"PRESERVE":                  true,
 | 
			
		||||
		"PRIMARY":                   true,
 | 
			
		||||
		"PRIOR":                     true,
 | 
			
		||||
		"PRIVATE":                   true,
 | 
			
		||||
		"PRIVATE_SGA":               true,
 | 
			
		||||
		"PRIVILEGE":                 true,
 | 
			
		||||
		"PRIVILEGES":                true,
 | 
			
		||||
		"PROCEDURE":                 true,
 | 
			
		||||
		"PROFILE":                   true,
 | 
			
		||||
		"PUBLIC":                    true,
 | 
			
		||||
		"PURGE":                     true,
 | 
			
		||||
		"QUEUE":                     true,
 | 
			
		||||
		"QUOTA":                     true,
 | 
			
		||||
		"RANGE":                     true,
 | 
			
		||||
		"RAW":                       true,
 | 
			
		||||
		"RBA":                       true,
 | 
			
		||||
		"READ":                      true,
 | 
			
		||||
		"READUP":                    true,
 | 
			
		||||
		"REAL":                      true,
 | 
			
		||||
		"REBUILD":                   true,
 | 
			
		||||
		"RECOVER":                   true,
 | 
			
		||||
		"RECOVERABLE":               true,
 | 
			
		||||
		"RECOVERY":                  true,
 | 
			
		||||
		"REF":                       true,
 | 
			
		||||
		"REFERENCES":                true,
 | 
			
		||||
		"REFERENCING":               true,
 | 
			
		||||
		"REFRESH":                   true,
 | 
			
		||||
		"RENAME":                    true,
 | 
			
		||||
		"REPLACE":                   true,
 | 
			
		||||
		"RESET":                     true,
 | 
			
		||||
		"RESETLOGS":                 true,
 | 
			
		||||
		"RESIZE":                    true,
 | 
			
		||||
		"RESOURCE":                  true,
 | 
			
		||||
		"RESTRICTED":                true,
 | 
			
		||||
		"RETURN":                    true,
 | 
			
		||||
		"RETURNING":                 true,
 | 
			
		||||
		"REUSE":                     true,
 | 
			
		||||
		"REVERSE":                   true,
 | 
			
		||||
		"REVOKE":                    true,
 | 
			
		||||
		"ROLE":                      true,
 | 
			
		||||
		"ROLES":                     true,
 | 
			
		||||
		"ROLLBACK":                  true,
 | 
			
		||||
		"ROW":                       true,
 | 
			
		||||
		"ROWID":                     true,
 | 
			
		||||
		"ROWNUM":                    true,
 | 
			
		||||
		"ROWS":                      true,
 | 
			
		||||
		"RULE":                      true,
 | 
			
		||||
		"SAMPLE":                    true,
 | 
			
		||||
		"SAVEPOINT":                 true,
 | 
			
		||||
		"SB4":                       true,
 | 
			
		||||
		"SCAN_INSTANCES":            true,
 | 
			
		||||
		"SCHEMA":                    true,
 | 
			
		||||
		"SCN":                       true,
 | 
			
		||||
		"SCOPE":                     true,
 | 
			
		||||
		"SD_ALL":                    true,
 | 
			
		||||
		"SD_INHIBIT":                true,
 | 
			
		||||
		"SD_SHOW":                   true,
 | 
			
		||||
		"SEGMENT":                   true,
 | 
			
		||||
		"SEG_BLOCK":                 true,
 | 
			
		||||
		"SEG_FILE":                  true,
 | 
			
		||||
		"SELECT":                    true,
 | 
			
		||||
		"SEQUENCE":                  true,
 | 
			
		||||
		"SERIALIZABLE":              true,
 | 
			
		||||
		"SESSION":                   true,
 | 
			
		||||
		"SESSION_CACHED_CURSORS":    true,
 | 
			
		||||
		"SESSIONS_PER_USER":         true,
 | 
			
		||||
		"SET":                       true,
 | 
			
		||||
		"SHARE":                     true,
 | 
			
		||||
		"SHARED":                    true,
 | 
			
		||||
		"SHARED_POOL":               true,
 | 
			
		||||
		"SHRINK":                    true,
 | 
			
		||||
		"SIZE":                      true,
 | 
			
		||||
		"SKIP":                      true,
 | 
			
		||||
		"SKIP_UNUSABLE_INDEXES":     true,
 | 
			
		||||
		"SMALLINT":                  true,
 | 
			
		||||
		"SNAPSHOT":                  true,
 | 
			
		||||
		"SOME":                      true,
 | 
			
		||||
		"SORT":                      true,
 | 
			
		||||
		"SPECIFICATION":             true,
 | 
			
		||||
		"SPLIT":                     true,
 | 
			
		||||
		"SQL_TRACE":                 true,
 | 
			
		||||
		"STANDBY":                   true,
 | 
			
		||||
		"START":                     true,
 | 
			
		||||
		"STATEMENT_ID":              true,
 | 
			
		||||
		"STATISTICS":                true,
 | 
			
		||||
		"STOP":                      true,
 | 
			
		||||
		"STORAGE":                   true,
 | 
			
		||||
		"STORE":                     true,
 | 
			
		||||
		"STRUCTURE":                 true,
 | 
			
		||||
		"SUCCESSFUL":                true,
 | 
			
		||||
		"SWITCH":                    true,
 | 
			
		||||
		"SYS_OP_ENFORCE_NOT_NULL$":  true,
 | 
			
		||||
		"SYS_OP_NTCIMG$":            true,
 | 
			
		||||
		"SYNONYM":                   true,
 | 
			
		||||
		"SYSDATE":                   true,
 | 
			
		||||
		"SYSDBA":                    true,
 | 
			
		||||
		"SYSOPER":                   true,
 | 
			
		||||
		"SYSTEM":                    true,
 | 
			
		||||
		"TABLE":                     true,
 | 
			
		||||
		"TABLES":                    true,
 | 
			
		||||
		"TABLESPACE":                true,
 | 
			
		||||
		"TABLESPACE_NO":             true,
 | 
			
		||||
		"TABNO":                     true,
 | 
			
		||||
		"TEMPORARY":                 true,
 | 
			
		||||
		"THAN":                      true,
 | 
			
		||||
		"THE":                       true,
 | 
			
		||||
		"THEN":                      true,
 | 
			
		||||
		"THREAD":                    true,
 | 
			
		||||
		"TIMESTAMP":                 true,
 | 
			
		||||
		"TIME":                      true,
 | 
			
		||||
		"TO":                        true,
 | 
			
		||||
		"TOPLEVEL":                  true,
 | 
			
		||||
		"TRACE":                     true,
 | 
			
		||||
		"TRACING":                   true,
 | 
			
		||||
		"TRANSACTION":               true,
 | 
			
		||||
		"TRANSITIONAL":              true,
 | 
			
		||||
		"TRIGGER":                   true,
 | 
			
		||||
		"TRIGGERS":                  true,
 | 
			
		||||
		"TRUE":                      true,
 | 
			
		||||
		"TRUNCATE":                  true,
 | 
			
		||||
		"TX":                        true,
 | 
			
		||||
		"TYPE":                      true,
 | 
			
		||||
		"UB2":                       true,
 | 
			
		||||
		"UBA":                       true,
 | 
			
		||||
		"UID":                       true,
 | 
			
		||||
		"UNARCHIVED":                true,
 | 
			
		||||
		"UNDO":                      true,
 | 
			
		||||
		"UNION":                     true,
 | 
			
		||||
		"UNIQUE":                    true,
 | 
			
		||||
		"UNLIMITED":                 true,
 | 
			
		||||
		"UNLOCK":                    true,
 | 
			
		||||
		"UNRECOVERABLE":             true,
 | 
			
		||||
		"UNTIL":                     true,
 | 
			
		||||
		"UNUSABLE":                  true,
 | 
			
		||||
		"UNUSED":                    true,
 | 
			
		||||
		"UPDATABLE":                 true,
 | 
			
		||||
		"UPDATE":                    true,
 | 
			
		||||
		"USAGE":                     true,
 | 
			
		||||
		"USE":                       true,
 | 
			
		||||
		"USER":                      true,
 | 
			
		||||
		"USING":                     true,
 | 
			
		||||
		"VALIDATE":                  true,
 | 
			
		||||
		"VALIDATION":                true,
 | 
			
		||||
		"VALUE":                     true,
 | 
			
		||||
		"VALUES":                    true,
 | 
			
		||||
		"VARCHAR":                   true,
 | 
			
		||||
		"VARCHAR2":                  true,
 | 
			
		||||
		"VARYING":                   true,
 | 
			
		||||
		"VIEW":                      true,
 | 
			
		||||
		"WHEN":                      true,
 | 
			
		||||
		"WHENEVER":                  true,
 | 
			
		||||
		"WHERE":                     true,
 | 
			
		||||
		"WITH":                      true,
 | 
			
		||||
		"WITHOUT":                   true,
 | 
			
		||||
		"WORK":                      true,
 | 
			
		||||
		"WRITE":                     true,
 | 
			
		||||
		"WRITEDOWN":                 true,
 | 
			
		||||
		"WRITEUP":                   true,
 | 
			
		||||
		"XID":                       true,
 | 
			
		||||
		"YEAR":                      true,
 | 
			
		||||
		"ZONE":                      true,
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -552,11 +552,7 @@ func (db *oracle) IsReserved(name string) bool {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (db *oracle) Quote(name string) string {
 | 
			
		||||
	return "\"" + name + "\""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (db *oracle) QuoteStr() string {
 | 
			
		||||
	return "\""
 | 
			
		||||
	return "[" + name + "]"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (db *oracle) SupportEngine() bool {
 | 
			
		||||
@@ -596,7 +592,7 @@ func (db *oracle) CreateTableSql(table *core.Table, tableName, storeEngine, char
 | 
			
		||||
			sql += col.String(b.dialect)
 | 
			
		||||
		} else {*/
 | 
			
		||||
		sql += col.StringNoPk(db)
 | 
			
		||||
		//}
 | 
			
		||||
		// }
 | 
			
		||||
		sql = strings.TrimSpace(sql)
 | 
			
		||||
		sql += ", "
 | 
			
		||||
	}
 | 
			
		||||
@@ -865,7 +861,7 @@ func (cfg *goracleDriver) Parse(driverName, dataSourceName string) (*core.Uri, e
 | 
			
		||||
			`\/(?P<dbname>.*?)` + // /dbname
 | 
			
		||||
			`(?:\?(?P<params>[^\?]*))?$`) // [?param1=value1¶mN=valueN]
 | 
			
		||||
	matches := dsnPattern.FindStringSubmatch(dataSourceName)
 | 
			
		||||
	//tlsConfigRegister := make(map[string]*tls.Config)
 | 
			
		||||
	// tlsConfigRegister := make(map[string]*tls.Config)
 | 
			
		||||
	names := dsnPattern.SubexpNames()
 | 
			
		||||
 | 
			
		||||
	for i, match := range matches {
 | 
			
		||||
@@ -883,8 +879,8 @@ func (cfg *goracleDriver) Parse(driverName, dataSourceName string) (*core.Uri, e
 | 
			
		||||
type oci8Driver struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//dataSourceName=user/password@ipv4:port/dbname
 | 
			
		||||
//dataSourceName=user/password@[ipv6]:port/dbname
 | 
			
		||||
// dataSourceName=user/password@ipv4:port/dbname
 | 
			
		||||
// dataSourceName=user/password@[ipv6]:port/dbname
 | 
			
		||||
func (p *oci8Driver) Parse(driverName, dataSourceName string) (*core.Uri, error) {
 | 
			
		||||
	db := &core.Uri{DbType: core.ORACLE}
 | 
			
		||||
	dsnPattern := regexp.MustCompile(
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1244
									
								
								vendor/github.com/go-xorm/xorm/dialect_postgres.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1244
									
								
								vendor/github.com/go-xorm/xorm/dialect_postgres.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										4
									
								
								vendor/github.com/go-xorm/xorm/dialect_sqlite3.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/go-xorm/xorm/dialect_sqlite3.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -202,10 +202,6 @@ func (db *sqlite3) Quote(name string) string {
 | 
			
		||||
	return "`" + name + "`"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (db *sqlite3) QuoteStr() string {
 | 
			
		||||
	return "`"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (db *sqlite3) AutoIncrStr() string {
 | 
			
		||||
	return "AUTOINCREMENT"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								vendor/github.com/go-xorm/xorm/engine.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								vendor/github.com/go-xorm/xorm/engine.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -175,12 +175,6 @@ func (engine *Engine) SupportInsertMany() bool {
 | 
			
		||||
	return engine.dialect.SupportInsertMany()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// QuoteStr Engine's database use which character as quote.
 | 
			
		||||
// mysql, sqlite use ` and postgres use "
 | 
			
		||||
func (engine *Engine) QuoteStr() string {
 | 
			
		||||
	return engine.dialect.QuoteStr()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (engine *Engine) quoteColumns(columnStr string) string {
 | 
			
		||||
	columns := strings.Split(columnStr, ",")
 | 
			
		||||
	for i := 0; i < len(columns); i++ {
 | 
			
		||||
@@ -196,13 +190,10 @@ func (engine *Engine) Quote(value string) string {
 | 
			
		||||
		return value
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if string(value[0]) == engine.dialect.QuoteStr() || value[0] == '`' {
 | 
			
		||||
		return value
 | 
			
		||||
	}
 | 
			
		||||
	buf := builder.StringBuilder{}
 | 
			
		||||
	engine.QuoteTo(&buf, value)
 | 
			
		||||
 | 
			
		||||
	value = strings.Replace(value, ".", engine.dialect.QuoteStr()+"."+engine.dialect.QuoteStr(), -1)
 | 
			
		||||
 | 
			
		||||
	return engine.dialect.QuoteStr() + value + engine.dialect.QuoteStr()
 | 
			
		||||
	return buf.String()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// QuoteTo quotes string and writes into the buffer
 | 
			
		||||
@@ -216,20 +207,30 @@ func (engine *Engine) QuoteTo(buf *builder.StringBuilder, value string) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if string(value[0]) == engine.dialect.QuoteStr() || value[0] == '`' {
 | 
			
		||||
		buf.WriteString(value)
 | 
			
		||||
	quotePair := engine.dialect.Quote("")
 | 
			
		||||
 | 
			
		||||
	if value[0] == '`' || len(quotePair) < 2 || value[0] == quotePair[0] { // no quote
 | 
			
		||||
		_, _ = buf.WriteString(value)
 | 
			
		||||
		return
 | 
			
		||||
	} else {
 | 
			
		||||
		prefix, suffix := quotePair[0], quotePair[1]
 | 
			
		||||
 | 
			
		||||
		_ = buf.WriteByte(prefix)
 | 
			
		||||
		for i := 0; i < len(value); i++ {
 | 
			
		||||
			if value[i] == '.' {
 | 
			
		||||
				_ = buf.WriteByte(suffix)
 | 
			
		||||
				_ = buf.WriteByte('.')
 | 
			
		||||
				_ = buf.WriteByte(prefix)
 | 
			
		||||
			} else {
 | 
			
		||||
				_ = buf.WriteByte(value[i])
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		_ = buf.WriteByte(suffix)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	value = strings.Replace(value, ".", engine.dialect.QuoteStr()+"."+engine.dialect.QuoteStr(), -1)
 | 
			
		||||
 | 
			
		||||
	buf.WriteString(engine.dialect.QuoteStr())
 | 
			
		||||
	buf.WriteString(value)
 | 
			
		||||
	buf.WriteString(engine.dialect.QuoteStr())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (engine *Engine) quote(sql string) string {
 | 
			
		||||
	return engine.dialect.QuoteStr() + sql + engine.dialect.QuoteStr()
 | 
			
		||||
	return engine.dialect.Quote(sql)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SqlType will be deprecated, please use SQLType instead
 | 
			
		||||
@@ -1581,7 +1582,7 @@ func (engine *Engine) formatColTime(col *core.Column, t time.Time) (v interface{
 | 
			
		||||
func (engine *Engine) formatTime(sqlTypeName string, t time.Time) (v interface{}) {
 | 
			
		||||
	switch sqlTypeName {
 | 
			
		||||
	case core.Time:
 | 
			
		||||
		s := t.Format("2006-01-02 15:04:05") //time.RFC3339
 | 
			
		||||
		s := t.Format("2006-01-02 15:04:05") // time.RFC3339
 | 
			
		||||
		v = s[11:19]
 | 
			
		||||
	case core.Date:
 | 
			
		||||
		v = t.Format("2006-01-02")
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/go-xorm/xorm/go.mod
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/go-xorm/xorm/go.mod
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -15,5 +15,5 @@ require (
 | 
			
		||||
	github.com/stretchr/testify v1.3.0
 | 
			
		||||
	github.com/ziutek/mymysql v1.5.4
 | 
			
		||||
	xorm.io/builder v0.3.5
 | 
			
		||||
	xorm.io/core v0.6.3
 | 
			
		||||
	xorm.io/core v0.7.0
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								vendor/github.com/go-xorm/xorm/go.sum
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/go-xorm/xorm/go.sum
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,5 +1,4 @@
 | 
			
		||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 | 
			
		||||
cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=
 | 
			
		||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 | 
			
		||||
cloud.google.com/go v0.37.4 h1:glPeL3BQJsbF6aIIYfZizMwc5LTYz250bDMjttbBGAU=
 | 
			
		||||
cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
 | 
			
		||||
@@ -13,7 +12,6 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24
 | 
			
		||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 | 
			
		||||
github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I=
 | 
			
		||||
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
@@ -36,6 +34,7 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU
 | 
			
		||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 | 
			
		||||
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 | 
			
		||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 | 
			
		||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 | 
			
		||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 | 
			
		||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 | 
			
		||||
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
 | 
			
		||||
@@ -100,8 +99,9 @@ github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wK
 | 
			
		||||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c h1:Vj5n4GlwjmQteupaxJ9+0FNOmBrHfq7vN4btdGoDZgI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
			
		||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 | 
			
		||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 | 
			
		||||
@@ -114,29 +114,38 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r
 | 
			
		||||
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
			
		||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
			
		||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
			
		||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
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/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=
 | 
			
		||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190606050223-4d9ae51c2468/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 | 
			
		||||
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
 | 
			
		||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 | 
			
		||||
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
 | 
			
		||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 | 
			
		||||
google.golang.org/appengine v1.6.0 h1:Tfd7cKwKbFRsI8RMAD3oqqw7JPFRrvFlOsfbgVkjOOw=
 | 
			
		||||
google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 | 
			
		||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 | 
			
		||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 | 
			
		||||
google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 | 
			
		||||
@@ -155,5 +164,5 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh
 | 
			
		||||
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/core v0.6.3 h1:n1NhVZt1s2oLw1BZfX2ocIJsHyso259uPgg63BGr37M=
 | 
			
		||||
xorm.io/core v0.6.3/go.mod h1:8kz/C6arVW/O9vk3PgCiMJO2hIAm1UcuOL3dSPyZ2qo=
 | 
			
		||||
xorm.io/core v0.7.0 h1:hKxuOKWZNeiFQsSuGet/KV8HZ788hclvAl+7azx3tkM=
 | 
			
		||||
xorm.io/core v0.7.0/go.mod h1:TuOJjIVa7e3w/rN8tDcAvuLBMtwzdHPbyOzE6Gk1EUI=
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								vendor/github.com/go-xorm/xorm/helpers.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								vendor/github.com/go-xorm/xorm/helpers.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -281,7 +281,7 @@ func rValue(bean interface{}) reflect.Value {
 | 
			
		||||
 | 
			
		||||
func rType(bean interface{}) reflect.Type {
 | 
			
		||||
	sliceValue := reflect.Indirect(reflect.ValueOf(bean))
 | 
			
		||||
	//return reflect.TypeOf(sliceValue.Interface())
 | 
			
		||||
	// return reflect.TypeOf(sliceValue.Interface())
 | 
			
		||||
	return sliceValue.Type()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -309,3 +309,24 @@ func sliceEq(left, right []string) bool {
 | 
			
		||||
func indexName(tableName, idxName string) string {
 | 
			
		||||
	return fmt.Sprintf("IDX_%v_%v", tableName, idxName)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func eraseAny(value string, strToErase ...string) string {
 | 
			
		||||
	if len(strToErase) == 0 {
 | 
			
		||||
		return value
 | 
			
		||||
	}
 | 
			
		||||
	var replaceSeq []string
 | 
			
		||||
	for _, s := range strToErase {
 | 
			
		||||
		replaceSeq = append(replaceSeq, s, "")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	replacer := strings.NewReplacer(replaceSeq...)
 | 
			
		||||
 | 
			
		||||
	return replacer.Replace(value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func quoteColumns(cols []string, quoteFunc func(string) string, sep string) string {
 | 
			
		||||
	for i := range cols {
 | 
			
		||||
		cols[i] = quoteFunc(cols[i])
 | 
			
		||||
	}
 | 
			
		||||
	return strings.Join(cols, sep+" ")
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/go-xorm/xorm/session_find.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/go-xorm/xorm/session_find.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -63,6 +63,8 @@ func (session *Session) FindAndCount(rowsSlicePtr interface{}, condiBean ...inte
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (session *Session) find(rowsSlicePtr interface{}, condiBean ...interface{}) error {
 | 
			
		||||
	defer session.resetStatement()
 | 
			
		||||
 | 
			
		||||
	if session.statement.lastError != nil {
 | 
			
		||||
		return session.statement.lastError
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										115
									
								
								vendor/github.com/go-xorm/xorm/session_get.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										115
									
								
								vendor/github.com/go-xorm/xorm/session_get.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -24,6 +24,8 @@ func (session *Session) Get(bean interface{}) (bool, error) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (session *Session) get(bean interface{}) (bool, error) {
 | 
			
		||||
	defer session.resetStatement()
 | 
			
		||||
 | 
			
		||||
	if session.statement.lastError != nil {
 | 
			
		||||
		return false, session.statement.lastError
 | 
			
		||||
	}
 | 
			
		||||
@@ -75,6 +77,8 @@ func (session *Session) get(bean interface{}) (bool, error) {
 | 
			
		||||
	if context != nil {
 | 
			
		||||
		res := context.Get(fmt.Sprintf("%v-%v", sqlStr, args))
 | 
			
		||||
		if res != nil {
 | 
			
		||||
			session.engine.logger.Debug("hit context cache", sqlStr)
 | 
			
		||||
 | 
			
		||||
			structValue := reflect.Indirect(reflect.ValueOf(bean))
 | 
			
		||||
			structValue.Set(reflect.Indirect(reflect.ValueOf(res)))
 | 
			
		||||
			session.lastSQL = ""
 | 
			
		||||
@@ -114,6 +118,114 @@ func (session *Session) nocacheGet(beanKind reflect.Kind, table *core.Table, bea
 | 
			
		||||
		return true, rows.Scan(&bean)
 | 
			
		||||
	case *sql.NullInt64, *sql.NullBool, *sql.NullFloat64, *sql.NullString:
 | 
			
		||||
		return true, rows.Scan(bean)
 | 
			
		||||
	case *string:
 | 
			
		||||
		var res sql.NullString
 | 
			
		||||
		if err := rows.Scan(&res); err != nil {
 | 
			
		||||
			return true, err
 | 
			
		||||
		}
 | 
			
		||||
		if res.Valid {
 | 
			
		||||
			*(bean.(*string)) = res.String
 | 
			
		||||
		}
 | 
			
		||||
		return true, nil
 | 
			
		||||
	case *int:
 | 
			
		||||
		var res sql.NullInt64
 | 
			
		||||
		if err := rows.Scan(&res); err != nil {
 | 
			
		||||
			return true, err
 | 
			
		||||
		}
 | 
			
		||||
		if res.Valid {
 | 
			
		||||
			*(bean.(*int)) = int(res.Int64)
 | 
			
		||||
		}
 | 
			
		||||
		return true, nil
 | 
			
		||||
	case *int8:
 | 
			
		||||
		var res sql.NullInt64
 | 
			
		||||
		if err := rows.Scan(&res); err != nil {
 | 
			
		||||
			return true, err
 | 
			
		||||
		}
 | 
			
		||||
		if res.Valid {
 | 
			
		||||
			*(bean.(*int8)) = int8(res.Int64)
 | 
			
		||||
		}
 | 
			
		||||
		return true, nil
 | 
			
		||||
	case *int16:
 | 
			
		||||
		var res sql.NullInt64
 | 
			
		||||
		if err := rows.Scan(&res); err != nil {
 | 
			
		||||
			return true, err
 | 
			
		||||
		}
 | 
			
		||||
		if res.Valid {
 | 
			
		||||
			*(bean.(*int16)) = int16(res.Int64)
 | 
			
		||||
		}
 | 
			
		||||
		return true, nil
 | 
			
		||||
	case *int32:
 | 
			
		||||
		var res sql.NullInt64
 | 
			
		||||
		if err := rows.Scan(&res); err != nil {
 | 
			
		||||
			return true, err
 | 
			
		||||
		}
 | 
			
		||||
		if res.Valid {
 | 
			
		||||
			*(bean.(*int32)) = int32(res.Int64)
 | 
			
		||||
		}
 | 
			
		||||
		return true, nil
 | 
			
		||||
	case *int64:
 | 
			
		||||
		var res sql.NullInt64
 | 
			
		||||
		if err := rows.Scan(&res); err != nil {
 | 
			
		||||
			return true, err
 | 
			
		||||
		}
 | 
			
		||||
		if res.Valid {
 | 
			
		||||
			*(bean.(*int64)) = int64(res.Int64)
 | 
			
		||||
		}
 | 
			
		||||
		return true, nil
 | 
			
		||||
	case *uint:
 | 
			
		||||
		var res sql.NullInt64
 | 
			
		||||
		if err := rows.Scan(&res); err != nil {
 | 
			
		||||
			return true, err
 | 
			
		||||
		}
 | 
			
		||||
		if res.Valid {
 | 
			
		||||
			*(bean.(*uint)) = uint(res.Int64)
 | 
			
		||||
		}
 | 
			
		||||
		return true, nil
 | 
			
		||||
	case *uint8:
 | 
			
		||||
		var res sql.NullInt64
 | 
			
		||||
		if err := rows.Scan(&res); err != nil {
 | 
			
		||||
			return true, err
 | 
			
		||||
		}
 | 
			
		||||
		if res.Valid {
 | 
			
		||||
			*(bean.(*uint8)) = uint8(res.Int64)
 | 
			
		||||
		}
 | 
			
		||||
		return true, nil
 | 
			
		||||
	case *uint16:
 | 
			
		||||
		var res sql.NullInt64
 | 
			
		||||
		if err := rows.Scan(&res); err != nil {
 | 
			
		||||
			return true, err
 | 
			
		||||
		}
 | 
			
		||||
		if res.Valid {
 | 
			
		||||
			*(bean.(*uint16)) = uint16(res.Int64)
 | 
			
		||||
		}
 | 
			
		||||
		return true, nil
 | 
			
		||||
	case *uint32:
 | 
			
		||||
		var res sql.NullInt64
 | 
			
		||||
		if err := rows.Scan(&res); err != nil {
 | 
			
		||||
			return true, err
 | 
			
		||||
		}
 | 
			
		||||
		if res.Valid {
 | 
			
		||||
			*(bean.(*uint32)) = uint32(res.Int64)
 | 
			
		||||
		}
 | 
			
		||||
		return true, nil
 | 
			
		||||
	case *uint64:
 | 
			
		||||
		var res sql.NullInt64
 | 
			
		||||
		if err := rows.Scan(&res); err != nil {
 | 
			
		||||
			return true, err
 | 
			
		||||
		}
 | 
			
		||||
		if res.Valid {
 | 
			
		||||
			*(bean.(*uint64)) = uint64(res.Int64)
 | 
			
		||||
		}
 | 
			
		||||
		return true, nil
 | 
			
		||||
	case *bool:
 | 
			
		||||
		var res sql.NullBool
 | 
			
		||||
		if err := rows.Scan(&res); err != nil {
 | 
			
		||||
			return true, err
 | 
			
		||||
		}
 | 
			
		||||
		if res.Valid {
 | 
			
		||||
			*(bean.(*bool)) = res.Bool
 | 
			
		||||
		}
 | 
			
		||||
		return true, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch beanKind {
 | 
			
		||||
@@ -142,6 +254,9 @@ func (session *Session) nocacheGet(beanKind reflect.Kind, table *core.Table, bea
 | 
			
		||||
		err = rows.ScanSlice(bean)
 | 
			
		||||
	case reflect.Map:
 | 
			
		||||
		err = rows.ScanMap(bean)
 | 
			
		||||
	case reflect.String, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
 | 
			
		||||
		reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
 | 
			
		||||
		err = rows.Scan(bean)
 | 
			
		||||
	default:
 | 
			
		||||
		err = rows.Scan(bean)
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										136
									
								
								vendor/github.com/go-xorm/xorm/session_insert.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										136
									
								
								vendor/github.com/go-xorm/xorm/session_insert.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -12,6 +12,7 @@ import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"xorm.io/builder"
 | 
			
		||||
	"xorm.io/core"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -242,23 +243,17 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error
 | 
			
		||||
 | 
			
		||||
	var sql string
 | 
			
		||||
	if session.engine.dialect.DBType() == core.ORACLE {
 | 
			
		||||
		temp := fmt.Sprintf(") INTO %s (%v%v%v) VALUES (",
 | 
			
		||||
		temp := fmt.Sprintf(") INTO %s (%v) VALUES (",
 | 
			
		||||
			session.engine.Quote(tableName),
 | 
			
		||||
			session.engine.QuoteStr(),
 | 
			
		||||
			strings.Join(colNames, session.engine.QuoteStr()+", "+session.engine.QuoteStr()),
 | 
			
		||||
			session.engine.QuoteStr())
 | 
			
		||||
		sql = fmt.Sprintf("INSERT ALL INTO %s (%v%v%v) VALUES (%v) SELECT 1 FROM DUAL",
 | 
			
		||||
			quoteColumns(colNames, session.engine.Quote, ","))
 | 
			
		||||
		sql = fmt.Sprintf("INSERT ALL INTO %s (%v) VALUES (%v) SELECT 1 FROM DUAL",
 | 
			
		||||
			session.engine.Quote(tableName),
 | 
			
		||||
			session.engine.QuoteStr(),
 | 
			
		||||
			strings.Join(colNames, session.engine.QuoteStr()+", "+session.engine.QuoteStr()),
 | 
			
		||||
			session.engine.QuoteStr(),
 | 
			
		||||
			quoteColumns(colNames, session.engine.Quote, ","),
 | 
			
		||||
			strings.Join(colMultiPlaces, temp))
 | 
			
		||||
	} else {
 | 
			
		||||
		sql = fmt.Sprintf("INSERT INTO %s (%v%v%v) VALUES (%v)",
 | 
			
		||||
		sql = fmt.Sprintf("INSERT INTO %s (%v) VALUES (%v)",
 | 
			
		||||
			session.engine.Quote(tableName),
 | 
			
		||||
			session.engine.QuoteStr(),
 | 
			
		||||
			strings.Join(colNames, session.engine.QuoteStr()+", "+session.engine.QuoteStr()),
 | 
			
		||||
			session.engine.QuoteStr(),
 | 
			
		||||
			quoteColumns(colNames, session.engine.Quote, ","),
 | 
			
		||||
			strings.Join(colMultiPlaces, "),("))
 | 
			
		||||
	}
 | 
			
		||||
	res, err := session.exec(sql, args...)
 | 
			
		||||
@@ -351,7 +346,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
 | 
			
		||||
	for _, v := range exprColumns {
 | 
			
		||||
		// remove the expr columns
 | 
			
		||||
		for i, colName := range colNames {
 | 
			
		||||
			if colName == v.colName {
 | 
			
		||||
			if colName == strings.Trim(v.colName, "`") {
 | 
			
		||||
				colNames = append(colNames[:i], colNames[i+1:]...)
 | 
			
		||||
				args = append(args[:i], args[i+1:]...)
 | 
			
		||||
			}
 | 
			
		||||
@@ -377,14 +372,30 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
 | 
			
		||||
	if session.engine.dialect.DBType() == core.MSSQL && len(table.AutoIncrement) > 0 {
 | 
			
		||||
		output = fmt.Sprintf(" OUTPUT Inserted.%s", table.AutoIncrement)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if len(colPlaces) > 0 {
 | 
			
		||||
		sqlStr = fmt.Sprintf("INSERT INTO %s (%v%v%v)%s VALUES (%v)",
 | 
			
		||||
			session.engine.Quote(tableName),
 | 
			
		||||
			session.engine.QuoteStr(),
 | 
			
		||||
			strings.Join(colNames, session.engine.Quote(", ")),
 | 
			
		||||
			session.engine.QuoteStr(),
 | 
			
		||||
			output,
 | 
			
		||||
			colPlaces)
 | 
			
		||||
		if session.statement.cond.IsValid() {
 | 
			
		||||
			condSQL, condArgs, err := builder.ToSQL(session.statement.cond)
 | 
			
		||||
			if 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...)
 | 
			
		||||
		} else {
 | 
			
		||||
			sqlStr = fmt.Sprintf("INSERT INTO %s (%v)%s VALUES (%v)",
 | 
			
		||||
				session.engine.Quote(tableName),
 | 
			
		||||
				quoteColumns(colNames, session.engine.Quote, ","),
 | 
			
		||||
				output,
 | 
			
		||||
				colPlaces)
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		if session.engine.dialect.DBType() == core.MYSQL {
 | 
			
		||||
			sqlStr = fmt.Sprintf("INSERT INTO %s VALUES ()", session.engine.Quote(tableName))
 | 
			
		||||
@@ -671,6 +682,11 @@ func (session *Session) insertMapInterface(m map[string]interface{}) (int64, err
 | 
			
		||||
		return 0, ErrParamsType
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	tableName := session.statement.TableName()
 | 
			
		||||
	if len(tableName) <= 0 {
 | 
			
		||||
		return 0, ErrTableNotFound
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var columns = make([]string, 0, len(m))
 | 
			
		||||
	for k := range m {
 | 
			
		||||
		columns = append(columns, k)
 | 
			
		||||
@@ -678,19 +694,40 @@ func (session *Session) insertMapInterface(m map[string]interface{}) (int64, err
 | 
			
		||||
	sort.Strings(columns)
 | 
			
		||||
 | 
			
		||||
	qm := strings.Repeat("?,", len(columns))
 | 
			
		||||
	qm = "(" + qm[:len(qm)-1] + ")"
 | 
			
		||||
 | 
			
		||||
	tableName := session.statement.TableName()
 | 
			
		||||
	if len(tableName) <= 0 {
 | 
			
		||||
		return 0, ErrTableNotFound
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var sql = fmt.Sprintf("INSERT INTO %s (`%s`) VALUES %s", session.engine.Quote(tableName), strings.Join(columns, "`,`"), qm)
 | 
			
		||||
	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
 | 
			
		||||
 | 
			
		||||
	if session.statement.cond.IsValid() {
 | 
			
		||||
		condSQL, condArgs, err := builder.ToSQL(session.statement.cond)
 | 
			
		||||
		if 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)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := session.cacheInsert(tableName); err != nil {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -711,26 +748,53 @@ func (session *Session) insertMapString(m map[string]string) (int64, error) {
 | 
			
		||||
		return 0, ErrParamsType
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	tableName := session.statement.TableName()
 | 
			
		||||
	if len(tableName) <= 0 {
 | 
			
		||||
		return 0, ErrTableNotFound
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var columns = make([]string, 0, len(m))
 | 
			
		||||
	for k := range m {
 | 
			
		||||
		columns = append(columns, k)
 | 
			
		||||
	}
 | 
			
		||||
	sort.Strings(columns)
 | 
			
		||||
 | 
			
		||||
	qm := strings.Repeat("?,", len(columns))
 | 
			
		||||
	qm = "(" + qm[:len(qm)-1] + ")"
 | 
			
		||||
 | 
			
		||||
	tableName := session.statement.TableName()
 | 
			
		||||
	if len(tableName) <= 0 {
 | 
			
		||||
		return 0, ErrTableNotFound
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var sql = fmt.Sprintf("INSERT INTO %s (`%s`) VALUES %s", session.engine.Quote(tableName), strings.Join(columns, "`,`"), qm)
 | 
			
		||||
	var args = make([]interface{}, 0, len(m))
 | 
			
		||||
	for _, colName := range columns {
 | 
			
		||||
		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
 | 
			
		||||
 | 
			
		||||
	if session.statement.cond.IsValid() {
 | 
			
		||||
		qm = "(" + qm[:len(qm)-1] + ")"
 | 
			
		||||
		condSQL, condArgs, err := builder.ToSQL(session.statement.cond)
 | 
			
		||||
		if 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)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := session.cacheInsert(tableName); err != nil {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								vendor/github.com/go-xorm/xorm/session_update.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								vendor/github.com/go-xorm/xorm/session_update.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -96,14 +96,15 @@ func (session *Session) cacheUpdate(table *core.Table, tableName, sqlStr string,
 | 
			
		||||
				return ErrCacheFailed
 | 
			
		||||
			}
 | 
			
		||||
			kvs := strings.Split(strings.TrimSpace(sqls[1]), ",")
 | 
			
		||||
 | 
			
		||||
			for idx, kv := range kvs {
 | 
			
		||||
				sps := strings.SplitN(kv, "=", 2)
 | 
			
		||||
				sps2 := strings.Split(sps[0], ".")
 | 
			
		||||
				colName := sps2[len(sps2)-1]
 | 
			
		||||
				if strings.Contains(colName, "`") {
 | 
			
		||||
					colName = strings.TrimSpace(strings.Replace(colName, "`", "", -1))
 | 
			
		||||
				} else if strings.Contains(colName, session.engine.QuoteStr()) {
 | 
			
		||||
					colName = strings.TrimSpace(strings.Replace(colName, session.engine.QuoteStr(), "", -1))
 | 
			
		||||
				// treat quote prefix, suffix and '`' as quotes
 | 
			
		||||
				quotes := append(strings.Split(session.engine.Quote(""), ""), "`")
 | 
			
		||||
				if strings.ContainsAny(colName, strings.Join(quotes, "")) {
 | 
			
		||||
					colName = strings.TrimSpace(eraseAny(colName, quotes...))
 | 
			
		||||
				} else {
 | 
			
		||||
					session.engine.logger.Debug("[cacheUpdate] cannot find column", tableName, colName)
 | 
			
		||||
					return ErrCacheFailed
 | 
			
		||||
@@ -221,19 +222,19 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//for update action to like "column = column + ?"
 | 
			
		||||
	// 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)
 | 
			
		||||
	}
 | 
			
		||||
	//for update action to like "column = column - ?"
 | 
			
		||||
	// 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)
 | 
			
		||||
	}
 | 
			
		||||
	//for update action to like "column = expression"
 | 
			
		||||
	// 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)
 | 
			
		||||
@@ -382,7 +383,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if cacher := session.engine.getCacher(tableName); cacher != nil && session.statement.UseCache {
 | 
			
		||||
		//session.cacheUpdate(table, tableName, sqlStr, args...)
 | 
			
		||||
		// session.cacheUpdate(table, tableName, sqlStr, args...)
 | 
			
		||||
		session.engine.logger.Debug("[cacheUpdate] clear table ", tableName)
 | 
			
		||||
		cacher.ClearIds(tableName)
 | 
			
		||||
		cacher.ClearBeans(tableName)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								vendor/github.com/go-xorm/xorm/statement.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/go-xorm/xorm/statement.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -6,7 +6,6 @@ package xorm
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"database/sql/driver"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"strings"
 | 
			
		||||
@@ -398,7 +397,7 @@ func (statement *Statement) buildUpdates(bean interface{},
 | 
			
		||||
								continue
 | 
			
		||||
							}
 | 
			
		||||
						} else {
 | 
			
		||||
							//TODO: how to handler?
 | 
			
		||||
							// TODO: how to handler?
 | 
			
		||||
							panic("not supported")
 | 
			
		||||
						}
 | 
			
		||||
					} else {
 | 
			
		||||
@@ -579,21 +578,9 @@ func (statement *Statement) getExpr() map[string]exprParam {
 | 
			
		||||
 | 
			
		||||
func (statement *Statement) col2NewColsWithQuote(columns ...string) []string {
 | 
			
		||||
	newColumns := make([]string, 0)
 | 
			
		||||
	quotes := append(strings.Split(statement.Engine.Quote(""), ""), "`")
 | 
			
		||||
	for _, col := range columns {
 | 
			
		||||
		col = strings.Replace(col, "`", "", -1)
 | 
			
		||||
		col = strings.Replace(col, statement.Engine.QuoteStr(), "", -1)
 | 
			
		||||
		ccols := strings.Split(col, ",")
 | 
			
		||||
		for _, c := range ccols {
 | 
			
		||||
			fields := strings.Split(strings.TrimSpace(c), ".")
 | 
			
		||||
			if len(fields) == 1 {
 | 
			
		||||
				newColumns = append(newColumns, statement.Engine.quote(fields[0]))
 | 
			
		||||
			} else if len(fields) == 2 {
 | 
			
		||||
				newColumns = append(newColumns, statement.Engine.quote(fields[0])+"."+
 | 
			
		||||
					statement.Engine.quote(fields[1]))
 | 
			
		||||
			} else {
 | 
			
		||||
				panic(errors.New("unwanted colnames"))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		newColumns = append(newColumns, statement.Engine.Quote(eraseAny(col, quotes...)))
 | 
			
		||||
	}
 | 
			
		||||
	return newColumns
 | 
			
		||||
}
 | 
			
		||||
@@ -764,7 +751,9 @@ func (statement *Statement) Join(joinOP string, tablename interface{}, condition
 | 
			
		||||
			return statement
 | 
			
		||||
		}
 | 
			
		||||
		tbs := strings.Split(tp.TableName(), ".")
 | 
			
		||||
		var aliasName = strings.Trim(tbs[len(tbs)-1], statement.Engine.QuoteStr())
 | 
			
		||||
		quotes := append(strings.Split(statement.Engine.Quote(""), ""), "`")
 | 
			
		||||
 | 
			
		||||
		var aliasName = strings.Trim(tbs[len(tbs)-1], strings.Join(quotes, ""))
 | 
			
		||||
		fmt.Fprintf(&buf, "(%s) %s ON %v", subSQL, aliasName, condition)
 | 
			
		||||
		statement.joinArgs = append(statement.joinArgs, subQueryArgs...)
 | 
			
		||||
	case *builder.Builder:
 | 
			
		||||
@@ -774,7 +763,9 @@ func (statement *Statement) Join(joinOP string, tablename interface{}, condition
 | 
			
		||||
			return statement
 | 
			
		||||
		}
 | 
			
		||||
		tbs := strings.Split(tp.TableName(), ".")
 | 
			
		||||
		var aliasName = strings.Trim(tbs[len(tbs)-1], statement.Engine.QuoteStr())
 | 
			
		||||
		quotes := append(strings.Split(statement.Engine.Quote(""), ""), "`")
 | 
			
		||||
 | 
			
		||||
		var aliasName = strings.Trim(tbs[len(tbs)-1], strings.Join(quotes, ""))
 | 
			
		||||
		fmt.Fprintf(&buf, "(%s) %s ON %v", subSQL, aliasName, condition)
 | 
			
		||||
		statement.joinArgs = append(statement.joinArgs, subQueryArgs...)
 | 
			
		||||
	default:
 | 
			
		||||
@@ -1157,8 +1148,12 @@ func (statement *Statement) genSelectSQL(columnStr, condSQL string, needLimit, n
 | 
			
		||||
			if statement.Start != 0 || statement.LimitN != 0 {
 | 
			
		||||
				oldString := buf.String()
 | 
			
		||||
				buf.Reset()
 | 
			
		||||
				rawColStr := columnStr
 | 
			
		||||
				if rawColStr == "*" {
 | 
			
		||||
					rawColStr = "at.*"
 | 
			
		||||
				}
 | 
			
		||||
				fmt.Fprintf(&buf, "SELECT %v FROM (SELECT %v,ROWNUM RN FROM (%v) at WHERE ROWNUM <= %d) aat WHERE RN > %d",
 | 
			
		||||
					columnStr, columnStr, oldString, statement.Start+statement.LimitN, statement.Start)
 | 
			
		||||
					columnStr, rawColStr, oldString, statement.Start+statement.LimitN, statement.Start)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -1242,7 +1237,7 @@ func (statement *Statement) convertUpdateSQL(sqlStr string) (string, string) {
 | 
			
		||||
 | 
			
		||||
	var whereStr = sqls[1]
 | 
			
		||||
 | 
			
		||||
	//TODO: for postgres only, if any other database?
 | 
			
		||||
	// TODO: for postgres only, if any other database?
 | 
			
		||||
	var paraStr string
 | 
			
		||||
	if statement.Engine.dialect.DBType() == core.POSTGRES {
 | 
			
		||||
		paraStr = "$"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user