mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Migrate to dep (#3972)
* Update makefile to use dep * Migrate to dep * Fix some deps * Try to find a better version for golang.org/x/net * Try to find a better version for golang.org/x/oauth2
This commit is contained in:
		
				
					committed by
					
						
						Lauris BH
					
				
			
			
				
	
			
			
			
						parent
						
							d7fd9bf7bb
						
					
				
				
					commit
					3f3383dc0a
				
			
							
								
								
									
										46
									
								
								vendor/github.com/go-xorm/xorm/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										46
									
								
								vendor/github.com/go-xorm/xorm/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,46 +0,0 @@
 | 
			
		||||
## Contributing to xorm
 | 
			
		||||
 | 
			
		||||
`xorm` has a backlog of [pull requests](https://help.github.com/articles/using-pull-requests), but contributions are still very
 | 
			
		||||
much welcome. You can help with patch review, submitting bug reports,
 | 
			
		||||
or adding new functionality. There is no formal style guide, but
 | 
			
		||||
please conform to the style of existing code and general Go formatting
 | 
			
		||||
conventions when submitting patches.
 | 
			
		||||
 | 
			
		||||
* [fork a repo](https://help.github.com/articles/fork-a-repo)
 | 
			
		||||
* [creating a pull request ](https://help.github.com/articles/creating-a-pull-request)
 | 
			
		||||
 | 
			
		||||
### Language
 | 
			
		||||
 | 
			
		||||
Since `xorm` is a world-wide open source project, please describe your issues or code changes in English as soon as possible.
 | 
			
		||||
 | 
			
		||||
### Sign your codes with comments
 | 
			
		||||
```
 | 
			
		||||
// !<you github id>! your comments
 | 
			
		||||
 | 
			
		||||
e.g.,
 | 
			
		||||
 | 
			
		||||
// !lunny! this is comments made by lunny
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Patch review
 | 
			
		||||
 | 
			
		||||
Help review existing open [pull requests](https://help.github.com/articles/using-pull-requests) by commenting on the code or
 | 
			
		||||
proposed functionality.
 | 
			
		||||
 | 
			
		||||
### Bug reports
 | 
			
		||||
 | 
			
		||||
We appreciate any bug reports, but especially ones with self-contained
 | 
			
		||||
(doesn't depend on code outside of xorm), minimal (can't be simplified
 | 
			
		||||
further) test cases. It's especially helpful if you can submit a pull
 | 
			
		||||
request with just the failing test case(you can find some example test file like [session_get_test.go](https://github.com/go-xorm/xorm/blob/master/session_get_test.go)).
 | 
			
		||||
 | 
			
		||||
If you implements a new database interface, you maybe need to add a test_<databasename>.sh file.
 | 
			
		||||
For example, [mysql_test.go](https://github.com/go-xorm/xorm/blob/master/test_mysql.sh)
 | 
			
		||||
 | 
			
		||||
### New functionality
 | 
			
		||||
 | 
			
		||||
There are a number of pending patches for new functionality, so
 | 
			
		||||
additional feature patches will take a while to merge. Still, patches
 | 
			
		||||
are generally reviewed based on usefulness and complexity in addition
 | 
			
		||||
to time-in-queue, so if you have a knockout idea, take a shot. Feel
 | 
			
		||||
free to open an issue discussion your proposed patch beforehand.
 | 
			
		||||
							
								
								
									
										430
									
								
								vendor/github.com/go-xorm/xorm/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										430
									
								
								vendor/github.com/go-xorm/xorm/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,430 +0,0 @@
 | 
			
		||||
[中文](https://github.com/go-xorm/xorm/blob/master/README_CN.md)
 | 
			
		||||
 | 
			
		||||
Xorm is a simple and powerful ORM for Go.
 | 
			
		||||
 | 
			
		||||
[](https://circleci.com/gh/go-xorm/xorm) [](https://codecov.io/gh/go-xorm/xorm)
 | 
			
		||||
[](https://goreportcard.com/report/github.com/go-xorm/xorm) 
 | 
			
		||||
[](https://discord.gg/HuR2CF3)
 | 
			
		||||
 | 
			
		||||
# Features
 | 
			
		||||
 | 
			
		||||
* Struct <-> Table Mapping Support
 | 
			
		||||
 | 
			
		||||
* Chainable APIs
 | 
			
		||||
 | 
			
		||||
* Transaction Support
 | 
			
		||||
 | 
			
		||||
* Both ORM and raw SQL operation Support
 | 
			
		||||
 | 
			
		||||
* Sync database schema Support
 | 
			
		||||
 | 
			
		||||
* Query Cache speed up
 | 
			
		||||
 | 
			
		||||
* Database Reverse support, See [Xorm Tool README](https://github.com/go-xorm/cmd/blob/master/README.md)
 | 
			
		||||
 | 
			
		||||
* Simple cascade loading support
 | 
			
		||||
 | 
			
		||||
* Optimistic Locking support
 | 
			
		||||
 | 
			
		||||
* SQL Builder support via [github.com/go-xorm/builder](https://github.com/go-xorm/builder)
 | 
			
		||||
 | 
			
		||||
* Automatical Read/Write seperatelly
 | 
			
		||||
 | 
			
		||||
# Drivers Support
 | 
			
		||||
 | 
			
		||||
Drivers for Go's sql package which currently support database/sql includes:
 | 
			
		||||
 | 
			
		||||
* Mysql: [github.com/go-sql-driver/mysql](https://github.com/go-sql-driver/mysql)
 | 
			
		||||
 | 
			
		||||
* MyMysql: [github.com/ziutek/mymysql/godrv](https://github.com/ziutek/mymysql/tree/master/godrv)
 | 
			
		||||
 | 
			
		||||
* Postgres: [github.com/lib/pq](https://github.com/lib/pq)
 | 
			
		||||
 | 
			
		||||
* Tidb: [github.com/pingcap/tidb](https://github.com/pingcap/tidb)
 | 
			
		||||
 | 
			
		||||
* SQLite: [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3)
 | 
			
		||||
 | 
			
		||||
* MsSql: [github.com/denisenkom/go-mssqldb](https://github.com/denisenkom/go-mssqldb)
 | 
			
		||||
 | 
			
		||||
* Oracle: [github.com/mattn/go-oci8](https://github.com/mattn/go-oci8) (experiment)
 | 
			
		||||
 | 
			
		||||
# Changelog
 | 
			
		||||
 | 
			
		||||
* **v0.6.4**
 | 
			
		||||
    * Automatical Read/Write seperatelly
 | 
			
		||||
    * Query/QueryString/QueryInterface and action with Where/And
 | 
			
		||||
    * Get support non-struct variables
 | 
			
		||||
    * BufferSize on Iterate
 | 
			
		||||
    * fix some other bugs.
 | 
			
		||||
 | 
			
		||||
* **v0.6.3**
 | 
			
		||||
    * merge tests to main project
 | 
			
		||||
    * add `Exist` function
 | 
			
		||||
    * add `SumInt` function
 | 
			
		||||
    * Mysql now support read and create column comment.
 | 
			
		||||
    * fix time related bugs.
 | 
			
		||||
    * fix some other bugs.
 | 
			
		||||
 | 
			
		||||
* **v0.6.2**
 | 
			
		||||
    * refactor tag parse methods
 | 
			
		||||
    * add Scan features to Get
 | 
			
		||||
    * add QueryString method
 | 
			
		||||
 | 
			
		||||
[More changes ...](https://github.com/go-xorm/manual-en-US/tree/master/chapter-16)
 | 
			
		||||
 | 
			
		||||
# Installation
 | 
			
		||||
 | 
			
		||||
	go get github.com/go-xorm/xorm
 | 
			
		||||
 | 
			
		||||
# Documents
 | 
			
		||||
 | 
			
		||||
* [Manual](http://xorm.io/docs)
 | 
			
		||||
 | 
			
		||||
* [GoDoc](http://godoc.org/github.com/go-xorm/xorm)
 | 
			
		||||
 | 
			
		||||
* [GoWalker](http://gowalker.org/github.com/go-xorm/xorm)
 | 
			
		||||
 | 
			
		||||
# Quick Start
 | 
			
		||||
 | 
			
		||||
* Create Engine
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
engine, err := xorm.NewEngine(driverName, dataSourceName)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* Define a struct and Sync2 table struct to database
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
type User struct {
 | 
			
		||||
    Id int64
 | 
			
		||||
    Name string
 | 
			
		||||
    Salt string
 | 
			
		||||
    Age int
 | 
			
		||||
    Passwd string `xorm:"varchar(200)"`
 | 
			
		||||
    Created time.Time `xorm:"created"`
 | 
			
		||||
    Updated time.Time `xorm:"updated"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
err := engine.Sync2(new(User))
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* Create Engine Group
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
dataSourceNameSlice := []string{masterDataSourceName, slave1DataSourceName, slave2DataSourceName}
 | 
			
		||||
engineGroup, err := xorm.NewEngineGroup(driverName, dataSourceNameSlice)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
masterEngine, err := xorm.NewEngine(driverName, masterDataSourceName)
 | 
			
		||||
slave1Engine, err := xorm.NewEngine(driverName, slave1DataSourceName)
 | 
			
		||||
slave2Engine, err := xorm.NewEngine(driverName, slave2DataSourceName)
 | 
			
		||||
engineGroup, err := xorm.NewEngineGroup(masterEngine, []*Engine{slave1Engine, slave2Engine})
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Then all place where `engine` you can just use `engineGroup`.
 | 
			
		||||
 | 
			
		||||
* `Query` runs a SQL string, the returned results is `[]map[string][]byte`, `QueryString` returns `[]map[string]string`, `QueryInterface` returns `[]map[string]interface{}`.
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
results, err := engine.Query("select * from user")
 | 
			
		||||
results, err := engine.Where("a = 1").Query()
 | 
			
		||||
 | 
			
		||||
results, err := engine.QueryString("select * from user")
 | 
			
		||||
results, err := engine.Where("a = 1").QueryString()
 | 
			
		||||
 | 
			
		||||
results, err := engine.QueryInterface("select * from user")
 | 
			
		||||
results, err := engine.Where("a = 1").QueryInterface()
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Exec` runs a SQL string, it returns `affected` and `error`
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
affected, err := engine.Exec("update user set age = ? where name = ?", age, name)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Insert` one or multiple records to database
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
affected, err := engine.Insert(&user)
 | 
			
		||||
// INSERT INTO struct () values ()
 | 
			
		||||
 | 
			
		||||
affected, err := engine.Insert(&user1, &user2)
 | 
			
		||||
// INSERT INTO struct1 () values ()
 | 
			
		||||
// INSERT INTO struct2 () values ()
 | 
			
		||||
 | 
			
		||||
affected, err := engine.Insert(&users)
 | 
			
		||||
// INSERT INTO struct () values (),(),()
 | 
			
		||||
 | 
			
		||||
affected, err := engine.Insert(&user1, &users)
 | 
			
		||||
// INSERT INTO struct1 () values ()
 | 
			
		||||
// INSERT INTO struct2 () values (),(),()
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Get` query one record from database
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
has, err := engine.Get(&user)
 | 
			
		||||
// SELECT * FROM user LIMIT 1
 | 
			
		||||
 | 
			
		||||
has, err := engine.Where("name = ?", name).Desc("id").Get(&user)
 | 
			
		||||
// SELECT * FROM user WHERE name = ? ORDER BY id DESC LIMIT 1
 | 
			
		||||
 | 
			
		||||
var name string
 | 
			
		||||
has, err := engine.Where("id = ?", id).Cols("name").Get(&name)
 | 
			
		||||
// SELECT name FROM user WHERE id = ?
 | 
			
		||||
 | 
			
		||||
var id int64
 | 
			
		||||
has, err := engine.Where("name = ?", name).Cols("id").Get(&id)
 | 
			
		||||
has, err := engine.SQL("select id from user").Get(&id)
 | 
			
		||||
// SELECT id FROM user WHERE name = ?
 | 
			
		||||
 | 
			
		||||
var valuesMap = make(map[string]string)
 | 
			
		||||
has, err := engine.Where("id = ?", id).Get(&valuesMap)
 | 
			
		||||
// SELECT * FROM user WHERE id = ?
 | 
			
		||||
 | 
			
		||||
var valuesSlice = make([]interface{}, len(cols))
 | 
			
		||||
has, err := engine.Where("id = ?", id).Cols(cols...).Get(&valuesSlice)
 | 
			
		||||
// SELECT col1, col2, col3 FROM user WHERE id = ?
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Exist` check if one record exist on table
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
has, err := testEngine.Exist(new(RecordExist))
 | 
			
		||||
// SELECT * FROM record_exist LIMIT 1
 | 
			
		||||
 | 
			
		||||
has, err = testEngine.Exist(&RecordExist{
 | 
			
		||||
		Name: "test1",
 | 
			
		||||
	})
 | 
			
		||||
// SELECT * FROM record_exist WHERE name = ? LIMIT 1
 | 
			
		||||
 | 
			
		||||
has, err = testEngine.Where("name = ?", "test1").Exist(&RecordExist{})
 | 
			
		||||
// SELECT * FROM record_exist WHERE name = ? LIMIT 1
 | 
			
		||||
 | 
			
		||||
has, err = testEngine.SQL("select * from record_exist where name = ?", "test1").Exist()
 | 
			
		||||
// select * from record_exist where name = ?
 | 
			
		||||
 | 
			
		||||
has, err = testEngine.Table("record_exist").Exist()
 | 
			
		||||
// SELECT * FROM record_exist LIMIT 1
 | 
			
		||||
 | 
			
		||||
has, err = testEngine.Table("record_exist").Where("name = ?", "test1").Exist()
 | 
			
		||||
// SELECT * FROM record_exist WHERE name = ? LIMIT 1
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Find` query multiple records from database, also you can use join and extends
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
var users []User
 | 
			
		||||
err := engine.Where("name = ?", name).And("age > 10").Limit(10, 0).Find(&users)
 | 
			
		||||
// SELECT * FROM user WHERE name = ? AND age > 10 limit 10 offset 0
 | 
			
		||||
 | 
			
		||||
type Detail struct {
 | 
			
		||||
    Id int64
 | 
			
		||||
    UserId int64 `xorm:"index"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type UserDetail struct {
 | 
			
		||||
    User `xorm:"extends"`
 | 
			
		||||
    Detail `xorm:"extends"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var users []UserDetail
 | 
			
		||||
err := engine.Table("user").Select("user.*, detail.*").
 | 
			
		||||
    Join("INNER", "detail", "detail.user_id = user.id").
 | 
			
		||||
    Where("user.name = ?", name).Limit(10, 0).
 | 
			
		||||
    Find(&users)
 | 
			
		||||
// SELECT user.*, detail.* FROM user INNER JOIN detail WHERE user.name = ? limit 10 offset 0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Iterate` and `Rows` query multiple records and record by record handle, there are two methods Iterate and Rows
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
err := engine.Iterate(&User{Name:name}, func(idx int, bean interface{}) error {
 | 
			
		||||
    user := bean.(*User)
 | 
			
		||||
    return nil
 | 
			
		||||
})
 | 
			
		||||
// SELECT * FROM user
 | 
			
		||||
 | 
			
		||||
err := engine.BufferSize(100).Iterate(&User{Name:name}, func(idx int, bean interface{}) error {
 | 
			
		||||
    user := bean.(*User)
 | 
			
		||||
    return nil
 | 
			
		||||
})
 | 
			
		||||
// SELECT * FROM user Limit 0, 100
 | 
			
		||||
// SELECT * FROM user Limit 101, 100
 | 
			
		||||
 | 
			
		||||
rows, err := engine.Rows(&User{Name:name})
 | 
			
		||||
// SELECT * FROM user
 | 
			
		||||
defer rows.Close()
 | 
			
		||||
bean := new(Struct)
 | 
			
		||||
for rows.Next() {
 | 
			
		||||
    err = rows.Scan(bean)
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Update` update one or more records, default will update non-empty and non-zero fields except when you use Cols, AllCols and so on.
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
affected, err := engine.Id(1).Update(&user)
 | 
			
		||||
// UPDATE user SET ... Where id = ?
 | 
			
		||||
 | 
			
		||||
affected, err := engine.Update(&user, &User{Name:name})
 | 
			
		||||
// UPDATE user SET ... Where name = ?
 | 
			
		||||
 | 
			
		||||
var ids = []int64{1, 2, 3}
 | 
			
		||||
affected, err := engine.In("id", ids).Update(&user)
 | 
			
		||||
// UPDATE user SET ... Where id IN (?, ?, ?)
 | 
			
		||||
 | 
			
		||||
// force update indicated columns by Cols
 | 
			
		||||
affected, err := engine.Id(1).Cols("age").Update(&User{Name:name, Age: 12})
 | 
			
		||||
// UPDATE user SET age = ?, updated=? Where id = ?
 | 
			
		||||
 | 
			
		||||
// force NOT update indicated columns by Omit
 | 
			
		||||
affected, err := engine.Id(1).Omit("name").Update(&User{Name:name, Age: 12})
 | 
			
		||||
// UPDATE user SET age = ?, updated=? Where id = ?
 | 
			
		||||
 | 
			
		||||
affected, err := engine.Id(1).AllCols().Update(&user)
 | 
			
		||||
// UPDATE user SET name=?,age=?,salt=?,passwd=?,updated=? Where id = ?
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Delete` delete one or more records, Delete MUST have condition
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
affected, err := engine.Where(...).Delete(&user)
 | 
			
		||||
// DELETE FROM user Where ...
 | 
			
		||||
 | 
			
		||||
affected, err := engine.ID(2).Delete(&user)
 | 
			
		||||
// DELETE FROM user Where id = ?
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Count` count records
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
counts, err := engine.Count(&user)
 | 
			
		||||
// SELECT count(*) AS total FROM user
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Sum` sum functions
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
agesFloat64, err := engine.Sum(&user, "age")
 | 
			
		||||
// SELECT sum(age) AS total FROM user
 | 
			
		||||
 | 
			
		||||
agesInt64, err := engine.SumInt(&user, "age")
 | 
			
		||||
// SELECT sum(age) AS total FROM user
 | 
			
		||||
 | 
			
		||||
sumFloat64Slice, err := engine.Sums(&user, "age", "score")
 | 
			
		||||
// SELECT sum(age), sum(score) FROM user
 | 
			
		||||
 | 
			
		||||
sumInt64Slice, err := engine.SumsInt(&user, "age", "score")
 | 
			
		||||
// SELECT sum(age), sum(score) FROM user
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* Query conditions builder
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
err := engine.Where(builder.NotIn("a", 1, 2).And(builder.In("b", "c", "d", "e"))).Find(&users)
 | 
			
		||||
// SELECT id, name ... FROM user WHERE a NOT IN (?, ?) AND b IN (?, ?, ?)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* Multiple operations in one go routine, no transation here but resue session memory
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
session := engine.NewSession()
 | 
			
		||||
defer session.Close()
 | 
			
		||||
 | 
			
		||||
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
 | 
			
		||||
if _, err := session.Insert(&user1); err != nil {
 | 
			
		||||
    return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
user2 := Userinfo{Username: "yyy"}
 | 
			
		||||
if _, err := session.Where("id = ?", 2).Update(&user2); err != nil {
 | 
			
		||||
    return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if _, err := session.Exec("delete from userinfo where username = ?", user2.Username); err != nil {
 | 
			
		||||
    return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
return nil
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* Transation should on one go routine. There is transaction and resue session memory
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
session := engine.NewSession()
 | 
			
		||||
defer session.Close()
 | 
			
		||||
 | 
			
		||||
// add Begin() before any action
 | 
			
		||||
if err := session.Begin(); err != nil {
 | 
			
		||||
    // if returned then will rollback automatically
 | 
			
		||||
    return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
 | 
			
		||||
if _, err := session.Insert(&user1); err != nil {
 | 
			
		||||
    return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
user2 := Userinfo{Username: "yyy"}
 | 
			
		||||
if _, err := session.Where("id = ?", 2).Update(&user2); err != nil {
 | 
			
		||||
    return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if _, err := session.Exec("delete from userinfo where username = ?", user2.Username); err != nil {
 | 
			
		||||
    return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// add Commit() after all actions
 | 
			
		||||
return session.Commit()
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
# Cases
 | 
			
		||||
 | 
			
		||||
* [studygolang](http://studygolang.com/) - [github.com/studygolang/studygolang](https://github.com/studygolang/studygolang)
 | 
			
		||||
 | 
			
		||||
* [Gitea](http://gitea.io) - [github.com/go-gitea/gitea](http://github.com/go-gitea/gitea)
 | 
			
		||||
 | 
			
		||||
* [Gogs](http://try.gogits.org) - [github.com/gogits/gogs](http://github.com/gogits/gogs)
 | 
			
		||||
 | 
			
		||||
* [grafana](https://grafana.com/) - [github.com/grafana/grafana](http://github.com/grafana/grafana)
 | 
			
		||||
 | 
			
		||||
* [github.com/m3ng9i/qreader](https://github.com/m3ng9i/qreader)
 | 
			
		||||
 | 
			
		||||
* [Wego](http://github.com/go-tango/wego)
 | 
			
		||||
 | 
			
		||||
* [Docker.cn](https://docker.cn/)
 | 
			
		||||
 | 
			
		||||
* [Xorm Adapter](https://github.com/casbin/xorm-adapter) for [Casbin](https://github.com/casbin/casbin) - [github.com/casbin/xorm-adapter](https://github.com/casbin/xorm-adapter)
 | 
			
		||||
 | 
			
		||||
* [Gorevel](http://gorevel.cn/) - [github.com/goofcc/gorevel](http://github.com/goofcc/gorevel)
 | 
			
		||||
 | 
			
		||||
* [Gowalker](http://gowalker.org) - [github.com/Unknwon/gowalker](http://github.com/Unknwon/gowalker)
 | 
			
		||||
 | 
			
		||||
* [Gobuild.io](http://gobuild.io) - [github.com/shxsun/gobuild](http://github.com/shxsun/gobuild)
 | 
			
		||||
 | 
			
		||||
* [Sudo China](http://sudochina.com) - [github.com/insionng/toropress](http://github.com/insionng/toropress)
 | 
			
		||||
 | 
			
		||||
* [Godaily](http://godaily.org) - [github.com/govc/godaily](http://github.com/govc/godaily)
 | 
			
		||||
 | 
			
		||||
* [YouGam](http://www.yougam.com/)
 | 
			
		||||
 | 
			
		||||
* [GoCMS - github.com/zzboy/GoCMS](https://github.com/zzdboy/GoCMS)
 | 
			
		||||
 | 
			
		||||
* [GoBBS - gobbs.domolo.com](http://gobbs.domolo.com/)
 | 
			
		||||
 | 
			
		||||
* [go-blog](http://wangcheng.me) - [github.com/easykoo/go-blog](https://github.com/easykoo/go-blog)
 | 
			
		||||
 | 
			
		||||
# Discuss
 | 
			
		||||
 | 
			
		||||
Please visit [Xorm on Google Groups](https://groups.google.com/forum/#!forum/xorm)
 | 
			
		||||
 | 
			
		||||
# Contributing
 | 
			
		||||
 | 
			
		||||
If you want to pull request, please see [CONTRIBUTING](https://github.com/go-xorm/xorm/blob/master/CONTRIBUTING.md)
 | 
			
		||||
 | 
			
		||||
# LICENSE
 | 
			
		||||
 | 
			
		||||
 BSD License
 | 
			
		||||
 [http://creativecommons.org/licenses/BSD/](http://creativecommons.org/licenses/BSD/)
 | 
			
		||||
							
								
								
									
										435
									
								
								vendor/github.com/go-xorm/xorm/README_CN.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										435
									
								
								vendor/github.com/go-xorm/xorm/README_CN.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,435 +0,0 @@
 | 
			
		||||
# xorm
 | 
			
		||||
 | 
			
		||||
[English](https://github.com/go-xorm/xorm/blob/master/README.md)
 | 
			
		||||
 | 
			
		||||
xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。
 | 
			
		||||
 | 
			
		||||
[](https://circleci.com/gh/go-xorm/xorm) [](https://codecov.io/gh/go-xorm/xorm)
 | 
			
		||||
[](https://goreportcard.com/report/github.com/go-xorm/xorm)
 | 
			
		||||
[](https://discord.gg/HuR2CF3)
 | 
			
		||||
 | 
			
		||||
## 特性
 | 
			
		||||
 | 
			
		||||
* 支持Struct和数据库表之间的灵活映射,并支持自动同步
 | 
			
		||||
 | 
			
		||||
* 事务支持
 | 
			
		||||
 | 
			
		||||
* 同时支持原始SQL语句和ORM操作的混合执行
 | 
			
		||||
 | 
			
		||||
* 使用连写来简化调用
 | 
			
		||||
 | 
			
		||||
* 支持使用Id, In, Where, Limit, Join, Having, Table, Sql, Cols等函数和结构体等方式作为条件
 | 
			
		||||
 | 
			
		||||
* 支持级联加载Struct
 | 
			
		||||
 | 
			
		||||
* 支持缓存
 | 
			
		||||
 | 
			
		||||
* 支持根据数据库自动生成xorm的结构体
 | 
			
		||||
 | 
			
		||||
* 支持记录版本(即乐观锁)
 | 
			
		||||
 | 
			
		||||
* 内置SQL Builder支持
 | 
			
		||||
 | 
			
		||||
## 驱动支持
 | 
			
		||||
 | 
			
		||||
目前支持的Go数据库驱动和对应的数据库如下:
 | 
			
		||||
 | 
			
		||||
* Mysql: [github.com/go-sql-driver/mysql](https://github.com/go-sql-driver/mysql)
 | 
			
		||||
 | 
			
		||||
* MyMysql: [github.com/ziutek/mymysql/godrv](https://github.com/ziutek/mymysql/godrv)
 | 
			
		||||
 | 
			
		||||
* Postgres: [github.com/lib/pq](https://github.com/lib/pq)
 | 
			
		||||
 | 
			
		||||
* Tidb: [github.com/pingcap/tidb](https://github.com/pingcap/tidb)
 | 
			
		||||
 | 
			
		||||
* SQLite: [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3)
 | 
			
		||||
 | 
			
		||||
* MsSql: [github.com/denisenkom/go-mssqldb](https://github.com/denisenkom/go-mssqldb)
 | 
			
		||||
 | 
			
		||||
* MsSql: [github.com/lunny/godbc](https://github.com/lunny/godbc)
 | 
			
		||||
 | 
			
		||||
* Oracle: [github.com/mattn/go-oci8](https://github.com/mattn/go-oci8) (试验性支持)
 | 
			
		||||
 | 
			
		||||
## 更新日志
 | 
			
		||||
 | 
			
		||||
* **v0.6.3**
 | 
			
		||||
    * 合并单元测试到主工程
 | 
			
		||||
    * 新增`Exist`方法
 | 
			
		||||
    * 新增`SumInt`方法
 | 
			
		||||
    * Mysql新增读取和创建字段注释支持
 | 
			
		||||
    * 新增`SetConnMaxLifetime`方法
 | 
			
		||||
    * 修正了时间相关的Bug
 | 
			
		||||
    * 修复了一些其它Bug
 | 
			
		||||
 | 
			
		||||
* **v0.6.2**
 | 
			
		||||
    * 重构Tag解析方式
 | 
			
		||||
    * Get方法新增类似Scan的特性
 | 
			
		||||
    * 新增 QueryString 方法
 | 
			
		||||
 | 
			
		||||
* **v0.6.0**
 | 
			
		||||
    * 去除对 ql 的支持
 | 
			
		||||
    * 新增条件查询分析器 [github.com/go-xorm/builder](https://github.com/go-xorm/builder), 从因此 `Where, And, Or` 函数
 | 
			
		||||
将可以用 `builder.Cond` 作为条件组合
 | 
			
		||||
    * 新增 Sum, SumInt, SumInt64 和 NotIn 函数
 | 
			
		||||
    * Bug修正
 | 
			
		||||
 | 
			
		||||
* **v0.5.0**
 | 
			
		||||
    * logging接口进行不兼容改变
 | 
			
		||||
    * Bug修正
 | 
			
		||||
 | 
			
		||||
[更多更新日志...](https://github.com/go-xorm/manual-zh-CN/tree/master/chapter-16)
 | 
			
		||||
 | 
			
		||||
## 安装
 | 
			
		||||
 | 
			
		||||
	go get github.com/go-xorm/xorm
 | 
			
		||||
 | 
			
		||||
## 文档
 | 
			
		||||
 | 
			
		||||
* [操作指南](http://xorm.io/docs)
 | 
			
		||||
 | 
			
		||||
* [GoWalker代码文档](http://gowalker.org/github.com/go-xorm/xorm)
 | 
			
		||||
 | 
			
		||||
* [Godoc代码文档](http://godoc.org/github.com/go-xorm/xorm)
 | 
			
		||||
 | 
			
		||||
# 快速开始
 | 
			
		||||
 | 
			
		||||
* 第一步创建引擎,driverName, dataSourceName和database/sql接口相同
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
engine, err := xorm.NewEngine(driverName, dataSourceName)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* 定义一个和表同步的结构体,并且自动同步结构体到数据库
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
type User struct {
 | 
			
		||||
    Id int64
 | 
			
		||||
    Name string
 | 
			
		||||
    Salt string
 | 
			
		||||
    Age int
 | 
			
		||||
    Passwd string `xorm:"varchar(200)"`
 | 
			
		||||
    Created time.Time `xorm:"created"`
 | 
			
		||||
    Updated time.Time `xorm:"updated"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
err := engine.Sync2(new(User))
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* 创建Engine组
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
dataSourceNameSlice := []string{masterDataSourceName, slave1DataSourceName, slave2DataSourceName}
 | 
			
		||||
engineGroup, err := xorm.NewEngineGroup(driverName, dataSourceNameSlice)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
masterEngine, err := xorm.NewEngine(driverName, masterDataSourceName)
 | 
			
		||||
slave1Engine, err := xorm.NewEngine(driverName, slave1DataSourceName)
 | 
			
		||||
slave2Engine, err := xorm.NewEngine(driverName, slave2DataSourceName)
 | 
			
		||||
engineGroup, err := xorm.NewEngineGroup(masterEngine, []*Engine{slave1Engine, slave2Engine})
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
所有使用 `engine` 都可以简单的用 `engineGroup` 来替换。
 | 
			
		||||
 | 
			
		||||
* `Query` 最原始的也支持SQL语句查询,返回的结果类型为 []map[string][]byte。`QueryString` 返回 []map[string]string, `QueryInterface` 返回 `[]map[string]interface{}`.
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
results, err := engine.Query("select * from user")
 | 
			
		||||
results, err := engine.Where("a = 1").Query()
 | 
			
		||||
 | 
			
		||||
results, err := engine.QueryString("select * from user")
 | 
			
		||||
results, err := engine.Where("a = 1").QueryString()
 | 
			
		||||
 | 
			
		||||
results, err := engine.QueryInterface("select * from user")
 | 
			
		||||
results, err := engine.Where("a = 1").QueryInterface()
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Exec` 执行一个SQL语句
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
affected, err := engine.Exec("update user set age = ? where name = ?", age, name)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Insert` 插入一条或者多条记录
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
affected, err := engine.Insert(&user)
 | 
			
		||||
// INSERT INTO struct () values ()
 | 
			
		||||
 | 
			
		||||
affected, err := engine.Insert(&user1, &user2)
 | 
			
		||||
// INSERT INTO struct1 () values ()
 | 
			
		||||
// INSERT INTO struct2 () values ()
 | 
			
		||||
 | 
			
		||||
affected, err := engine.Insert(&users)
 | 
			
		||||
// INSERT INTO struct () values (),(),()
 | 
			
		||||
 | 
			
		||||
affected, err := engine.Insert(&user1, &users)
 | 
			
		||||
// INSERT INTO struct1 () values ()
 | 
			
		||||
// INSERT INTO struct2 () values (),(),()
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Get` 查询单条记录
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
has, err := engine.Get(&user)
 | 
			
		||||
// SELECT * FROM user LIMIT 1
 | 
			
		||||
 | 
			
		||||
has, err := engine.Where("name = ?", name).Desc("id").Get(&user)
 | 
			
		||||
// SELECT * FROM user WHERE name = ? ORDER BY id DESC LIMIT 1
 | 
			
		||||
 | 
			
		||||
var name string
 | 
			
		||||
has, err := engine.Where("id = ?", id).Cols("name").Get(&name)
 | 
			
		||||
// SELECT name FROM user WHERE id = ?
 | 
			
		||||
 | 
			
		||||
var id int64
 | 
			
		||||
has, err := engine.Where("name = ?", name).Cols("id").Get(&id)
 | 
			
		||||
has, err := engine.SQL("select id from user").Get(&id)
 | 
			
		||||
// SELECT id FROM user WHERE name = ?
 | 
			
		||||
 | 
			
		||||
var valuesMap = make(map[string]string)
 | 
			
		||||
has, err := engine.Where("id = ?", id).Get(&valuesMap)
 | 
			
		||||
// SELECT * FROM user WHERE id = ?
 | 
			
		||||
 | 
			
		||||
var valuesSlice = make([]interface{}, len(cols))
 | 
			
		||||
has, err := engine.Where("id = ?", id).Cols(cols...).Get(&valuesSlice)
 | 
			
		||||
// SELECT col1, col2, col3 FROM user WHERE id = ?
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Exist` 检测记录是否存在
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
has, err := testEngine.Exist(new(RecordExist))
 | 
			
		||||
// SELECT * FROM record_exist LIMIT 1
 | 
			
		||||
 | 
			
		||||
has, err = testEngine.Exist(&RecordExist{
 | 
			
		||||
		Name: "test1",
 | 
			
		||||
	})
 | 
			
		||||
// SELECT * FROM record_exist WHERE name = ? LIMIT 1
 | 
			
		||||
 | 
			
		||||
has, err = testEngine.Where("name = ?", "test1").Exist(&RecordExist{})
 | 
			
		||||
// SELECT * FROM record_exist WHERE name = ? LIMIT 1
 | 
			
		||||
 | 
			
		||||
has, err = testEngine.SQL("select * from record_exist where name = ?", "test1").Exist()
 | 
			
		||||
// select * from record_exist where name = ?
 | 
			
		||||
 | 
			
		||||
has, err = testEngine.Table("record_exist").Exist()
 | 
			
		||||
// SELECT * FROM record_exist LIMIT 1
 | 
			
		||||
 | 
			
		||||
has, err = testEngine.Table("record_exist").Where("name = ?", "test1").Exist()
 | 
			
		||||
// SELECT * FROM record_exist WHERE name = ? LIMIT 1
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Find` 查询多条记录,当然可以使用Join和extends来组合使用
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
var users []User
 | 
			
		||||
err := engine.Where("name = ?", name).And("age > 10").Limit(10, 0).Find(&users)
 | 
			
		||||
// SELECT * FROM user WHERE name = ? AND age > 10 limit 10 offset 0
 | 
			
		||||
 | 
			
		||||
type Detail struct {
 | 
			
		||||
    Id int64
 | 
			
		||||
    UserId int64 `xorm:"index"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type UserDetail struct {
 | 
			
		||||
    User `xorm:"extends"`
 | 
			
		||||
    Detail `xorm:"extends"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var users []UserDetail
 | 
			
		||||
err := engine.Table("user").Select("user.*, detail.*")
 | 
			
		||||
    Join("INNER", "detail", "detail.user_id = user.id").
 | 
			
		||||
    Where("user.name = ?", name).Limit(10, 0).
 | 
			
		||||
    Find(&users)
 | 
			
		||||
// SELECT user.*, detail.* FROM user INNER JOIN detail WHERE user.name = ? limit 10 offset 0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Iterate` 和 `Rows` 根据条件遍历数据库,可以有两种方式: Iterate and Rows
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
err := engine.Iterate(&User{Name:name}, func(idx int, bean interface{}) error {
 | 
			
		||||
    user := bean.(*User)
 | 
			
		||||
    return nil
 | 
			
		||||
})
 | 
			
		||||
// SELECT * FROM user
 | 
			
		||||
 | 
			
		||||
err := engine.BufferSize(100).Iterate(&User{Name:name}, func(idx int, bean interface{}) error {
 | 
			
		||||
    user := bean.(*User)
 | 
			
		||||
    return nil
 | 
			
		||||
})
 | 
			
		||||
// SELECT * FROM user Limit 0, 100
 | 
			
		||||
// SELECT * FROM user Limit 101, 100
 | 
			
		||||
 | 
			
		||||
rows, err := engine.Rows(&User{Name:name})
 | 
			
		||||
// SELECT * FROM user
 | 
			
		||||
defer rows.Close()
 | 
			
		||||
bean := new(Struct)
 | 
			
		||||
for rows.Next() {
 | 
			
		||||
    err = rows.Scan(bean)
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Update` 更新数据,除非使用Cols,AllCols函数指明,默认只更新非空和非0的字段
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
affected, err := engine.Id(1).Update(&user)
 | 
			
		||||
// UPDATE user SET ... Where id = ?
 | 
			
		||||
 | 
			
		||||
affected, err := engine.Update(&user, &User{Name:name})
 | 
			
		||||
// UPDATE user SET ... Where name = ?
 | 
			
		||||
 | 
			
		||||
var ids = []int64{1, 2, 3}
 | 
			
		||||
affected, err := engine.In(ids).Update(&user)
 | 
			
		||||
// UPDATE user SET ... Where id IN (?, ?, ?)
 | 
			
		||||
 | 
			
		||||
// force update indicated columns by Cols
 | 
			
		||||
affected, err := engine.Id(1).Cols("age").Update(&User{Name:name, Age: 12})
 | 
			
		||||
// UPDATE user SET age = ?, updated=? Where id = ?
 | 
			
		||||
 | 
			
		||||
// force NOT update indicated columns by Omit
 | 
			
		||||
affected, err := engine.Id(1).Omit("name").Update(&User{Name:name, Age: 12})
 | 
			
		||||
// UPDATE user SET age = ?, updated=? Where id = ?
 | 
			
		||||
 | 
			
		||||
affected, err := engine.Id(1).AllCols().Update(&user)
 | 
			
		||||
// UPDATE user SET name=?,age=?,salt=?,passwd=?,updated=? Where id = ?
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Delete` 删除记录,需要注意,删除必须至少有一个条件,否则会报错。要清空数据库可以用EmptyTable
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
affected, err := engine.Where(...).Delete(&user)
 | 
			
		||||
// DELETE FROM user Where ...
 | 
			
		||||
 | 
			
		||||
affected, err := engine.ID(2).Delete(&user)
 | 
			
		||||
// DELETE FROM user Where id = ?
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Count` 获取记录条数
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
counts, err := engine.Count(&user)
 | 
			
		||||
// SELECT count(*) AS total FROM user
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* `Sum` 求和函数
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
agesFloat64, err := engine.Sum(&user, "age")
 | 
			
		||||
// SELECT sum(age) AS total FROM user
 | 
			
		||||
 | 
			
		||||
agesInt64, err := engine.SumInt(&user, "age")
 | 
			
		||||
// SELECT sum(age) AS total FROM user
 | 
			
		||||
 | 
			
		||||
sumFloat64Slice, err := engine.Sums(&user, "age", "score")
 | 
			
		||||
// SELECT sum(age), sum(score) FROM user
 | 
			
		||||
 | 
			
		||||
sumInt64Slice, err := engine.SumsInt(&user, "age", "score")
 | 
			
		||||
// SELECT sum(age), sum(score) FROM user
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* 条件编辑器
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
err := engine.Where(builder.NotIn("a", 1, 2).And(builder.In("b", "c", "d", "e"))).Find(&users)
 | 
			
		||||
// SELECT id, name ... FROM user WHERE a NOT IN (?, ?) AND b IN (?, ?, ?)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* 在一个Go程中多次操作数据库,但没有事务
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
session := engine.NewSession()
 | 
			
		||||
defer session.Close()
 | 
			
		||||
 | 
			
		||||
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
 | 
			
		||||
if _, err := session.Insert(&user1); err != nil {
 | 
			
		||||
    return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
user2 := Userinfo{Username: "yyy"}
 | 
			
		||||
if _, err := session.Where("id = ?", 2).Update(&user2); err != nil {
 | 
			
		||||
    return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if _, err := session.Exec("delete from userinfo where username = ?", user2.Username); err != nil {
 | 
			
		||||
    return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
return nil
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
* 在一个Go程中有事务
 | 
			
		||||
 | 
			
		||||
```Go
 | 
			
		||||
session := engine.NewSession()
 | 
			
		||||
defer session.Close()
 | 
			
		||||
 | 
			
		||||
// add Begin() before any action
 | 
			
		||||
if err := session.Begin(); err != nil {
 | 
			
		||||
    // if returned then will rollback automatically
 | 
			
		||||
    return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
 | 
			
		||||
if _, err := session.Insert(&user1); err != nil {
 | 
			
		||||
    return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
user2 := Userinfo{Username: "yyy"}
 | 
			
		||||
if _, err := session.Where("id = ?", 2).Update(&user2); err != nil {
 | 
			
		||||
    return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if _, err := session.Exec("delete from userinfo where username = ?", user2.Username); err != nil {
 | 
			
		||||
    return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// add Commit() after all actions
 | 
			
		||||
return session.Commit()
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
# 案例
 | 
			
		||||
 | 
			
		||||
* [Go语言中文网](http://studygolang.com/) - [github.com/studygolang/studygolang](https://github.com/studygolang/studygolang)
 | 
			
		||||
 | 
			
		||||
* [Gitea](http://gitea.io) - [github.com/go-gitea/gitea](http://github.com/go-gitea/gitea)
 | 
			
		||||
 | 
			
		||||
* [Gogs](http://try.gogits.org) - [github.com/gogits/gogs](http://github.com/gogits/gogs)
 | 
			
		||||
 | 
			
		||||
* [grafana](https://grafana.com/) - [github.com/grafana/grafana](http://github.com/grafana/grafana)
 | 
			
		||||
 | 
			
		||||
* [github.com/m3ng9i/qreader](https://github.com/m3ng9i/qreader)
 | 
			
		||||
 | 
			
		||||
* [Wego](http://github.com/go-tango/wego)
 | 
			
		||||
 | 
			
		||||
* [Docker.cn](https://docker.cn/)
 | 
			
		||||
 | 
			
		||||
* [Xorm Adapter](https://github.com/casbin/xorm-adapter) for [Casbin](https://github.com/casbin/casbin) - [github.com/casbin/xorm-adapter](https://github.com/casbin/xorm-adapter)
 | 
			
		||||
 | 
			
		||||
* [Gowalker](http://gowalker.org) - [github.com/Unknwon/gowalker](http://github.com/Unknwon/gowalker)
 | 
			
		||||
 | 
			
		||||
* [Gobuild.io](http://gobuild.io) - [github.com/shxsun/gobuild](http://github.com/shxsun/gobuild)
 | 
			
		||||
 | 
			
		||||
* [Sudo China](http://sudochina.com) - [github.com/insionng/toropress](http://github.com/insionng/toropress)
 | 
			
		||||
 | 
			
		||||
* [Godaily](http://godaily.org) - [github.com/govc/godaily](http://github.com/govc/godaily)
 | 
			
		||||
 | 
			
		||||
* [YouGam](http://www.yougam.com/)
 | 
			
		||||
 | 
			
		||||
* [GoCMS - github.com/zzboy/GoCMS](https://github.com/zzdboy/GoCMS)
 | 
			
		||||
 | 
			
		||||
* [GoBBS - gobbs.domolo.com](http://gobbs.domolo.com/)
 | 
			
		||||
 | 
			
		||||
* [go-blog](http://wangcheng.me) - [github.com/easykoo/go-blog](https://github.com/easykoo/go-blog)
 | 
			
		||||
 | 
			
		||||
## 讨论
 | 
			
		||||
 | 
			
		||||
请加入QQ群:280360085 进行讨论。
 | 
			
		||||
 | 
			
		||||
## 贡献
 | 
			
		||||
 | 
			
		||||
如果您也想为Xorm贡献您的力量,请查看 [CONTRIBUTING](https://github.com/go-xorm/xorm/blob/master/CONTRIBUTING.md)
 | 
			
		||||
 | 
			
		||||
## LICENSE
 | 
			
		||||
 | 
			
		||||
BSD License
 | 
			
		||||
[http://creativecommons.org/licenses/BSD/](http://creativecommons.org/licenses/BSD/)
 | 
			
		||||
							
								
								
									
										38
									
								
								vendor/github.com/go-xorm/xorm/circle.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										38
									
								
								vendor/github.com/go-xorm/xorm/circle.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,38 +0,0 @@
 | 
			
		||||
dependencies:
 | 
			
		||||
  override:
 | 
			
		||||
    # './...' is a relative pattern which means all subdirectories
 | 
			
		||||
    - go get -t -d -v ./...
 | 
			
		||||
    - go get -t -d -v github.com/go-xorm/tests
 | 
			
		||||
    - go get -u github.com/go-xorm/core
 | 
			
		||||
    - go get -u github.com/go-xorm/builder
 | 
			
		||||
    - go build -v
 | 
			
		||||
 | 
			
		||||
database:
 | 
			
		||||
  override:
 | 
			
		||||
    - mysql -u root -e "CREATE DATABASE xorm_test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci"
 | 
			
		||||
    - mysql -u root -e "CREATE DATABASE xorm_test1 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci"
 | 
			
		||||
    - mysql -u root -e "CREATE DATABASE xorm_test2 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci"
 | 
			
		||||
    - mysql -u root -e "CREATE DATABASE xorm_test3 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci"
 | 
			
		||||
    - createdb -p 5432 -e -U postgres xorm_test
 | 
			
		||||
    - createdb -p 5432 -e -U postgres xorm_test1
 | 
			
		||||
    - createdb -p 5432 -e -U postgres xorm_test2
 | 
			
		||||
    - createdb -p 5432 -e -U postgres xorm_test3
 | 
			
		||||
 | 
			
		||||
test:
 | 
			
		||||
  override:
 | 
			
		||||
    # './...' is a relative pattern which means all subdirectories
 | 
			
		||||
    - 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
 | 
			
		||||
    - go test -v -race -db="mysql" -conn_str="root:@/xorm_test" -coverprofile=coverage2-1.txt -covermode=atomic
 | 
			
		||||
    - go test -v -race -db="mysql" -conn_str="root:@/xorm_test" -cache=true -coverprofile=coverage2-2.txt -covermode=atomic
 | 
			
		||||
    - go test -v -race -db="mymysql" -conn_str="xorm_test/root/" -coverprofile=coverage3-1.txt -covermode=atomic
 | 
			
		||||
    - go test -v -race -db="mymysql" -conn_str="xorm_test/root/" -cache=true -coverprofile=coverage3-2.txt -covermode=atomic
 | 
			
		||||
    - go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -coverprofile=coverage4-1.txt -covermode=atomic
 | 
			
		||||
    - go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -cache=true -coverprofile=coverage4-2.txt -covermode=atomic
 | 
			
		||||
    - gocovmerge coverage1-1.txt coverage1-2.txt coverage2-1.txt coverage2-2.txt coverage3-1.txt coverage3-2.txt coverage4-1.txt coverage4-2.txt > coverage.txt
 | 
			
		||||
    - cd /home/ubuntu/.go_workspace/src/github.com/go-xorm/tests && ./sqlite3.sh
 | 
			
		||||
    - cd /home/ubuntu/.go_workspace/src/github.com/go-xorm/tests && ./mysql.sh
 | 
			
		||||
    - cd /home/ubuntu/.go_workspace/src/github.com/go-xorm/tests && ./postgres.sh
 | 
			
		||||
  post:
 | 
			
		||||
    - bash <(curl -s https://codecov.io/bash)
 | 
			
		||||
							
								
								
									
										6
									
								
								vendor/github.com/go-xorm/xorm/gen_reserved.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/go-xorm/xorm/gen_reserved.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,6 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
if [ -f $1 ];then
 | 
			
		||||
    cat $1| awk '{printf("\""$1"\":true,\n")}' 
 | 
			
		||||
else
 | 
			
		||||
    echo "argument $1 if not a file!"
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										746
									
								
								vendor/github.com/go-xorm/xorm/pg_reserved.txt
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										746
									
								
								vendor/github.com/go-xorm/xorm/pg_reserved.txt
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,746 +0,0 @@
 | 
			
		||||
A	 	non-reserved	non-reserved	 
 | 
			
		||||
ABORT	non-reserved	 	 	 
 | 
			
		||||
ABS	 	reserved	reserved	 
 | 
			
		||||
ABSENT	 	non-reserved	non-reserved	 
 | 
			
		||||
ABSOLUTE	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
ACCESS	non-reserved	 	 	 
 | 
			
		||||
ACCORDING	 	non-reserved	non-reserved	 
 | 
			
		||||
ACTION	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
ADA	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
ADD	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
ADMIN	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
AFTER	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
AGGREGATE	non-reserved	 	 	 
 | 
			
		||||
ALL	reserved	reserved	reserved	reserved
 | 
			
		||||
ALLOCATE	 	reserved	reserved	reserved
 | 
			
		||||
ALSO	non-reserved	 	 	 
 | 
			
		||||
ALTER	non-reserved	reserved	reserved	reserved
 | 
			
		||||
ALWAYS	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
ANALYSE	reserved	 	 	 
 | 
			
		||||
ANALYZE	reserved	 	 	 
 | 
			
		||||
AND	reserved	reserved	reserved	reserved
 | 
			
		||||
ANY	reserved	reserved	reserved	reserved
 | 
			
		||||
ARE	 	reserved	reserved	reserved
 | 
			
		||||
ARRAY	reserved	reserved	reserved	 
 | 
			
		||||
ARRAY_AGG	 	reserved	reserved	 
 | 
			
		||||
ARRAY_MAX_CARDINALITY	 	reserved	 	 
 | 
			
		||||
AS	reserved	reserved	reserved	reserved
 | 
			
		||||
ASC	reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
ASENSITIVE	 	reserved	reserved	 
 | 
			
		||||
ASSERTION	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
ASSIGNMENT	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
ASYMMETRIC	reserved	reserved	reserved	 
 | 
			
		||||
AT	non-reserved	reserved	reserved	reserved
 | 
			
		||||
ATOMIC	 	reserved	reserved	 
 | 
			
		||||
ATTRIBUTE	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
ATTRIBUTES	 	non-reserved	non-reserved	 
 | 
			
		||||
AUTHORIZATION	reserved (can be function or type)	reserved	reserved	reserved
 | 
			
		||||
AVG	 	reserved	reserved	reserved
 | 
			
		||||
BACKWARD	non-reserved	 	 	 
 | 
			
		||||
BASE64	 	non-reserved	non-reserved	 
 | 
			
		||||
BEFORE	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
BEGIN	non-reserved	reserved	reserved	reserved
 | 
			
		||||
BEGIN_FRAME	 	reserved	 	 
 | 
			
		||||
BEGIN_PARTITION	 	reserved	 	 
 | 
			
		||||
BERNOULLI	 	non-reserved	non-reserved	 
 | 
			
		||||
BETWEEN	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
BIGINT	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
BINARY	reserved (can be function or type)	reserved	reserved	 
 | 
			
		||||
BIT	non-reserved (cannot be function or type)	 	 	reserved
 | 
			
		||||
BIT_LENGTH	 	 	 	reserved
 | 
			
		||||
BLOB	 	reserved	reserved	 
 | 
			
		||||
BLOCKED	 	non-reserved	non-reserved	 
 | 
			
		||||
BOM	 	non-reserved	non-reserved	 
 | 
			
		||||
BOOLEAN	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
BOTH	reserved	reserved	reserved	reserved
 | 
			
		||||
BREADTH	 	non-reserved	non-reserved	 
 | 
			
		||||
BY	non-reserved	reserved	reserved	reserved
 | 
			
		||||
C	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
CACHE	non-reserved	 	 	 
 | 
			
		||||
CALL	 	reserved	reserved	 
 | 
			
		||||
CALLED	non-reserved	reserved	reserved	 
 | 
			
		||||
CARDINALITY	 	reserved	reserved	 
 | 
			
		||||
CASCADE	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
CASCADED	non-reserved	reserved	reserved	reserved
 | 
			
		||||
CASE	reserved	reserved	reserved	reserved
 | 
			
		||||
CAST	reserved	reserved	reserved	reserved
 | 
			
		||||
CATALOG	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
CATALOG_NAME	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
CEIL	 	reserved	reserved	 
 | 
			
		||||
CEILING	 	reserved	reserved	 
 | 
			
		||||
CHAIN	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
CHAR	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
CHARACTER	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
CHARACTERISTICS	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
CHARACTERS	 	non-reserved	non-reserved	 
 | 
			
		||||
CHARACTER_LENGTH	 	reserved	reserved	reserved
 | 
			
		||||
CHARACTER_SET_CATALOG	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
CHARACTER_SET_NAME	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
CHARACTER_SET_SCHEMA	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
CHAR_LENGTH	 	reserved	reserved	reserved
 | 
			
		||||
CHECK	reserved	reserved	reserved	reserved
 | 
			
		||||
CHECKPOINT	non-reserved	 	 	 
 | 
			
		||||
CLASS	non-reserved	 	 	 
 | 
			
		||||
CLASS_ORIGIN	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
CLOB	 	reserved	reserved	 
 | 
			
		||||
CLOSE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
CLUSTER	non-reserved	 	 	 
 | 
			
		||||
COALESCE	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
COBOL	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
COLLATE	reserved	reserved	reserved	reserved
 | 
			
		||||
COLLATION	reserved (can be function or type)	non-reserved	non-reserved	reserved
 | 
			
		||||
COLLATION_CATALOG	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
COLLATION_NAME	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
COLLATION_SCHEMA	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
COLLECT	 	reserved	reserved	 
 | 
			
		||||
COLUMN	reserved	reserved	reserved	reserved
 | 
			
		||||
COLUMNS	 	non-reserved	non-reserved	 
 | 
			
		||||
COLUMN_NAME	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
COMMAND_FUNCTION	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
COMMAND_FUNCTION_CODE	 	non-reserved	non-reserved	 
 | 
			
		||||
COMMENT	non-reserved	 	 	 
 | 
			
		||||
COMMENTS	non-reserved	 	 	 
 | 
			
		||||
COMMIT	non-reserved	reserved	reserved	reserved
 | 
			
		||||
COMMITTED	non-reserved	non-reserved	non-reserved	non-reserved
 | 
			
		||||
CONCURRENTLY	reserved (can be function or type)	 	 	 
 | 
			
		||||
CONDITION	 	reserved	reserved	 
 | 
			
		||||
CONDITION_NUMBER	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
CONFIGURATION	non-reserved	 	 	 
 | 
			
		||||
CONNECT	 	reserved	reserved	reserved
 | 
			
		||||
CONNECTION	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
CONNECTION_NAME	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
CONSTRAINT	reserved	reserved	reserved	reserved
 | 
			
		||||
CONSTRAINTS	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
CONSTRAINT_CATALOG	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
CONSTRAINT_NAME	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
CONSTRAINT_SCHEMA	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
CONSTRUCTOR	 	non-reserved	non-reserved	 
 | 
			
		||||
CONTAINS	 	reserved	non-reserved	 
 | 
			
		||||
CONTENT	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
CONTINUE	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
CONTROL	 	non-reserved	non-reserved	 
 | 
			
		||||
CONVERSION	non-reserved	 	 	 
 | 
			
		||||
CONVERT	 	reserved	reserved	reserved
 | 
			
		||||
COPY	non-reserved	 	 	 
 | 
			
		||||
CORR	 	reserved	reserved	 
 | 
			
		||||
CORRESPONDING	 	reserved	reserved	reserved
 | 
			
		||||
COST	non-reserved	 	 	 
 | 
			
		||||
COUNT	 	reserved	reserved	reserved
 | 
			
		||||
COVAR_POP	 	reserved	reserved	 
 | 
			
		||||
COVAR_SAMP	 	reserved	reserved	 
 | 
			
		||||
CREATE	reserved	reserved	reserved	reserved
 | 
			
		||||
CROSS	reserved (can be function or type)	reserved	reserved	reserved
 | 
			
		||||
CSV	non-reserved	 	 	 
 | 
			
		||||
CUBE	 	reserved	reserved	 
 | 
			
		||||
CUME_DIST	 	reserved	reserved	 
 | 
			
		||||
CURRENT	non-reserved	reserved	reserved	reserved
 | 
			
		||||
CURRENT_CATALOG	reserved	reserved	reserved	 
 | 
			
		||||
CURRENT_DATE	reserved	reserved	reserved	reserved
 | 
			
		||||
CURRENT_DEFAULT_TRANSFORM_GROUP	 	reserved	reserved	 
 | 
			
		||||
CURRENT_PATH	 	reserved	reserved	 
 | 
			
		||||
CURRENT_ROLE	reserved	reserved	reserved	 
 | 
			
		||||
CURRENT_ROW	 	reserved	 	 
 | 
			
		||||
CURRENT_SCHEMA	reserved (can be function or type)	reserved	reserved	 
 | 
			
		||||
CURRENT_TIME	reserved	reserved	reserved	reserved
 | 
			
		||||
CURRENT_TIMESTAMP	reserved	reserved	reserved	reserved
 | 
			
		||||
CURRENT_TRANSFORM_GROUP_FOR_TYPE	 	reserved	reserved	 
 | 
			
		||||
CURRENT_USER	reserved	reserved	reserved	reserved
 | 
			
		||||
CURSOR	non-reserved	reserved	reserved	reserved
 | 
			
		||||
CURSOR_NAME	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
CYCLE	non-reserved	reserved	reserved	 
 | 
			
		||||
DATA	non-reserved	non-reserved	non-reserved	non-reserved
 | 
			
		||||
DATABASE	non-reserved	 	 	 
 | 
			
		||||
DATALINK	 	reserved	reserved	 
 | 
			
		||||
DATE	 	reserved	reserved	reserved
 | 
			
		||||
DATETIME_INTERVAL_CODE	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
DATETIME_INTERVAL_PRECISION	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
DAY	non-reserved	reserved	reserved	reserved
 | 
			
		||||
DB	 	non-reserved	non-reserved	 
 | 
			
		||||
DEALLOCATE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
DEC	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
DECIMAL	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
DECLARE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
DEFAULT	reserved	reserved	reserved	reserved
 | 
			
		||||
DEFAULTS	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
DEFERRABLE	reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
DEFERRED	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
DEFINED	 	non-reserved	non-reserved	 
 | 
			
		||||
DEFINER	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
DEGREE	 	non-reserved	non-reserved	 
 | 
			
		||||
DELETE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
DELIMITER	non-reserved	 	 	 
 | 
			
		||||
DELIMITERS	non-reserved	 	 	 
 | 
			
		||||
DENSE_RANK	 	reserved	reserved	 
 | 
			
		||||
DEPTH	 	non-reserved	non-reserved	 
 | 
			
		||||
DEREF	 	reserved	reserved	 
 | 
			
		||||
DERIVED	 	non-reserved	non-reserved	 
 | 
			
		||||
DESC	reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
DESCRIBE	 	reserved	reserved	reserved
 | 
			
		||||
DESCRIPTOR	 	non-reserved	non-reserved	reserved
 | 
			
		||||
DETERMINISTIC	 	reserved	reserved	 
 | 
			
		||||
DIAGNOSTICS	 	non-reserved	non-reserved	reserved
 | 
			
		||||
DICTIONARY	non-reserved	 	 	 
 | 
			
		||||
DISABLE	non-reserved	 	 	 
 | 
			
		||||
DISCARD	non-reserved	 	 	 
 | 
			
		||||
DISCONNECT	 	reserved	reserved	reserved
 | 
			
		||||
DISPATCH	 	non-reserved	non-reserved	 
 | 
			
		||||
DISTINCT	reserved	reserved	reserved	reserved
 | 
			
		||||
DLNEWCOPY	 	reserved	reserved	 
 | 
			
		||||
DLPREVIOUSCOPY	 	reserved	reserved	 
 | 
			
		||||
DLURLCOMPLETE	 	reserved	reserved	 
 | 
			
		||||
DLURLCOMPLETEONLY	 	reserved	reserved	 
 | 
			
		||||
DLURLCOMPLETEWRITE	 	reserved	reserved	 
 | 
			
		||||
DLURLPATH	 	reserved	reserved	 
 | 
			
		||||
DLURLPATHONLY	 	reserved	reserved	 
 | 
			
		||||
DLURLPATHWRITE	 	reserved	reserved	 
 | 
			
		||||
DLURLSCHEME	 	reserved	reserved	 
 | 
			
		||||
DLURLSERVER	 	reserved	reserved	 
 | 
			
		||||
DLVALUE	 	reserved	reserved	 
 | 
			
		||||
DO	reserved	 	 	 
 | 
			
		||||
DOCUMENT	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
DOMAIN	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
DOUBLE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
DROP	non-reserved	reserved	reserved	reserved
 | 
			
		||||
DYNAMIC	 	reserved	reserved	 
 | 
			
		||||
DYNAMIC_FUNCTION	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
DYNAMIC_FUNCTION_CODE	 	non-reserved	non-reserved	 
 | 
			
		||||
EACH	non-reserved	reserved	reserved	 
 | 
			
		||||
ELEMENT	 	reserved	reserved	 
 | 
			
		||||
ELSE	reserved	reserved	reserved	reserved
 | 
			
		||||
EMPTY	 	non-reserved	non-reserved	 
 | 
			
		||||
ENABLE	non-reserved	 	 	 
 | 
			
		||||
ENCODING	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
ENCRYPTED	non-reserved	 	 	 
 | 
			
		||||
END	reserved	reserved	reserved	reserved
 | 
			
		||||
END-EXEC	 	reserved	reserved	reserved
 | 
			
		||||
END_FRAME	 	reserved	 	 
 | 
			
		||||
END_PARTITION	 	reserved	 	 
 | 
			
		||||
ENFORCED	 	non-reserved	 	 
 | 
			
		||||
ENUM	non-reserved	 	 	 
 | 
			
		||||
EQUALS	 	reserved	non-reserved	 
 | 
			
		||||
ESCAPE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
EVENT	non-reserved	 	 	 
 | 
			
		||||
EVERY	 	reserved	reserved	 
 | 
			
		||||
EXCEPT	reserved	reserved	reserved	reserved
 | 
			
		||||
EXCEPTION	 	 	 	reserved
 | 
			
		||||
EXCLUDE	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
EXCLUDING	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
EXCLUSIVE	non-reserved	 	 	 
 | 
			
		||||
EXEC	 	reserved	reserved	reserved
 | 
			
		||||
EXECUTE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
EXISTS	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
EXP	 	reserved	reserved	 
 | 
			
		||||
EXPLAIN	non-reserved	 	 	 
 | 
			
		||||
EXPRESSION	 	non-reserved	 	 
 | 
			
		||||
EXTENSION	non-reserved	 	 	 
 | 
			
		||||
EXTERNAL	non-reserved	reserved	reserved	reserved
 | 
			
		||||
EXTRACT	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
FALSE	reserved	reserved	reserved	reserved
 | 
			
		||||
FAMILY	non-reserved	 	 	 
 | 
			
		||||
FETCH	reserved	reserved	reserved	reserved
 | 
			
		||||
FILE	 	non-reserved	non-reserved	 
 | 
			
		||||
FILTER	 	reserved	reserved	 
 | 
			
		||||
FINAL	 	non-reserved	non-reserved	 
 | 
			
		||||
FIRST	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
FIRST_VALUE	 	reserved	reserved	 
 | 
			
		||||
FLAG	 	non-reserved	non-reserved	 
 | 
			
		||||
FLOAT	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
FLOOR	 	reserved	reserved	 
 | 
			
		||||
FOLLOWING	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
FOR	reserved	reserved	reserved	reserved
 | 
			
		||||
FORCE	non-reserved	 	 	 
 | 
			
		||||
FOREIGN	reserved	reserved	reserved	reserved
 | 
			
		||||
FORTRAN	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
FORWARD	non-reserved	 	 	 
 | 
			
		||||
FOUND	 	non-reserved	non-reserved	reserved
 | 
			
		||||
FRAME_ROW	 	reserved	 	 
 | 
			
		||||
FREE	 	reserved	reserved	 
 | 
			
		||||
FREEZE	reserved (can be function or type)	 	 	 
 | 
			
		||||
FROM	reserved	reserved	reserved	reserved
 | 
			
		||||
FS	 	non-reserved	non-reserved	 
 | 
			
		||||
FULL	reserved (can be function or type)	reserved	reserved	reserved
 | 
			
		||||
FUNCTION	non-reserved	reserved	reserved	 
 | 
			
		||||
FUNCTIONS	non-reserved	 	 	 
 | 
			
		||||
FUSION	 	reserved	reserved	 
 | 
			
		||||
G	 	non-reserved	non-reserved	 
 | 
			
		||||
GENERAL	 	non-reserved	non-reserved	 
 | 
			
		||||
GENERATED	 	non-reserved	non-reserved	 
 | 
			
		||||
GET	 	reserved	reserved	reserved
 | 
			
		||||
GLOBAL	non-reserved	reserved	reserved	reserved
 | 
			
		||||
GO	 	non-reserved	non-reserved	reserved
 | 
			
		||||
GOTO	 	non-reserved	non-reserved	reserved
 | 
			
		||||
GRANT	reserved	reserved	reserved	reserved
 | 
			
		||||
GRANTED	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
GREATEST	non-reserved (cannot be function or type)	 	 	 
 | 
			
		||||
GROUP	reserved	reserved	reserved	reserved
 | 
			
		||||
GROUPING	 	reserved	reserved	 
 | 
			
		||||
GROUPS	 	reserved	 	 
 | 
			
		||||
HANDLER	non-reserved	 	 	 
 | 
			
		||||
HAVING	reserved	reserved	reserved	reserved
 | 
			
		||||
HEADER	non-reserved	 	 	 
 | 
			
		||||
HEX	 	non-reserved	non-reserved	 
 | 
			
		||||
HIERARCHY	 	non-reserved	non-reserved	 
 | 
			
		||||
HOLD	non-reserved	reserved	reserved	 
 | 
			
		||||
HOUR	non-reserved	reserved	reserved	reserved
 | 
			
		||||
ID	 	non-reserved	non-reserved	 
 | 
			
		||||
IDENTITY	non-reserved	reserved	reserved	reserved
 | 
			
		||||
IF	non-reserved	 	 	 
 | 
			
		||||
IGNORE	 	non-reserved	non-reserved	 
 | 
			
		||||
ILIKE	reserved (can be function or type)	 	 	 
 | 
			
		||||
IMMEDIATE	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
IMMEDIATELY	 	non-reserved	 	 
 | 
			
		||||
IMMUTABLE	non-reserved	 	 	 
 | 
			
		||||
IMPLEMENTATION	 	non-reserved	non-reserved	 
 | 
			
		||||
IMPLICIT	non-reserved	 	 	 
 | 
			
		||||
IMPORT	 	reserved	reserved	 
 | 
			
		||||
IN	reserved	reserved	reserved	reserved
 | 
			
		||||
INCLUDING	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
INCREMENT	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
INDENT	 	non-reserved	non-reserved	 
 | 
			
		||||
INDEX	non-reserved	 	 	 
 | 
			
		||||
INDEXES	non-reserved	 	 	 
 | 
			
		||||
INDICATOR	 	reserved	reserved	reserved
 | 
			
		||||
INHERIT	non-reserved	 	 	 
 | 
			
		||||
INHERITS	non-reserved	 	 	 
 | 
			
		||||
INITIALLY	reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
INLINE	non-reserved	 	 	 
 | 
			
		||||
INNER	reserved (can be function or type)	reserved	reserved	reserved
 | 
			
		||||
INOUT	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
INPUT	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
INSENSITIVE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
INSERT	non-reserved	reserved	reserved	reserved
 | 
			
		||||
INSTANCE	 	non-reserved	non-reserved	 
 | 
			
		||||
INSTANTIABLE	 	non-reserved	non-reserved	 
 | 
			
		||||
INSTEAD	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
INT	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
INTEGER	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
INTEGRITY	 	non-reserved	non-reserved	 
 | 
			
		||||
INTERSECT	reserved	reserved	reserved	reserved
 | 
			
		||||
INTERSECTION	 	reserved	reserved	 
 | 
			
		||||
INTERVAL	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
INTO	reserved	reserved	reserved	reserved
 | 
			
		||||
INVOKER	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
IS	reserved (can be function or type)	reserved	reserved	reserved
 | 
			
		||||
ISNULL	reserved (can be function or type)	 	 	 
 | 
			
		||||
ISOLATION	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
JOIN	reserved (can be function or type)	reserved	reserved	reserved
 | 
			
		||||
K	 	non-reserved	non-reserved	 
 | 
			
		||||
KEY	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
KEY_MEMBER	 	non-reserved	non-reserved	 
 | 
			
		||||
KEY_TYPE	 	non-reserved	non-reserved	 
 | 
			
		||||
LABEL	non-reserved	 	 	 
 | 
			
		||||
LAG	 	reserved	reserved	 
 | 
			
		||||
LANGUAGE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
LARGE	non-reserved	reserved	reserved	 
 | 
			
		||||
LAST	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
LAST_VALUE	 	reserved	reserved	 
 | 
			
		||||
LATERAL	reserved	reserved	reserved	 
 | 
			
		||||
LC_COLLATE	non-reserved	 	 	 
 | 
			
		||||
LC_CTYPE	non-reserved	 	 	 
 | 
			
		||||
LEAD	 	reserved	reserved	 
 | 
			
		||||
LEADING	reserved	reserved	reserved	reserved
 | 
			
		||||
LEAKPROOF	non-reserved	 	 	 
 | 
			
		||||
LEAST	non-reserved (cannot be function or type)	 	 	 
 | 
			
		||||
LEFT	reserved (can be function or type)	reserved	reserved	reserved
 | 
			
		||||
LENGTH	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
LEVEL	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
LIBRARY	 	non-reserved	non-reserved	 
 | 
			
		||||
LIKE	reserved (can be function or type)	reserved	reserved	reserved
 | 
			
		||||
LIKE_REGEX	 	reserved	reserved	 
 | 
			
		||||
LIMIT	reserved	non-reserved	non-reserved	 
 | 
			
		||||
LINK	 	non-reserved	non-reserved	 
 | 
			
		||||
LISTEN	non-reserved	 	 	 
 | 
			
		||||
LN	 	reserved	reserved	 
 | 
			
		||||
LOAD	non-reserved	 	 	 
 | 
			
		||||
LOCAL	non-reserved	reserved	reserved	reserved
 | 
			
		||||
LOCALTIME	reserved	reserved	reserved	 
 | 
			
		||||
LOCALTIMESTAMP	reserved	reserved	reserved	 
 | 
			
		||||
LOCATION	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
LOCATOR	 	non-reserved	non-reserved	 
 | 
			
		||||
LOCK	non-reserved	 	 	 
 | 
			
		||||
LOWER	 	reserved	reserved	reserved
 | 
			
		||||
M	 	non-reserved	non-reserved	 
 | 
			
		||||
MAP	 	non-reserved	non-reserved	 
 | 
			
		||||
MAPPING	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
MATCH	non-reserved	reserved	reserved	reserved
 | 
			
		||||
MATCHED	 	non-reserved	non-reserved	 
 | 
			
		||||
MATERIALIZED	non-reserved	 	 	 
 | 
			
		||||
MAX	 	reserved	reserved	reserved
 | 
			
		||||
MAXVALUE	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
MAX_CARDINALITY	 	 	reserved	 
 | 
			
		||||
MEMBER	 	reserved	reserved	 
 | 
			
		||||
MERGE	 	reserved	reserved	 
 | 
			
		||||
MESSAGE_LENGTH	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
MESSAGE_OCTET_LENGTH	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
MESSAGE_TEXT	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
METHOD	 	reserved	reserved	 
 | 
			
		||||
MIN	 	reserved	reserved	reserved
 | 
			
		||||
MINUTE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
MINVALUE	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
MOD	 	reserved	reserved	 
 | 
			
		||||
MODE	non-reserved	 	 	 
 | 
			
		||||
MODIFIES	 	reserved	reserved	 
 | 
			
		||||
MODULE	 	reserved	reserved	reserved
 | 
			
		||||
MONTH	non-reserved	reserved	reserved	reserved
 | 
			
		||||
MORE	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
MOVE	non-reserved	 	 	 
 | 
			
		||||
MULTISET	 	reserved	reserved	 
 | 
			
		||||
MUMPS	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
NAME	non-reserved	non-reserved	non-reserved	non-reserved
 | 
			
		||||
NAMES	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
NAMESPACE	 	non-reserved	non-reserved	 
 | 
			
		||||
NATIONAL	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
NATURAL	reserved (can be function or type)	reserved	reserved	reserved
 | 
			
		||||
NCHAR	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
NCLOB	 	reserved	reserved	 
 | 
			
		||||
NESTING	 	non-reserved	non-reserved	 
 | 
			
		||||
NEW	 	reserved	reserved	 
 | 
			
		||||
NEXT	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
NFC	 	non-reserved	non-reserved	 
 | 
			
		||||
NFD	 	non-reserved	non-reserved	 
 | 
			
		||||
NFKC	 	non-reserved	non-reserved	 
 | 
			
		||||
NFKD	 	non-reserved	non-reserved	 
 | 
			
		||||
NIL	 	non-reserved	non-reserved	 
 | 
			
		||||
NO	non-reserved	reserved	reserved	reserved
 | 
			
		||||
NONE	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
NORMALIZE	 	reserved	reserved	 
 | 
			
		||||
NORMALIZED	 	non-reserved	non-reserved	 
 | 
			
		||||
NOT	reserved	reserved	reserved	reserved
 | 
			
		||||
NOTHING	non-reserved	 	 	 
 | 
			
		||||
NOTIFY	non-reserved	 	 	 
 | 
			
		||||
NOTNULL	reserved (can be function or type)	 	 	 
 | 
			
		||||
NOWAIT	non-reserved	 	 	 
 | 
			
		||||
NTH_VALUE	 	reserved	reserved	 
 | 
			
		||||
NTILE	 	reserved	reserved	 
 | 
			
		||||
NULL	reserved	reserved	reserved	reserved
 | 
			
		||||
NULLABLE	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
NULLIF	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
NULLS	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
NUMBER	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
NUMERIC	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
OBJECT	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
OCCURRENCES_REGEX	 	reserved	reserved	 
 | 
			
		||||
OCTETS	 	non-reserved	non-reserved	 
 | 
			
		||||
OCTET_LENGTH	 	reserved	reserved	reserved
 | 
			
		||||
OF	non-reserved	reserved	reserved	reserved
 | 
			
		||||
OFF	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
OFFSET	reserved	reserved	reserved	 
 | 
			
		||||
OIDS	non-reserved	 	 	 
 | 
			
		||||
OLD	 	reserved	reserved	 
 | 
			
		||||
ON	reserved	reserved	reserved	reserved
 | 
			
		||||
ONLY	reserved	reserved	reserved	reserved
 | 
			
		||||
OPEN	 	reserved	reserved	reserved
 | 
			
		||||
OPERATOR	non-reserved	 	 	 
 | 
			
		||||
OPTION	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
OPTIONS	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
OR	reserved	reserved	reserved	reserved
 | 
			
		||||
ORDER	reserved	reserved	reserved	reserved
 | 
			
		||||
ORDERING	 	non-reserved	non-reserved	 
 | 
			
		||||
ORDINALITY	 	non-reserved	non-reserved	 
 | 
			
		||||
OTHERS	 	non-reserved	non-reserved	 
 | 
			
		||||
OUT	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
OUTER	reserved (can be function or type)	reserved	reserved	reserved
 | 
			
		||||
OUTPUT	 	non-reserved	non-reserved	reserved
 | 
			
		||||
OVER	reserved (can be function or type)	reserved	reserved	 
 | 
			
		||||
OVERLAPS	reserved (can be function or type)	reserved	reserved	reserved
 | 
			
		||||
OVERLAY	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
OVERRIDING	 	non-reserved	non-reserved	 
 | 
			
		||||
OWNED	non-reserved	 	 	 
 | 
			
		||||
OWNER	non-reserved	 	 	 
 | 
			
		||||
P	 	non-reserved	non-reserved	 
 | 
			
		||||
PAD	 	non-reserved	non-reserved	reserved
 | 
			
		||||
PARAMETER	 	reserved	reserved	 
 | 
			
		||||
PARAMETER_MODE	 	non-reserved	non-reserved	 
 | 
			
		||||
PARAMETER_NAME	 	non-reserved	non-reserved	 
 | 
			
		||||
PARAMETER_ORDINAL_POSITION	 	non-reserved	non-reserved	 
 | 
			
		||||
PARAMETER_SPECIFIC_CATALOG	 	non-reserved	non-reserved	 
 | 
			
		||||
PARAMETER_SPECIFIC_NAME	 	non-reserved	non-reserved	 
 | 
			
		||||
PARAMETER_SPECIFIC_SCHEMA	 	non-reserved	non-reserved	 
 | 
			
		||||
PARSER	non-reserved	 	 	 
 | 
			
		||||
PARTIAL	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
PARTITION	non-reserved	reserved	reserved	 
 | 
			
		||||
PASCAL	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
PASSING	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
PASSTHROUGH	 	non-reserved	non-reserved	 
 | 
			
		||||
PASSWORD	non-reserved	 	 	 
 | 
			
		||||
PATH	 	non-reserved	non-reserved	 
 | 
			
		||||
PERCENT	 	reserved	 	 
 | 
			
		||||
PERCENTILE_CONT	 	reserved	reserved	 
 | 
			
		||||
PERCENTILE_DISC	 	reserved	reserved	 
 | 
			
		||||
PERCENT_RANK	 	reserved	reserved	 
 | 
			
		||||
PERIOD	 	reserved	 	 
 | 
			
		||||
PERMISSION	 	non-reserved	non-reserved	 
 | 
			
		||||
PLACING	reserved	non-reserved	non-reserved	 
 | 
			
		||||
PLANS	non-reserved	 	 	 
 | 
			
		||||
PLI	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
PORTION	 	reserved	 	 
 | 
			
		||||
POSITION	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
POSITION_REGEX	 	reserved	reserved	 
 | 
			
		||||
POWER	 	reserved	reserved	 
 | 
			
		||||
PRECEDES	 	reserved	 	 
 | 
			
		||||
PRECEDING	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
PRECISION	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
PREPARE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
PREPARED	non-reserved	 	 	 
 | 
			
		||||
PRESERVE	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
PRIMARY	reserved	reserved	reserved	reserved
 | 
			
		||||
PRIOR	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
PRIVILEGES	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
PROCEDURAL	non-reserved	 	 	 
 | 
			
		||||
PROCEDURE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
PROGRAM	non-reserved	 	 	 
 | 
			
		||||
PUBLIC	 	non-reserved	non-reserved	reserved
 | 
			
		||||
QUOTE	non-reserved	 	 	 
 | 
			
		||||
RANGE	non-reserved	reserved	reserved	 
 | 
			
		||||
RANK	 	reserved	reserved	 
 | 
			
		||||
READ	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
READS	 	reserved	reserved	 
 | 
			
		||||
REAL	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
REASSIGN	non-reserved	 	 	 
 | 
			
		||||
RECHECK	non-reserved	 	 	 
 | 
			
		||||
RECOVERY	 	non-reserved	non-reserved	 
 | 
			
		||||
RECURSIVE	non-reserved	reserved	reserved	 
 | 
			
		||||
REF	non-reserved	reserved	reserved	 
 | 
			
		||||
REFERENCES	reserved	reserved	reserved	reserved
 | 
			
		||||
REFERENCING	 	reserved	reserved	 
 | 
			
		||||
REFRESH	non-reserved	 	 	 
 | 
			
		||||
REGR_AVGX	 	reserved	reserved	 
 | 
			
		||||
REGR_AVGY	 	reserved	reserved	 
 | 
			
		||||
REGR_COUNT	 	reserved	reserved	 
 | 
			
		||||
REGR_INTERCEPT	 	reserved	reserved	 
 | 
			
		||||
REGR_R2	 	reserved	reserved	 
 | 
			
		||||
REGR_SLOPE	 	reserved	reserved	 
 | 
			
		||||
REGR_SXX	 	reserved	reserved	 
 | 
			
		||||
REGR_SXY	 	reserved	reserved	 
 | 
			
		||||
REGR_SYY	 	reserved	reserved	 
 | 
			
		||||
REINDEX	non-reserved	 	 	 
 | 
			
		||||
RELATIVE	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
RELEASE	non-reserved	reserved	reserved	 
 | 
			
		||||
RENAME	non-reserved	 	 	 
 | 
			
		||||
REPEATABLE	non-reserved	non-reserved	non-reserved	non-reserved
 | 
			
		||||
REPLACE	non-reserved	 	 	 
 | 
			
		||||
REPLICA	non-reserved	 	 	 
 | 
			
		||||
REQUIRING	 	non-reserved	non-reserved	 
 | 
			
		||||
RESET	non-reserved	 	 	 
 | 
			
		||||
RESPECT	 	non-reserved	non-reserved	 
 | 
			
		||||
RESTART	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
RESTORE	 	non-reserved	non-reserved	 
 | 
			
		||||
RESTRICT	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
RESULT	 	reserved	reserved	 
 | 
			
		||||
RETURN	 	reserved	reserved	 
 | 
			
		||||
RETURNED_CARDINALITY	 	non-reserved	non-reserved	 
 | 
			
		||||
RETURNED_LENGTH	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
RETURNED_OCTET_LENGTH	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
RETURNED_SQLSTATE	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
RETURNING	reserved	non-reserved	non-reserved	 
 | 
			
		||||
RETURNS	non-reserved	reserved	reserved	 
 | 
			
		||||
REVOKE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
RIGHT	reserved (can be function or type)	reserved	reserved	reserved
 | 
			
		||||
ROLE	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
ROLLBACK	non-reserved	reserved	reserved	reserved
 | 
			
		||||
ROLLUP	 	reserved	reserved	 
 | 
			
		||||
ROUTINE	 	non-reserved	non-reserved	 
 | 
			
		||||
ROUTINE_CATALOG	 	non-reserved	non-reserved	 
 | 
			
		||||
ROUTINE_NAME	 	non-reserved	non-reserved	 
 | 
			
		||||
ROUTINE_SCHEMA	 	non-reserved	non-reserved	 
 | 
			
		||||
ROW	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
ROWS	non-reserved	reserved	reserved	reserved
 | 
			
		||||
ROW_COUNT	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
ROW_NUMBER	 	reserved	reserved	 
 | 
			
		||||
RULE	non-reserved	 	 	 
 | 
			
		||||
SAVEPOINT	non-reserved	reserved	reserved	 
 | 
			
		||||
SCALE	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
SCHEMA	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
SCHEMA_NAME	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
SCOPE	 	reserved	reserved	 
 | 
			
		||||
SCOPE_CATALOG	 	non-reserved	non-reserved	 
 | 
			
		||||
SCOPE_NAME	 	non-reserved	non-reserved	 
 | 
			
		||||
SCOPE_SCHEMA	 	non-reserved	non-reserved	 
 | 
			
		||||
SCROLL	non-reserved	reserved	reserved	reserved
 | 
			
		||||
SEARCH	non-reserved	reserved	reserved	 
 | 
			
		||||
SECOND	non-reserved	reserved	reserved	reserved
 | 
			
		||||
SECTION	 	non-reserved	non-reserved	reserved
 | 
			
		||||
SECURITY	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
SELECT	reserved	reserved	reserved	reserved
 | 
			
		||||
SELECTIVE	 	non-reserved	non-reserved	 
 | 
			
		||||
SELF	 	non-reserved	non-reserved	 
 | 
			
		||||
SENSITIVE	 	reserved	reserved	 
 | 
			
		||||
SEQUENCE	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
SEQUENCES	non-reserved	 	 	 
 | 
			
		||||
SERIALIZABLE	non-reserved	non-reserved	non-reserved	non-reserved
 | 
			
		||||
SERVER	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
SERVER_NAME	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
SESSION	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
SESSION_USER	reserved	reserved	reserved	reserved
 | 
			
		||||
SET	non-reserved	reserved	reserved	reserved
 | 
			
		||||
SETOF	non-reserved (cannot be function or type)	 	 	 
 | 
			
		||||
SETS	 	non-reserved	non-reserved	 
 | 
			
		||||
SHARE	non-reserved	 	 	 
 | 
			
		||||
SHOW	non-reserved	 	 	 
 | 
			
		||||
SIMILAR	reserved (can be function or type)	reserved	reserved	 
 | 
			
		||||
SIMPLE	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
SIZE	 	non-reserved	non-reserved	reserved
 | 
			
		||||
SMALLINT	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
SNAPSHOT	non-reserved	 	 	 
 | 
			
		||||
SOME	reserved	reserved	reserved	reserved
 | 
			
		||||
SOURCE	 	non-reserved	non-reserved	 
 | 
			
		||||
SPACE	 	non-reserved	non-reserved	reserved
 | 
			
		||||
SPECIFIC	 	reserved	reserved	 
 | 
			
		||||
SPECIFICTYPE	 	reserved	reserved	 
 | 
			
		||||
SPECIFIC_NAME	 	non-reserved	non-reserved	 
 | 
			
		||||
SQL	 	reserved	reserved	reserved
 | 
			
		||||
SQLCODE	 	 	 	reserved
 | 
			
		||||
SQLERROR	 	 	 	reserved
 | 
			
		||||
SQLEXCEPTION	 	reserved	reserved	 
 | 
			
		||||
SQLSTATE	 	reserved	reserved	reserved
 | 
			
		||||
SQLWARNING	 	reserved	reserved	 
 | 
			
		||||
SQRT	 	reserved	reserved	 
 | 
			
		||||
STABLE	non-reserved	 	 	 
 | 
			
		||||
STANDALONE	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
START	non-reserved	reserved	reserved	 
 | 
			
		||||
STATE	 	non-reserved	non-reserved	 
 | 
			
		||||
STATEMENT	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
STATIC	 	reserved	reserved	 
 | 
			
		||||
STATISTICS	non-reserved	 	 	 
 | 
			
		||||
STDDEV_POP	 	reserved	reserved	 
 | 
			
		||||
STDDEV_SAMP	 	reserved	reserved	 
 | 
			
		||||
STDIN	non-reserved	 	 	 
 | 
			
		||||
STDOUT	non-reserved	 	 	 
 | 
			
		||||
STORAGE	non-reserved	 	 	 
 | 
			
		||||
STRICT	non-reserved	 	 	 
 | 
			
		||||
STRIP	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
STRUCTURE	 	non-reserved	non-reserved	 
 | 
			
		||||
STYLE	 	non-reserved	non-reserved	 
 | 
			
		||||
SUBCLASS_ORIGIN	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
SUBMULTISET	 	reserved	reserved	 
 | 
			
		||||
SUBSTRING	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
SUBSTRING_REGEX	 	reserved	reserved	 
 | 
			
		||||
SUCCEEDS	 	reserved	 	 
 | 
			
		||||
SUM	 	reserved	reserved	reserved
 | 
			
		||||
SYMMETRIC	reserved	reserved	reserved	 
 | 
			
		||||
SYSID	non-reserved	 	 	 
 | 
			
		||||
SYSTEM	non-reserved	reserved	reserved	 
 | 
			
		||||
SYSTEM_TIME	 	reserved	 	 
 | 
			
		||||
SYSTEM_USER	 	reserved	reserved	reserved
 | 
			
		||||
T	 	non-reserved	non-reserved	 
 | 
			
		||||
TABLE	reserved	reserved	reserved	reserved
 | 
			
		||||
TABLES	non-reserved	 	 	 
 | 
			
		||||
TABLESAMPLE	 	reserved	reserved	 
 | 
			
		||||
TABLESPACE	non-reserved	 	 	 
 | 
			
		||||
TABLE_NAME	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
TEMP	non-reserved	 	 	 
 | 
			
		||||
TEMPLATE	non-reserved	 	 	 
 | 
			
		||||
TEMPORARY	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
TEXT	non-reserved	 	 	 
 | 
			
		||||
THEN	reserved	reserved	reserved	reserved
 | 
			
		||||
TIES	 	non-reserved	non-reserved	 
 | 
			
		||||
TIME	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
TIMESTAMP	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
TIMEZONE_HOUR	 	reserved	reserved	reserved
 | 
			
		||||
TIMEZONE_MINUTE	 	reserved	reserved	reserved
 | 
			
		||||
TO	reserved	reserved	reserved	reserved
 | 
			
		||||
TOKEN	 	non-reserved	non-reserved	 
 | 
			
		||||
TOP_LEVEL_COUNT	 	non-reserved	non-reserved	 
 | 
			
		||||
TRAILING	reserved	reserved	reserved	reserved
 | 
			
		||||
TRANSACTION	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
TRANSACTIONS_COMMITTED	 	non-reserved	non-reserved	 
 | 
			
		||||
TRANSACTIONS_ROLLED_BACK	 	non-reserved	non-reserved	 
 | 
			
		||||
TRANSACTION_ACTIVE	 	non-reserved	non-reserved	 
 | 
			
		||||
TRANSFORM	 	non-reserved	non-reserved	 
 | 
			
		||||
TRANSFORMS	 	non-reserved	non-reserved	 
 | 
			
		||||
TRANSLATE	 	reserved	reserved	reserved
 | 
			
		||||
TRANSLATE_REGEX	 	reserved	reserved	 
 | 
			
		||||
TRANSLATION	 	reserved	reserved	reserved
 | 
			
		||||
TREAT	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
TRIGGER	non-reserved	reserved	reserved	 
 | 
			
		||||
TRIGGER_CATALOG	 	non-reserved	non-reserved	 
 | 
			
		||||
TRIGGER_NAME	 	non-reserved	non-reserved	 
 | 
			
		||||
TRIGGER_SCHEMA	 	non-reserved	non-reserved	 
 | 
			
		||||
TRIM	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
TRIM_ARRAY	 	reserved	reserved	 
 | 
			
		||||
TRUE	reserved	reserved	reserved	reserved
 | 
			
		||||
TRUNCATE	non-reserved	reserved	reserved	 
 | 
			
		||||
TRUSTED	non-reserved	 	 	 
 | 
			
		||||
TYPE	non-reserved	non-reserved	non-reserved	non-reserved
 | 
			
		||||
TYPES	non-reserved	 	 	 
 | 
			
		||||
UESCAPE	 	reserved	reserved	 
 | 
			
		||||
UNBOUNDED	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
UNCOMMITTED	non-reserved	non-reserved	non-reserved	non-reserved
 | 
			
		||||
UNDER	 	non-reserved	non-reserved	 
 | 
			
		||||
UNENCRYPTED	non-reserved	 	 	 
 | 
			
		||||
UNION	reserved	reserved	reserved	reserved
 | 
			
		||||
UNIQUE	reserved	reserved	reserved	reserved
 | 
			
		||||
UNKNOWN	non-reserved	reserved	reserved	reserved
 | 
			
		||||
UNLINK	 	non-reserved	non-reserved	 
 | 
			
		||||
UNLISTEN	non-reserved	 	 	 
 | 
			
		||||
UNLOGGED	non-reserved	 	 	 
 | 
			
		||||
UNNAMED	 	non-reserved	non-reserved	non-reserved
 | 
			
		||||
UNNEST	 	reserved	reserved	 
 | 
			
		||||
UNTIL	non-reserved	 	 	 
 | 
			
		||||
UNTYPED	 	non-reserved	non-reserved	 
 | 
			
		||||
UPDATE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
UPPER	 	reserved	reserved	reserved
 | 
			
		||||
URI	 	non-reserved	non-reserved	 
 | 
			
		||||
USAGE	 	non-reserved	non-reserved	reserved
 | 
			
		||||
USER	reserved	reserved	reserved	reserved
 | 
			
		||||
USER_DEFINED_TYPE_CATALOG	 	non-reserved	non-reserved	 
 | 
			
		||||
USER_DEFINED_TYPE_CODE	 	non-reserved	non-reserved	 
 | 
			
		||||
USER_DEFINED_TYPE_NAME	 	non-reserved	non-reserved	 
 | 
			
		||||
USER_DEFINED_TYPE_SCHEMA	 	non-reserved	non-reserved	 
 | 
			
		||||
USING	reserved	reserved	reserved	reserved
 | 
			
		||||
VACUUM	non-reserved	 	 	 
 | 
			
		||||
VALID	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
VALIDATE	non-reserved	 	 	 
 | 
			
		||||
VALIDATOR	non-reserved	 	 	 
 | 
			
		||||
VALUE	non-reserved	reserved	reserved	reserved
 | 
			
		||||
VALUES	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
VALUE_OF	 	reserved	 	 
 | 
			
		||||
VARBINARY	 	reserved	reserved	 
 | 
			
		||||
VARCHAR	non-reserved (cannot be function or type)	reserved	reserved	reserved
 | 
			
		||||
VARIADIC	reserved	 	 	 
 | 
			
		||||
VARYING	non-reserved	reserved	reserved	reserved
 | 
			
		||||
VAR_POP	 	reserved	reserved	 
 | 
			
		||||
VAR_SAMP	 	reserved	reserved	 
 | 
			
		||||
VERBOSE	reserved (can be function or type)	 	 	 
 | 
			
		||||
VERSION	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
VERSIONING	 	reserved	 	 
 | 
			
		||||
VIEW	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
VOLATILE	non-reserved	 	 	 
 | 
			
		||||
WHEN	reserved	reserved	reserved	reserved
 | 
			
		||||
WHENEVER	 	reserved	reserved	reserved
 | 
			
		||||
WHERE	reserved	reserved	reserved	reserved
 | 
			
		||||
WHITESPACE	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
WIDTH_BUCKET	 	reserved	reserved	 
 | 
			
		||||
WINDOW	reserved	reserved	reserved	 
 | 
			
		||||
WITH	reserved	reserved	reserved	reserved
 | 
			
		||||
WITHIN	 	reserved	reserved	 
 | 
			
		||||
WITHOUT	non-reserved	reserved	reserved	 
 | 
			
		||||
WORK	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
WRAPPER	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
WRITE	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
XML	non-reserved	reserved	reserved	 
 | 
			
		||||
XMLAGG	 	reserved	reserved	 
 | 
			
		||||
XMLATTRIBUTES	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
XMLBINARY	 	reserved	reserved	 
 | 
			
		||||
XMLCAST	 	reserved	reserved	 
 | 
			
		||||
XMLCOMMENT	 	reserved	reserved	 
 | 
			
		||||
XMLCONCAT	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
XMLDECLARATION	 	non-reserved	non-reserved	 
 | 
			
		||||
XMLDOCUMENT	 	reserved	reserved	 
 | 
			
		||||
XMLELEMENT	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
XMLEXISTS	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
XMLFOREST	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
XMLITERATE	 	reserved	reserved	 
 | 
			
		||||
XMLNAMESPACES	 	reserved	reserved	 
 | 
			
		||||
XMLPARSE	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
XMLPI	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
XMLQUERY	 	reserved	reserved	 
 | 
			
		||||
XMLROOT	non-reserved (cannot be function or type)	 	 	 
 | 
			
		||||
XMLSCHEMA	 	non-reserved	non-reserved	 
 | 
			
		||||
XMLSERIALIZE	non-reserved (cannot be function or type)	reserved	reserved	 
 | 
			
		||||
XMLTABLE	 	reserved	reserved	 
 | 
			
		||||
XMLTEXT	 	reserved	reserved	 
 | 
			
		||||
XMLVALIDATE	 	reserved	reserved	 
 | 
			
		||||
YEAR	non-reserved	reserved	reserved	reserved
 | 
			
		||||
YES	non-reserved	non-reserved	non-reserved	 
 | 
			
		||||
ZONE	non-reserved	non-reserved	non-reserved	reserved
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_mssql.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_mssql.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
go test -db=mssql -conn_str="server=192.168.1.58;user id=sa;password=123456;database=xorm_test"
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_mssql_cache.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_mssql_cache.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
go test -db=mssql -conn_str="server=192.168.1.58;user id=sa;password=123456;database=xorm_test" -cache=true
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_mymysql.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_mymysql.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
go test -db=mymysql -conn_str="xorm_test/root/"
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_mymysql_cache.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_mymysql_cache.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
go test -db=mymysql -conn_str="xorm_test/root/" -cache=true
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_mysql.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_mysql.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
go test -db=mysql -conn_str="root:@/xorm_test"
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_mysql_cache.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_mysql_cache.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
go test -db=mysql -conn_str="root:@/xorm_test" -cache=true
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_postgres.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_postgres.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
go test -db=postgres -conn_str="dbname=xorm_test sslmode=disable"
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_postgres_cache.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_postgres_cache.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
go test -db=postgres -conn_str="dbname=xorm_test sslmode=disable" -cache=true
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_sqlite.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_sqlite.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
go test -db=sqlite3 -conn_str="./test.db?cache=shared&mode=rwc"
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_sqlite_cache.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/go-xorm/xorm/test_sqlite_cache.sh
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
go test -db=sqlite3 -conn_str="./test.db?cache=shared&mode=rwc" -cache=true
 | 
			
		||||
		Reference in New Issue
	
	Block a user