mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Update xorm to latest version and fix correct user table referencing in sql (#4473)
				
					
				
			This commit is contained in:
		
							
								
								
									
										39
									
								
								vendor/github.com/go-xorm/builder/builder.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								vendor/github.com/go-xorm/builder/builder.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -4,6 +4,10 @@ | ||||
|  | ||||
| package builder | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| ) | ||||
|  | ||||
| type optype byte | ||||
|  | ||||
| const ( | ||||
| @@ -29,6 +33,9 @@ type Builder struct { | ||||
| 	joins     []join | ||||
| 	inserts   Eq | ||||
| 	updates   []Eq | ||||
| 	orderBy   string | ||||
| 	groupBy   string | ||||
| 	having    string | ||||
| } | ||||
|  | ||||
| // Select creates a select Builder | ||||
| @@ -67,6 +74,11 @@ func (b *Builder) From(tableName string) *Builder { | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| // TableName returns the table name | ||||
| func (b *Builder) TableName() string { | ||||
| 	return b.tableName | ||||
| } | ||||
|  | ||||
| // Into sets insert table name | ||||
| func (b *Builder) Into(tableName string) *Builder { | ||||
| 	b.tableName = tableName | ||||
| @@ -178,6 +190,33 @@ func (b *Builder) ToSQL() (string, []interface{}, error) { | ||||
| 	return w.writer.String(), w.args, nil | ||||
| } | ||||
|  | ||||
| // ConvertPlaceholder replaces ? to $1, $2 ... or :1, :2 ... according prefix | ||||
| func ConvertPlaceholder(sql, prefix string) (string, error) { | ||||
| 	buf := StringBuilder{} | ||||
| 	var j, start = 0, 0 | ||||
| 	for i := 0; i < len(sql); i++ { | ||||
| 		if sql[i] == '?' { | ||||
| 			_, err := buf.WriteString(sql[start:i]) | ||||
| 			if err != nil { | ||||
| 				return "", err | ||||
| 			} | ||||
| 			start = i + 1 | ||||
|  | ||||
| 			_, err = buf.WriteString(prefix) | ||||
| 			if err != nil { | ||||
| 				return "", err | ||||
| 			} | ||||
|  | ||||
| 			j = j + 1 | ||||
| 			_, err = buf.WriteString(fmt.Sprintf("%d", j)) | ||||
| 			if err != nil { | ||||
| 				return "", err | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return buf.String(), nil | ||||
| } | ||||
|  | ||||
| // ToSQL convert a builder or condtions to SQL and args | ||||
| func ToSQL(cond interface{}) (string, []interface{}, error) { | ||||
| 	switch cond.(type) { | ||||
|   | ||||
							
								
								
									
										6
									
								
								vendor/github.com/go-xorm/builder/builder_insert.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/go-xorm/builder/builder_insert.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -15,7 +15,7 @@ func (b *Builder) insertWriteTo(w Writer) error { | ||||
| 		return errors.New("no table indicated") | ||||
| 	} | ||||
| 	if len(b.inserts) <= 0 { | ||||
| 		return errors.New("no column to be update") | ||||
| 		return errors.New("no column to be insert") | ||||
| 	} | ||||
|  | ||||
| 	if _, err := fmt.Fprintf(w, "INSERT INTO %s (", b.tableName); err != nil { | ||||
| @@ -26,7 +26,9 @@ func (b *Builder) insertWriteTo(w Writer) error { | ||||
| 	var bs []byte | ||||
| 	var valBuffer = bytes.NewBuffer(bs) | ||||
| 	var i = 0 | ||||
| 	for col, value := range b.inserts { | ||||
|  | ||||
| 	for _, col := range b.inserts.sortedKeys() { | ||||
| 		value := b.inserts[col] | ||||
| 		fmt.Fprint(w, col) | ||||
| 		if e, ok := value.(expr); ok { | ||||
| 			fmt.Fprint(valBuffer, e.sql) | ||||
|   | ||||
							
								
								
									
										55
									
								
								vendor/github.com/go-xorm/builder/builder_select.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										55
									
								
								vendor/github.com/go-xorm/builder/builder_select.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -34,24 +34,65 @@ func (b *Builder) selectWriteTo(w Writer) error { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if _, err := fmt.Fprintf(w, " FROM %s", b.tableName); err != nil { | ||||
| 	if _, err := fmt.Fprint(w, " FROM ", b.tableName); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	for _, v := range b.joins { | ||||
| 		fmt.Fprintf(w, " %s JOIN %s ON ", v.joinType, v.joinTable) | ||||
| 		if _, err := fmt.Fprintf(w, " %s JOIN %s ON ", v.joinType, v.joinTable); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
|  | ||||
| 		if err := v.joinCond.WriteTo(w); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if !b.cond.IsValid() { | ||||
| 		return nil | ||||
| 	if b.cond.IsValid() { | ||||
| 		if _, err := fmt.Fprint(w, " WHERE "); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
|  | ||||
| 		if err := b.cond.WriteTo(w); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if _, err := fmt.Fprint(w, " WHERE "); err != nil { | ||||
| 		return err | ||||
| 	if len(b.groupBy) > 0 { | ||||
| 		if _, err := fmt.Fprint(w, " GROUP BY ", b.groupBy); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return b.cond.WriteTo(w) | ||||
| 	if len(b.having) > 0 { | ||||
| 		if _, err := fmt.Fprint(w, " HAVING ", b.having); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if len(b.orderBy) > 0 { | ||||
| 		if _, err := fmt.Fprint(w, " ORDER BY ", b.orderBy); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // OrderBy orderBy SQL | ||||
| func (b *Builder) OrderBy(orderBy string) *Builder { | ||||
| 	b.orderBy = orderBy | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| // GroupBy groupby SQL | ||||
| func (b *Builder) GroupBy(groupby string) *Builder { | ||||
| 	b.groupBy = groupby | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| // Having having SQL | ||||
| func (b *Builder) Having(having string) *Builder { | ||||
| 	b.having = having | ||||
| 	return b | ||||
| } | ||||
|   | ||||
							
								
								
									
										9
									
								
								vendor/github.com/go-xorm/builder/cond.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/go-xorm/builder/cond.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -5,7 +5,6 @@ | ||||
| package builder | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"io" | ||||
| ) | ||||
|  | ||||
| @@ -19,15 +18,15 @@ var _ Writer = NewWriter() | ||||
|  | ||||
| // BytesWriter implments Writer and save SQL in bytes.Buffer | ||||
| type BytesWriter struct { | ||||
| 	writer *bytes.Buffer | ||||
| 	buffer []byte | ||||
| 	writer *StringBuilder | ||||
| 	args   []interface{} | ||||
| } | ||||
|  | ||||
| // NewWriter creates a new string writer | ||||
| func NewWriter() *BytesWriter { | ||||
| 	w := &BytesWriter{} | ||||
| 	w.writer = bytes.NewBuffer(w.buffer) | ||||
| 	w := &BytesWriter{ | ||||
| 		writer: &StringBuilder{}, | ||||
| 	} | ||||
| 	return w | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										8
									
								
								vendor/github.com/go-xorm/builder/cond_compare.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/go-xorm/builder/cond_compare.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -10,7 +10,13 @@ import "fmt" | ||||
| func WriteMap(w Writer, data map[string]interface{}, op string) error { | ||||
| 	var args = make([]interface{}, 0, len(data)) | ||||
| 	var i = 0 | ||||
| 	for k, v := range data { | ||||
| 	keys := make([]string, 0, len(data)) | ||||
| 	for k := range data { | ||||
| 		keys = append(keys, k) | ||||
| 	} | ||||
|  | ||||
| 	for _, k := range keys { | ||||
| 		v := data[k] | ||||
| 		switch v.(type) { | ||||
| 		case expr: | ||||
| 			if _, err := fmt.Fprintf(w, "%s%s(", k, op); err != nil { | ||||
|   | ||||
							
								
								
									
										20
									
								
								vendor/github.com/go-xorm/builder/cond_eq.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								vendor/github.com/go-xorm/builder/cond_eq.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -4,7 +4,10 @@ | ||||
|  | ||||
| package builder | ||||
|  | ||||
| import "fmt" | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"sort" | ||||
| ) | ||||
|  | ||||
| // Incr implements a type used by Eq | ||||
| type Incr int | ||||
| @@ -19,7 +22,8 @@ var _ Cond = Eq{} | ||||
|  | ||||
| func (eq Eq) opWriteTo(op string, w Writer) error { | ||||
| 	var i = 0 | ||||
| 	for k, v := range eq { | ||||
| 	for _, k := range eq.sortedKeys() { | ||||
| 		v := eq[k] | ||||
| 		switch v.(type) { | ||||
| 		case []int, []int64, []string, []int32, []int16, []int8, []uint, []uint64, []uint32, []uint16, []interface{}: | ||||
| 			if err := In(k, v).WriteTo(w); err != nil { | ||||
| @@ -94,3 +98,15 @@ func (eq Eq) Or(conds ...Cond) Cond { | ||||
| func (eq Eq) IsValid() bool { | ||||
| 	return len(eq) > 0 | ||||
| } | ||||
|  | ||||
| // sortedKeys returns all keys of this Eq sorted with sort.Strings. | ||||
| // It is used internally for consistent ordering when generating | ||||
| // SQL, see https://github.com/go-xorm/builder/issues/10 | ||||
| func (eq Eq) sortedKeys() []string { | ||||
| 	keys := make([]string, 0, len(eq)) | ||||
| 	for key := range eq { | ||||
| 		keys = append(keys, key) | ||||
| 	} | ||||
| 	sort.Strings(keys) | ||||
| 	return keys | ||||
| } | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/go-xorm/builder/cond_like.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/go-xorm/builder/cond_like.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -16,7 +16,7 @@ func (like Like) WriteTo(w Writer) error { | ||||
| 	if _, err := fmt.Fprintf(w, "%s LIKE ?", like[0]); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	// FIXME: if use other regular express, this will be failed. but for compitable, keep this | ||||
| 	// FIXME: if use other regular express, this will be failed. but for compatible, keep this | ||||
| 	if like[1][0] == '%' || like[1][len(like[1])-1] == '%' { | ||||
| 		w.Append(like[1]) | ||||
| 	} else { | ||||
|   | ||||
							
								
								
									
										20
									
								
								vendor/github.com/go-xorm/builder/cond_neq.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								vendor/github.com/go-xorm/builder/cond_neq.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -4,7 +4,10 @@ | ||||
|  | ||||
| package builder | ||||
|  | ||||
| import "fmt" | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"sort" | ||||
| ) | ||||
|  | ||||
| // Neq defines not equal conditions | ||||
| type Neq map[string]interface{} | ||||
| @@ -15,7 +18,8 @@ var _ Cond = Neq{} | ||||
| func (neq Neq) WriteTo(w Writer) error { | ||||
| 	var args = make([]interface{}, 0, len(neq)) | ||||
| 	var i = 0 | ||||
| 	for k, v := range neq { | ||||
| 	for _, k := range neq.sortedKeys() { | ||||
| 		v := neq[k] | ||||
| 		switch v.(type) { | ||||
| 		case []int, []int64, []string, []int32, []int16, []int8: | ||||
| 			if err := NotIn(k, v).WriteTo(w); err != nil { | ||||
| @@ -76,3 +80,15 @@ func (neq Neq) Or(conds ...Cond) Cond { | ||||
| func (neq Neq) IsValid() bool { | ||||
| 	return len(neq) > 0 | ||||
| } | ||||
|  | ||||
| // sortedKeys returns all keys of this Neq sorted with sort.Strings. | ||||
| // It is used internally for consistent ordering when generating | ||||
| // SQL, see https://github.com/go-xorm/builder/issues/10 | ||||
| func (neq Neq) sortedKeys() []string { | ||||
| 	keys := make([]string, 0, len(neq)) | ||||
| 	for key := range neq { | ||||
| 		keys = append(keys, key) | ||||
| 	} | ||||
| 	sort.Strings(keys) | ||||
| 	return keys | ||||
| } | ||||
|   | ||||
							
								
								
									
										24
									
								
								vendor/github.com/go-xorm/builder/cond_not.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								vendor/github.com/go-xorm/builder/cond_not.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -21,6 +21,18 @@ func (not Not) WriteTo(w Writer) error { | ||||
| 		if _, err := fmt.Fprint(w, "("); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	case Eq: | ||||
| 		if len(not[0].(Eq)) > 1 { | ||||
| 			if _, err := fmt.Fprint(w, "("); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 	case Neq: | ||||
| 		if len(not[0].(Neq)) > 1 { | ||||
| 			if _, err := fmt.Fprint(w, "("); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if err := not[0].WriteTo(w); err != nil { | ||||
| @@ -32,6 +44,18 @@ func (not Not) WriteTo(w Writer) error { | ||||
| 		if _, err := fmt.Fprint(w, ")"); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	case Eq: | ||||
| 		if len(not[0].(Eq)) > 1 { | ||||
| 			if _, err := fmt.Fprint(w, ")"); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 	case Neq: | ||||
| 		if len(not[0].(Neq)) > 1 { | ||||
| 			if _, err := fmt.Fprint(w, ")"); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
|   | ||||
							
								
								
									
										119
									
								
								vendor/github.com/go-xorm/builder/strings_builder.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								vendor/github.com/go-xorm/builder/strings_builder.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,119 @@ | ||||
| // Copyright 2017 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package builder | ||||
|  | ||||
| import ( | ||||
| 	"unicode/utf8" | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
| // A StringBuilder is used to efficiently build a string using Write methods. | ||||
| // It minimizes memory copying. The zero value is ready to use. | ||||
| // Do not copy a non-zero Builder. | ||||
| type StringBuilder struct { | ||||
| 	addr *StringBuilder // of receiver, to detect copies by value | ||||
| 	buf  []byte | ||||
| } | ||||
|  | ||||
| // noescape hides a pointer from escape analysis.  noescape is | ||||
| // the identity function but escape analysis doesn't think the | ||||
| // output depends on the input. noescape is inlined and currently | ||||
| // compiles down to zero instructions. | ||||
| // USE CAREFULLY! | ||||
| // This was copied from the runtime; see issues 23382 and 7921. | ||||
| //go:nosplit | ||||
| func noescape(p unsafe.Pointer) unsafe.Pointer { | ||||
| 	x := uintptr(p) | ||||
| 	return unsafe.Pointer(x ^ 0) | ||||
| } | ||||
|  | ||||
| func (b *StringBuilder) copyCheck() { | ||||
| 	if b.addr == nil { | ||||
| 		// This hack works around a failing of Go's escape analysis | ||||
| 		// that was causing b to escape and be heap allocated. | ||||
| 		// See issue 23382. | ||||
| 		// TODO: once issue 7921 is fixed, this should be reverted to | ||||
| 		// just "b.addr = b". | ||||
| 		b.addr = (*StringBuilder)(noescape(unsafe.Pointer(b))) | ||||
| 	} else if b.addr != b { | ||||
| 		panic("strings: illegal use of non-zero Builder copied by value") | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // String returns the accumulated string. | ||||
| func (b *StringBuilder) String() string { | ||||
| 	return *(*string)(unsafe.Pointer(&b.buf)) | ||||
| } | ||||
|  | ||||
| // Len returns the number of accumulated bytes; b.Len() == len(b.String()). | ||||
| func (b *StringBuilder) Len() int { return len(b.buf) } | ||||
|  | ||||
| // Reset resets the Builder to be empty. | ||||
| func (b *StringBuilder) Reset() { | ||||
| 	b.addr = nil | ||||
| 	b.buf = nil | ||||
| } | ||||
|  | ||||
| // grow copies the buffer to a new, larger buffer so that there are at least n | ||||
| // bytes of capacity beyond len(b.buf). | ||||
| func (b *StringBuilder) grow(n int) { | ||||
| 	buf := make([]byte, len(b.buf), 2*cap(b.buf)+n) | ||||
| 	copy(buf, b.buf) | ||||
| 	b.buf = buf | ||||
| } | ||||
|  | ||||
| // Grow grows b's capacity, if necessary, to guarantee space for | ||||
| // another n bytes. After Grow(n), at least n bytes can be written to b | ||||
| // without another allocation. If n is negative, Grow panics. | ||||
| func (b *StringBuilder) Grow(n int) { | ||||
| 	b.copyCheck() | ||||
| 	if n < 0 { | ||||
| 		panic("strings.Builder.Grow: negative count") | ||||
| 	} | ||||
| 	if cap(b.buf)-len(b.buf) < n { | ||||
| 		b.grow(n) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Write appends the contents of p to b's buffer. | ||||
| // Write always returns len(p), nil. | ||||
| func (b *StringBuilder) Write(p []byte) (int, error) { | ||||
| 	b.copyCheck() | ||||
| 	b.buf = append(b.buf, p...) | ||||
| 	return len(p), nil | ||||
| } | ||||
|  | ||||
| // WriteByte appends the byte c to b's buffer. | ||||
| // The returned error is always nil. | ||||
| func (b *StringBuilder) WriteByte(c byte) error { | ||||
| 	b.copyCheck() | ||||
| 	b.buf = append(b.buf, c) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // WriteRune appends the UTF-8 encoding of Unicode code point r to b's buffer. | ||||
| // It returns the length of r and a nil error. | ||||
| func (b *StringBuilder) WriteRune(r rune) (int, error) { | ||||
| 	b.copyCheck() | ||||
| 	if r < utf8.RuneSelf { | ||||
| 		b.buf = append(b.buf, byte(r)) | ||||
| 		return 1, nil | ||||
| 	} | ||||
| 	l := len(b.buf) | ||||
| 	if cap(b.buf)-l < utf8.UTFMax { | ||||
| 		b.grow(utf8.UTFMax) | ||||
| 	} | ||||
| 	n := utf8.EncodeRune(b.buf[l:l+utf8.UTFMax], r) | ||||
| 	b.buf = b.buf[:l+n] | ||||
| 	return n, nil | ||||
| } | ||||
|  | ||||
| // WriteString appends the contents of s to b's buffer. | ||||
| // It returns the length of s and a nil error. | ||||
| func (b *StringBuilder) WriteString(s string) (int, error) { | ||||
| 	b.copyCheck() | ||||
| 	b.buf = append(b.buf, s...) | ||||
| 	return len(s), nil | ||||
| } | ||||
		Reference in New Issue
	
	Block a user