mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	upgrade to use testfixtures v3 (#11904)
* upgrade to use testfixtures v3 * simplify logic * make vendor * update per @lunny * Update templates/repo/empty.tmpl * Update templates/repo/empty.tmpl Co-authored-by: Lauris BH <lauris@nix.lv>
This commit is contained in:
		
							
								
								
									
										6
									
								
								vendor/github.com/mattn/go-sqlite3/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/mattn/go-sqlite3/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -12,6 +12,8 @@ go: | ||||
|   - 1.9.x | ||||
|   - 1.10.x | ||||
|   - 1.11.x | ||||
|   - 1.12.x | ||||
|   - 1.13.x | ||||
|   - master | ||||
|  | ||||
| before_install: | ||||
| @@ -27,5 +29,5 @@ script: | ||||
|   - $HOME/gopath/bin/goveralls -repotoken 3qJVUE0iQwqnCbmNcDsjYu1nh4J4KIFXx | ||||
|   - go test -race -v . -tags "" | ||||
|   - go test -race -v . -tags "libsqlite3" | ||||
|   - go test -race -v . -tags "sqlite_allow_uri_authority sqlite_app_armor sqlite_foreign_keys sqlite_fts5 sqlite_icu sqlite_introspect sqlite_json sqlite_secure_delete sqlite_see sqlite_stat4 sqlite_trace sqlite_userauth sqlite_vacuum_incr sqlite_vtable sqlite_unlock_notify" | ||||
|   - go test -race -v . -tags "sqlite_vacuum_full" | ||||
|   - go test -race -v . -tags "sqlite_allow_uri_authority sqlite_app_armor sqlite_foreign_keys sqlite_fts5 sqlite_icu sqlite_introspect sqlite_json sqlite_preupdate_hook sqlite_secure_delete sqlite_see sqlite_stat4 sqlite_trace sqlite_userauth sqlite_vacuum_incr sqlite_vtable sqlite_unlock_notify" | ||||
|   - go test -race -v . -tags "sqlite_vacuum_full" | ||||
|   | ||||
							
								
								
									
										57
									
								
								vendor/github.com/mattn/go-sqlite3/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										57
									
								
								vendor/github.com/mattn/go-sqlite3/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -3,6 +3,7 @@ go-sqlite3 | ||||
|  | ||||
| [](http://godoc.org/github.com/mattn/go-sqlite3) | ||||
| [](https://travis-ci.org/mattn/go-sqlite3) | ||||
| [](https://opencollective.com/mattn-go-sqlite3)  | ||||
| [](https://coveralls.io/r/mattn/go-sqlite3?branch=master) | ||||
| [](https://goreportcard.com/report/github.com/mattn/go-sqlite3) | ||||
|  | ||||
| @@ -16,15 +17,21 @@ Supported Golang version: See .travis.yml | ||||
|  | ||||
| ### Overview | ||||
|  | ||||
| - [go-sqlite3](#go-sqlite3) | ||||
| - [Description](#description) | ||||
|     - [Overview](#overview) | ||||
| - [Installation](#installation) | ||||
| - [API Reference](#api-reference) | ||||
| - [Connection String](#connection-string) | ||||
|   - [DSN Examples](#dsn-examples) | ||||
| - [Features](#features) | ||||
|     - [Usage](#usage) | ||||
|     - [Feature / Extension List](#feature--extension-list) | ||||
| - [Compilation](#compilation) | ||||
|   - [Android](#android) | ||||
|   - [ARM](#arm) | ||||
|   - [Cross Compile](#cross-compile) | ||||
|   - [Google Cloud Platform](#google-cloud-platform) | ||||
| - [ARM](#arm) | ||||
| - [Cross Compile](#cross-compile) | ||||
| - [Google Cloud Platform](#google-cloud-platform) | ||||
|   - [Linux](#linux) | ||||
|     - [Alpine](#alpine) | ||||
|     - [Fedora](#fedora) | ||||
| @@ -34,11 +41,22 @@ Supported Golang version: See .travis.yml | ||||
|   - [Errors](#errors) | ||||
| - [User Authentication](#user-authentication) | ||||
|   - [Compile](#compile) | ||||
|   - [Usage](#usage) | ||||
|   - [Usage](#usage-1) | ||||
|     - [Create protected database](#create-protected-database) | ||||
|     - [Password Encoding](#password-encoding) | ||||
|       - [Available Encoders](#available-encoders) | ||||
|     - [Restrictions](#restrictions) | ||||
|     - [Support](#support) | ||||
|     - [User Management](#user-management) | ||||
|       - [SQL](#sql) | ||||
|         - [Examples](#examples) | ||||
|       - [*SQLiteConn](#sqliteconn) | ||||
|     - [Attached database](#attached-database) | ||||
| - [Extensions](#extensions) | ||||
|   - [Spatialite](#spatialite) | ||||
| - [FAQ](#faq) | ||||
| - [License](#license) | ||||
| - [Author](#author) | ||||
|  | ||||
| # Installation | ||||
|  | ||||
| @@ -149,6 +167,7 @@ go build --tags "icu json1 fts5 secure_delete" | ||||
| |  International Components for Unicode | sqlite_icu | This option causes the International Components for Unicode or "ICU" extension to SQLite to be added to the build | | ||||
| | Introspect PRAGMAS | sqlite_introspect | This option adds some extra PRAGMA statements. <ul><li>PRAGMA function_list</li><li>PRAGMA module_list</li><li>PRAGMA pragma_list</li></ul> | | ||||
| | JSON SQL Functions | sqlite_json | When this option is defined in the amalgamation, the JSON SQL functions are added to the build automatically | | ||||
| | Pre Update Hook | sqlite_preupdate_hook | Registers a callback function that is invoked prior to each INSERT, UPDATE, and DELETE operation on a database table. | | ||||
| | Secure Delete | sqlite_secure_delete | This compile-time option changes the default setting of the secure_delete pragma.<br><br>When this option is not used, secure_delete defaults to off. When this option is present, secure_delete defaults to on.<br><br>The secure_delete setting causes deleted content to be overwritten with zeros. There is a small performance penalty since additional I/O must occur.<br><br>On the other hand, secure_delete can prevent fragments of sensitive information from lingering in unused parts of the database file after it has been deleted. See the documentation on the secure_delete pragma for additional information | | ||||
| | Secure Delete (FAST) | sqlite_secure_delete_fast | For more information see [PRAGMA secure_delete](https://www.sqlite.org/pragma.html#pragma_secure_delete) | | ||||
| | Tracing / Debug | sqlite_trace | Activate trace functions | | ||||
| @@ -504,6 +523,36 @@ For an example see [shaxbee/go-spatialite](https://github.com/shaxbee/go-spatial | ||||
|  | ||||
|     More information see [#209](https://github.com/mattn/go-sqlite3/issues/209) | ||||
|  | ||||
| ## Contributors | ||||
|  | ||||
| ### Code Contributors | ||||
|  | ||||
| This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)]. | ||||
| <a href="https://github.com/mattn/go-sqlite3/graphs/contributors"><img src="https://opencollective.com/mattn-go-sqlite3/contributors.svg?width=890&button=false" /></a> | ||||
|  | ||||
| ### Financial Contributors | ||||
|  | ||||
| Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/mattn-go-sqlite3/contribute)] | ||||
|  | ||||
| #### Individuals | ||||
|  | ||||
| <a href="https://opencollective.com/mattn-go-sqlite3"><img src="https://opencollective.com/mattn-go-sqlite3/individuals.svg?width=890"></a> | ||||
|  | ||||
| #### Organizations | ||||
|  | ||||
| Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/mattn-go-sqlite3/contribute)] | ||||
|  | ||||
| <a href="https://opencollective.com/mattn-go-sqlite3/organization/0/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/0/avatar.svg"></a> | ||||
| <a href="https://opencollective.com/mattn-go-sqlite3/organization/1/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/1/avatar.svg"></a> | ||||
| <a href="https://opencollective.com/mattn-go-sqlite3/organization/2/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/2/avatar.svg"></a> | ||||
| <a href="https://opencollective.com/mattn-go-sqlite3/organization/3/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/3/avatar.svg"></a> | ||||
| <a href="https://opencollective.com/mattn-go-sqlite3/organization/4/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/4/avatar.svg"></a> | ||||
| <a href="https://opencollective.com/mattn-go-sqlite3/organization/5/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/5/avatar.svg"></a> | ||||
| <a href="https://opencollective.com/mattn-go-sqlite3/organization/6/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/6/avatar.svg"></a> | ||||
| <a href="https://opencollective.com/mattn-go-sqlite3/organization/7/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/7/avatar.svg"></a> | ||||
| <a href="https://opencollective.com/mattn-go-sqlite3/organization/8/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/8/avatar.svg"></a> | ||||
| <a href="https://opencollective.com/mattn-go-sqlite3/organization/9/website"><img src="https://opencollective.com/mattn-go-sqlite3/organization/9/avatar.svg"></a> | ||||
|  | ||||
| # License | ||||
|  | ||||
| MIT: http://mattn.mit-license.org/2018 | ||||
|   | ||||
							
								
								
									
										8
									
								
								vendor/github.com/mattn/go-sqlite3/backup.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/mattn/go-sqlite3/backup.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
| @@ -25,18 +25,18 @@ type SQLiteBackup struct { | ||||
| } | ||||
|  | ||||
| // Backup make backup from src to dest. | ||||
| func (c *SQLiteConn) Backup(dest string, conn *SQLiteConn, src string) (*SQLiteBackup, error) { | ||||
| func (destConn *SQLiteConn) Backup(dest string, srcConn *SQLiteConn, src string) (*SQLiteBackup, error) { | ||||
| 	destptr := C.CString(dest) | ||||
| 	defer C.free(unsafe.Pointer(destptr)) | ||||
| 	srcptr := C.CString(src) | ||||
| 	defer C.free(unsafe.Pointer(srcptr)) | ||||
|  | ||||
| 	if b := C.sqlite3_backup_init(c.db, destptr, conn.db, srcptr); b != nil { | ||||
| 	if b := C.sqlite3_backup_init(destConn.db, destptr, srcConn.db, srcptr); b != nil { | ||||
| 		bb := &SQLiteBackup{b: b} | ||||
| 		runtime.SetFinalizer(bb, (*SQLiteBackup).Finish) | ||||
| 		return bb, nil | ||||
| 	} | ||||
| 	return nil, c.lastError() | ||||
| 	return nil, destConn.lastError() | ||||
| } | ||||
|  | ||||
| // Step to backs up for one step. Calls the underlying `sqlite3_backup_step` | ||||
|   | ||||
							
								
								
									
										26
									
								
								vendor/github.com/mattn/go-sqlite3/callback.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								vendor/github.com/mattn/go-sqlite3/callback.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
| @@ -83,8 +83,22 @@ func authorizerTrampoline(handle uintptr, op int, arg1 *C.char, arg2 *C.char, ar | ||||
| 	return callback(op, C.GoString(arg1), C.GoString(arg2), C.GoString(arg3)) | ||||
| } | ||||
|  | ||||
| // Use handles to avoid passing Go pointers to C. | ||||
| //export preUpdateHookTrampoline | ||||
| func preUpdateHookTrampoline(handle uintptr, dbHandle uintptr, op int, db *C.char, table *C.char, oldrowid int64, newrowid int64) { | ||||
| 	hval := lookupHandleVal(handle) | ||||
| 	data := SQLitePreUpdateData{ | ||||
| 		Conn:         hval.db, | ||||
| 		Op:           op, | ||||
| 		DatabaseName: C.GoString(db), | ||||
| 		TableName:    C.GoString(table), | ||||
| 		OldRowID:     oldrowid, | ||||
| 		NewRowID:     newrowid, | ||||
| 	} | ||||
| 	callback := hval.val.(func(SQLitePreUpdateData)) | ||||
| 	callback(data) | ||||
| } | ||||
|  | ||||
| // Use handles to avoid passing Go pointers to C. | ||||
| type handleVal struct { | ||||
| 	db  *SQLiteConn | ||||
| 	val interface{} | ||||
| @@ -103,7 +117,7 @@ func newHandle(db *SQLiteConn, v interface{}) uintptr { | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| func lookupHandle(handle uintptr) interface{} { | ||||
| func lookupHandleVal(handle uintptr) handleVal { | ||||
| 	handleLock.Lock() | ||||
| 	defer handleLock.Unlock() | ||||
| 	r, ok := handleVals[handle] | ||||
| @@ -114,7 +128,11 @@ func lookupHandle(handle uintptr) interface{} { | ||||
| 			panic("invalid handle") | ||||
| 		} | ||||
| 	} | ||||
| 	return r.val | ||||
| 	return r | ||||
| } | ||||
|  | ||||
| func lookupHandle(handle uintptr) interface{} { | ||||
| 	return lookupHandleVal(handle).val | ||||
| } | ||||
|  | ||||
| func deleteHandles(db *SQLiteConn) { | ||||
|   | ||||
							
								
								
									
										299
									
								
								vendor/github.com/mattn/go-sqlite3/convert.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										299
									
								
								vendor/github.com/mattn/go-sqlite3/convert.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,299 @@ | ||||
| // Extracted from Go database/sql source code | ||||
|  | ||||
| // Copyright 2011 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. | ||||
|  | ||||
| // Type conversions for Scan. | ||||
|  | ||||
| package sqlite3 | ||||
|  | ||||
| import ( | ||||
| 	"database/sql" | ||||
| 	"database/sql/driver" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"reflect" | ||||
| 	"strconv" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| var errNilPtr = errors.New("destination pointer is nil") // embedded in descriptive error | ||||
|  | ||||
| // convertAssign copies to dest the value in src, converting it if possible. | ||||
| // An error is returned if the copy would result in loss of information. | ||||
| // dest should be a pointer type. | ||||
| func convertAssign(dest, src interface{}) error { | ||||
| 	// Common cases, without reflect. | ||||
| 	switch s := src.(type) { | ||||
| 	case string: | ||||
| 		switch d := dest.(type) { | ||||
| 		case *string: | ||||
| 			if d == nil { | ||||
| 				return errNilPtr | ||||
| 			} | ||||
| 			*d = s | ||||
| 			return nil | ||||
| 		case *[]byte: | ||||
| 			if d == nil { | ||||
| 				return errNilPtr | ||||
| 			} | ||||
| 			*d = []byte(s) | ||||
| 			return nil | ||||
| 		case *sql.RawBytes: | ||||
| 			if d == nil { | ||||
| 				return errNilPtr | ||||
| 			} | ||||
| 			*d = append((*d)[:0], s...) | ||||
| 			return nil | ||||
| 		} | ||||
| 	case []byte: | ||||
| 		switch d := dest.(type) { | ||||
| 		case *string: | ||||
| 			if d == nil { | ||||
| 				return errNilPtr | ||||
| 			} | ||||
| 			*d = string(s) | ||||
| 			return nil | ||||
| 		case *interface{}: | ||||
| 			if d == nil { | ||||
| 				return errNilPtr | ||||
| 			} | ||||
| 			*d = cloneBytes(s) | ||||
| 			return nil | ||||
| 		case *[]byte: | ||||
| 			if d == nil { | ||||
| 				return errNilPtr | ||||
| 			} | ||||
| 			*d = cloneBytes(s) | ||||
| 			return nil | ||||
| 		case *sql.RawBytes: | ||||
| 			if d == nil { | ||||
| 				return errNilPtr | ||||
| 			} | ||||
| 			*d = s | ||||
| 			return nil | ||||
| 		} | ||||
| 	case time.Time: | ||||
| 		switch d := dest.(type) { | ||||
| 		case *time.Time: | ||||
| 			*d = s | ||||
| 			return nil | ||||
| 		case *string: | ||||
| 			*d = s.Format(time.RFC3339Nano) | ||||
| 			return nil | ||||
| 		case *[]byte: | ||||
| 			if d == nil { | ||||
| 				return errNilPtr | ||||
| 			} | ||||
| 			*d = []byte(s.Format(time.RFC3339Nano)) | ||||
| 			return nil | ||||
| 		case *sql.RawBytes: | ||||
| 			if d == nil { | ||||
| 				return errNilPtr | ||||
| 			} | ||||
| 			*d = s.AppendFormat((*d)[:0], time.RFC3339Nano) | ||||
| 			return nil | ||||
| 		} | ||||
| 	case nil: | ||||
| 		switch d := dest.(type) { | ||||
| 		case *interface{}: | ||||
| 			if d == nil { | ||||
| 				return errNilPtr | ||||
| 			} | ||||
| 			*d = nil | ||||
| 			return nil | ||||
| 		case *[]byte: | ||||
| 			if d == nil { | ||||
| 				return errNilPtr | ||||
| 			} | ||||
| 			*d = nil | ||||
| 			return nil | ||||
| 		case *sql.RawBytes: | ||||
| 			if d == nil { | ||||
| 				return errNilPtr | ||||
| 			} | ||||
| 			*d = nil | ||||
| 			return nil | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	var sv reflect.Value | ||||
|  | ||||
| 	switch d := dest.(type) { | ||||
| 	case *string: | ||||
| 		sv = reflect.ValueOf(src) | ||||
| 		switch sv.Kind() { | ||||
| 		case reflect.Bool, | ||||
| 			reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, | ||||
| 			reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, | ||||
| 			reflect.Float32, reflect.Float64: | ||||
| 			*d = asString(src) | ||||
| 			return nil | ||||
| 		} | ||||
| 	case *[]byte: | ||||
| 		sv = reflect.ValueOf(src) | ||||
| 		if b, ok := asBytes(nil, sv); ok { | ||||
| 			*d = b | ||||
| 			return nil | ||||
| 		} | ||||
| 	case *sql.RawBytes: | ||||
| 		sv = reflect.ValueOf(src) | ||||
| 		if b, ok := asBytes([]byte(*d)[:0], sv); ok { | ||||
| 			*d = sql.RawBytes(b) | ||||
| 			return nil | ||||
| 		} | ||||
| 	case *bool: | ||||
| 		bv, err := driver.Bool.ConvertValue(src) | ||||
| 		if err == nil { | ||||
| 			*d = bv.(bool) | ||||
| 		} | ||||
| 		return err | ||||
| 	case *interface{}: | ||||
| 		*d = src | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	if scanner, ok := dest.(sql.Scanner); ok { | ||||
| 		return scanner.Scan(src) | ||||
| 	} | ||||
|  | ||||
| 	dpv := reflect.ValueOf(dest) | ||||
| 	if dpv.Kind() != reflect.Ptr { | ||||
| 		return errors.New("destination not a pointer") | ||||
| 	} | ||||
| 	if dpv.IsNil() { | ||||
| 		return errNilPtr | ||||
| 	} | ||||
|  | ||||
| 	if !sv.IsValid() { | ||||
| 		sv = reflect.ValueOf(src) | ||||
| 	} | ||||
|  | ||||
| 	dv := reflect.Indirect(dpv) | ||||
| 	if sv.IsValid() && sv.Type().AssignableTo(dv.Type()) { | ||||
| 		switch b := src.(type) { | ||||
| 		case []byte: | ||||
| 			dv.Set(reflect.ValueOf(cloneBytes(b))) | ||||
| 		default: | ||||
| 			dv.Set(sv) | ||||
| 		} | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	if dv.Kind() == sv.Kind() && sv.Type().ConvertibleTo(dv.Type()) { | ||||
| 		dv.Set(sv.Convert(dv.Type())) | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	// The following conversions use a string value as an intermediate representation | ||||
| 	// to convert between various numeric types. | ||||
| 	// | ||||
| 	// This also allows scanning into user defined types such as "type Int int64". | ||||
| 	// For symmetry, also check for string destination types. | ||||
| 	switch dv.Kind() { | ||||
| 	case reflect.Ptr: | ||||
| 		if src == nil { | ||||
| 			dv.Set(reflect.Zero(dv.Type())) | ||||
| 			return nil | ||||
| 		} | ||||
| 		dv.Set(reflect.New(dv.Type().Elem())) | ||||
| 		return convertAssign(dv.Interface(), src) | ||||
| 	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: | ||||
| 		s := asString(src) | ||||
| 		i64, err := strconv.ParseInt(s, 10, dv.Type().Bits()) | ||||
| 		if err != nil { | ||||
| 			err = strconvErr(err) | ||||
| 			return fmt.Errorf("converting driver.Value type %T (%q) to a %s: %v", src, s, dv.Kind(), err) | ||||
| 		} | ||||
| 		dv.SetInt(i64) | ||||
| 		return nil | ||||
| 	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: | ||||
| 		s := asString(src) | ||||
| 		u64, err := strconv.ParseUint(s, 10, dv.Type().Bits()) | ||||
| 		if err != nil { | ||||
| 			err = strconvErr(err) | ||||
| 			return fmt.Errorf("converting driver.Value type %T (%q) to a %s: %v", src, s, dv.Kind(), err) | ||||
| 		} | ||||
| 		dv.SetUint(u64) | ||||
| 		return nil | ||||
| 	case reflect.Float32, reflect.Float64: | ||||
| 		s := asString(src) | ||||
| 		f64, err := strconv.ParseFloat(s, dv.Type().Bits()) | ||||
| 		if err != nil { | ||||
| 			err = strconvErr(err) | ||||
| 			return fmt.Errorf("converting driver.Value type %T (%q) to a %s: %v", src, s, dv.Kind(), err) | ||||
| 		} | ||||
| 		dv.SetFloat(f64) | ||||
| 		return nil | ||||
| 	case reflect.String: | ||||
| 		switch v := src.(type) { | ||||
| 		case string: | ||||
| 			dv.SetString(v) | ||||
| 			return nil | ||||
| 		case []byte: | ||||
| 			dv.SetString(string(v)) | ||||
| 			return nil | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return fmt.Errorf("unsupported Scan, storing driver.Value type %T into type %T", src, dest) | ||||
| } | ||||
|  | ||||
| func strconvErr(err error) error { | ||||
| 	if ne, ok := err.(*strconv.NumError); ok { | ||||
| 		return ne.Err | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func cloneBytes(b []byte) []byte { | ||||
| 	if b == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	c := make([]byte, len(b)) | ||||
| 	copy(c, b) | ||||
| 	return c | ||||
| } | ||||
|  | ||||
| func asString(src interface{}) string { | ||||
| 	switch v := src.(type) { | ||||
| 	case string: | ||||
| 		return v | ||||
| 	case []byte: | ||||
| 		return string(v) | ||||
| 	} | ||||
| 	rv := reflect.ValueOf(src) | ||||
| 	switch rv.Kind() { | ||||
| 	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: | ||||
| 		return strconv.FormatInt(rv.Int(), 10) | ||||
| 	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: | ||||
| 		return strconv.FormatUint(rv.Uint(), 10) | ||||
| 	case reflect.Float64: | ||||
| 		return strconv.FormatFloat(rv.Float(), 'g', -1, 64) | ||||
| 	case reflect.Float32: | ||||
| 		return strconv.FormatFloat(rv.Float(), 'g', -1, 32) | ||||
| 	case reflect.Bool: | ||||
| 		return strconv.FormatBool(rv.Bool()) | ||||
| 	} | ||||
| 	return fmt.Sprintf("%v", src) | ||||
| } | ||||
|  | ||||
| func asBytes(buf []byte, rv reflect.Value) (b []byte, ok bool) { | ||||
| 	switch rv.Kind() { | ||||
| 	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: | ||||
| 		return strconv.AppendInt(buf, rv.Int(), 10), true | ||||
| 	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: | ||||
| 		return strconv.AppendUint(buf, rv.Uint(), 10), true | ||||
| 	case reflect.Float32: | ||||
| 		return strconv.AppendFloat(buf, rv.Float(), 'g', -1, 32), true | ||||
| 	case reflect.Float64: | ||||
| 		return strconv.AppendFloat(buf, rv.Float(), 'g', -1, 64), true | ||||
| 	case reflect.Bool: | ||||
| 		return strconv.AppendBool(buf, rv.Bool()), true | ||||
| 	case reflect.String: | ||||
| 		s := rv.String() | ||||
| 		return append(buf, s...), true | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
							
								
								
									
										21
									
								
								vendor/github.com/mattn/go-sqlite3/error.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/mattn/go-sqlite3/error.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,11 +1,19 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package sqlite3 | ||||
|  | ||||
| /* | ||||
| #ifndef USE_LIBSQLITE3 | ||||
| #include <sqlite3-binding.h> | ||||
| #else | ||||
| #include <sqlite3.h> | ||||
| #endif | ||||
| */ | ||||
| import "C" | ||||
| import "syscall" | ||||
|  | ||||
| // ErrNo inherit errno. | ||||
| type ErrNo int | ||||
| @@ -20,6 +28,7 @@ type ErrNoExtended int | ||||
| type Error struct { | ||||
| 	Code         ErrNo         /* The error code returned by SQLite */ | ||||
| 	ExtendedCode ErrNoExtended /* The extended error code returned by SQLite */ | ||||
| 	SystemErrno  syscall.Errno /* The system errno returned by the OS through SQLite, if applicable */ | ||||
| 	err          string        /* The error string returned by sqlite3_errmsg(), | ||||
| 	this usually contains more specific details. */ | ||||
| } | ||||
| @@ -72,10 +81,16 @@ func (err ErrNoExtended) Error() string { | ||||
| } | ||||
|  | ||||
| func (err Error) Error() string { | ||||
| 	var str string | ||||
| 	if err.err != "" { | ||||
| 		return err.err | ||||
| 		str = err.err | ||||
| 	} else { | ||||
| 		str = C.GoString(C.sqlite3_errstr(C.int(err.Code))) | ||||
| 	} | ||||
| 	return errorString(err) | ||||
| 	if err.SystemErrno != 0 { | ||||
| 		str += ": " + err.SystemErrno.Error() | ||||
| 	} | ||||
| 	return str | ||||
| } | ||||
|  | ||||
| // result codes from http://www.sqlite.org/c3ref/c_abort_rollback.html | ||||
|   | ||||
							
								
								
									
										9193
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9193
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										81
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										81
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -124,9 +124,9 @@ extern "C" { | ||||
| ** [sqlite3_libversion_number()], [sqlite3_sourceid()], | ||||
| ** [sqlite_version()] and [sqlite_source_id()]. | ||||
| */ | ||||
| #define SQLITE_VERSION        "3.29.0" | ||||
| #define SQLITE_VERSION_NUMBER 3029000 | ||||
| #define SQLITE_SOURCE_ID      "2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6" | ||||
| #define SQLITE_VERSION        "3.30.1" | ||||
| #define SQLITE_VERSION_NUMBER 3030001 | ||||
| #define SQLITE_SOURCE_ID      "2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3df1b0b" | ||||
|  | ||||
| /* | ||||
| ** CAPI3REF: Run-Time Library Version Numbers | ||||
| @@ -2094,6 +2094,17 @@ struct sqlite3_mem_methods { | ||||
| ** following this call.  The second parameter may be a NULL pointer, in | ||||
| ** which case the trigger setting is not reported back. </dd> | ||||
| ** | ||||
| ** [[SQLITE_DBCONFIG_ENABLE_VIEW]] | ||||
| ** <dt>SQLITE_DBCONFIG_ENABLE_VIEW</dt> | ||||
| ** <dd> ^This option is used to enable or disable [CREATE VIEW | views]. | ||||
| ** There should be two additional arguments. | ||||
| ** The first argument is an integer which is 0 to disable views, | ||||
| ** positive to enable views or negative to leave the setting unchanged. | ||||
| ** The second parameter is a pointer to an integer into which | ||||
| ** is written 0 or 1 to indicate whether views are disabled or enabled | ||||
| ** following this call.  The second parameter may be a NULL pointer, in | ||||
| ** which case the view setting is not reported back. </dd> | ||||
| ** | ||||
| ** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]] | ||||
| ** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt> | ||||
| ** <dd> ^This option is used to enable or disable the | ||||
| @@ -2266,7 +2277,8 @@ struct sqlite3_mem_methods { | ||||
| #define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE    1012 /* int int* */ | ||||
| #define SQLITE_DBCONFIG_DQS_DML               1013 /* int int* */ | ||||
| #define SQLITE_DBCONFIG_DQS_DDL               1014 /* int int* */ | ||||
| #define SQLITE_DBCONFIG_MAX                   1014 /* Largest DBCONFIG */ | ||||
| #define SQLITE_DBCONFIG_ENABLE_VIEW           1015 /* int int* */ | ||||
| #define SQLITE_DBCONFIG_MAX                   1015 /* Largest DBCONFIG */ | ||||
|  | ||||
| /* | ||||
| ** CAPI3REF: Enable Or Disable Extended Result Codes | ||||
| @@ -3815,7 +3827,7 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); | ||||
| ** ^The specific value of WHERE-clause [parameter] might influence the  | ||||
| ** choice of query plan if the parameter is the left-hand side of a [LIKE] | ||||
| ** or [GLOB] operator or if the parameter is compared to an indexed column | ||||
| ** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled. | ||||
| ** and the [SQLITE_ENABLE_STAT4] compile-time option is enabled. | ||||
| ** </li> | ||||
| ** </ol> | ||||
| ** | ||||
| @@ -4850,6 +4862,12 @@ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt); | ||||
| ** perform additional optimizations on deterministic functions, so use | ||||
| ** of the [SQLITE_DETERMINISTIC] flag is recommended where possible. | ||||
| ** | ||||
| ** ^The fourth parameter may also optionally include the [SQLITE_DIRECTONLY] | ||||
| ** flag, which if present prevents the function from being invoked from | ||||
| ** within VIEWs or TRIGGERs.  For security reasons, the [SQLITE_DIRECTONLY] | ||||
| ** flag is recommended for any application-defined SQL function that has | ||||
| ** side-effects. | ||||
| ** | ||||
| ** ^(The fifth parameter is an arbitrary pointer.  The implementation of the | ||||
| ** function can gain access to this pointer using [sqlite3_user_data()].)^ | ||||
| ** | ||||
| @@ -4966,8 +4984,30 @@ SQLITE_API int sqlite3_create_window_function( | ||||
| ** [SQLITE_UTF8 | preferred text encoding] as the fourth argument | ||||
| ** to [sqlite3_create_function()], [sqlite3_create_function16()], or | ||||
| ** [sqlite3_create_function_v2()]. | ||||
| ** | ||||
| ** The SQLITE_DETERMINISTIC flag means that the new function will always | ||||
| ** maps the same inputs into the same output.  The abs() function is | ||||
| ** deterministic, for example, but randomblob() is not. | ||||
| ** | ||||
| ** The SQLITE_DIRECTONLY flag means that the function may only be invoked | ||||
| ** from top-level SQL, and cannot be used in VIEWs or TRIGGERs.  This is | ||||
| ** a security feature which is recommended for all  | ||||
| ** [application-defined SQL functions] that have side-effects.  This flag  | ||||
| ** prevents an attacker from adding triggers and views to a schema then  | ||||
| ** tricking a high-privilege application into causing unintended side-effects | ||||
| ** while performing ordinary queries. | ||||
| ** | ||||
| ** The SQLITE_SUBTYPE flag indicates to SQLite that a function may call | ||||
| ** [sqlite3_value_subtype()] to inspect the sub-types of its arguments. | ||||
| ** Specifying this flag makes no difference for scalar or aggregate user | ||||
| ** functions. However, if it is not specified for a user-defined window | ||||
| ** function, then any sub-types belonging to arguments passed to the window | ||||
| ** function may be discarded before the window function is called (i.e. | ||||
| ** sqlite3_value_subtype() will always return 0). | ||||
| */ | ||||
| #define SQLITE_DETERMINISTIC    0x800 | ||||
| #define SQLITE_DETERMINISTIC    0x000000800 | ||||
| #define SQLITE_DIRECTONLY       0x000080000 | ||||
| #define SQLITE_SUBTYPE          0x000100000 | ||||
|  | ||||
| /* | ||||
| ** CAPI3REF: Deprecated Functions | ||||
| @@ -6613,6 +6653,12 @@ struct sqlite3_index_info { | ||||
| ** ^The sqlite3_create_module() | ||||
| ** interface is equivalent to sqlite3_create_module_v2() with a NULL | ||||
| ** destructor. | ||||
| ** | ||||
| ** ^If the third parameter (the pointer to the sqlite3_module object) is | ||||
| ** NULL then no new module is create and any existing modules with the | ||||
| ** same name are dropped. | ||||
| ** | ||||
| ** See also: [sqlite3_drop_modules()] | ||||
| */ | ||||
| SQLITE_API int sqlite3_create_module( | ||||
|   sqlite3 *db,               /* SQLite connection to register module with */ | ||||
| @@ -6628,6 +6674,23 @@ SQLITE_API int sqlite3_create_module_v2( | ||||
|   void(*xDestroy)(void*)     /* Module destructor function */ | ||||
| ); | ||||
|  | ||||
| /* | ||||
| ** CAPI3REF: Remove Unnecessary Virtual Table Implementations | ||||
| ** METHOD: sqlite3 | ||||
| ** | ||||
| ** ^The sqlite3_drop_modules(D,L) interface removes all virtual | ||||
| ** table modules from database connection D except those named on list L. | ||||
| ** The L parameter must be either NULL or a pointer to an array of pointers | ||||
| ** to strings where the array is terminated by a single NULL pointer. | ||||
| ** ^If the L parameter is NULL, then all virtual table modules are removed. | ||||
| ** | ||||
| ** See also: [sqlite3_create_module()] | ||||
| */ | ||||
| SQLITE_API int sqlite3_drop_modules( | ||||
|   sqlite3 *db,                /* Remove modules from this connection */ | ||||
|   const char **azKeep         /* Except, do not remove the ones named here */ | ||||
| ); | ||||
|  | ||||
| /* | ||||
| ** CAPI3REF: Virtual Table Instance Object | ||||
| ** KEYWORDS: sqlite3_vtab | ||||
| @@ -7336,7 +7399,7 @@ SQLITE_API int sqlite3_test_control(int op, ...); | ||||
| #define SQLITE_TESTCTRL_FIRST                    5 | ||||
| #define SQLITE_TESTCTRL_PRNG_SAVE                5 | ||||
| #define SQLITE_TESTCTRL_PRNG_RESTORE             6 | ||||
| #define SQLITE_TESTCTRL_PRNG_RESET               7 | ||||
| #define SQLITE_TESTCTRL_PRNG_RESET               7  /* NOT USED */ | ||||
| #define SQLITE_TESTCTRL_BITVEC_TEST              8 | ||||
| #define SQLITE_TESTCTRL_FAULT_INSTALL            9 | ||||
| #define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS     10 | ||||
| @@ -7359,7 +7422,9 @@ SQLITE_API int sqlite3_test_control(int op, ...); | ||||
| #define SQLITE_TESTCTRL_IMPOSTER                25 | ||||
| #define SQLITE_TESTCTRL_PARSER_COVERAGE         26 | ||||
| #define SQLITE_TESTCTRL_RESULT_INTREAL          27 | ||||
| #define SQLITE_TESTCTRL_LAST                    27  /* Largest TESTCTRL */ | ||||
| #define SQLITE_TESTCTRL_PRNG_SEED               28 | ||||
| #define SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS     29 | ||||
| #define SQLITE_TESTCTRL_LAST                    29  /* Largest TESTCTRL */ | ||||
|  | ||||
| /* | ||||
| ** CAPI3REF: SQL Keyword Checking | ||||
|   | ||||
							
								
								
									
										154
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										154
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2018 G.J.R. Timmer <gjr.timmer@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| @@ -183,6 +183,12 @@ static int _sqlite3_limit(sqlite3* db, int limitId, int newLimit) { | ||||
|   return sqlite3_limit(db, limitId, newLimit); | ||||
| #endif | ||||
| } | ||||
|  | ||||
| #if SQLITE_VERSION_NUMBER < 3012000 | ||||
| static int sqlite3_system_errno(sqlite3 *db) { | ||||
|   return 0; | ||||
| } | ||||
| #endif | ||||
| */ | ||||
| import "C" | ||||
| import ( | ||||
| @@ -198,6 +204,7 @@ import ( | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| 	"unsafe" | ||||
| ) | ||||
| @@ -328,7 +335,7 @@ type SQLiteRows struct { | ||||
| 	decltype []string | ||||
| 	cls      bool | ||||
| 	closed   bool | ||||
| 	done     chan struct{} | ||||
| 	ctx      context.Context // no better alternative to pass context into Next() method | ||||
| } | ||||
|  | ||||
| type functionInfo struct { | ||||
| @@ -749,15 +756,28 @@ func (c *SQLiteConn) lastError() error { | ||||
| 	return lastError(c.db) | ||||
| } | ||||
|  | ||||
| // Note: may be called with db == nil | ||||
| func lastError(db *C.sqlite3) error { | ||||
| 	rv := C.sqlite3_errcode(db) | ||||
| 	rv := C.sqlite3_errcode(db) // returns SQLITE_NOMEM if db == nil | ||||
| 	if rv == C.SQLITE_OK { | ||||
| 		return nil | ||||
| 	} | ||||
| 	extrv := C.sqlite3_extended_errcode(db)    // returns SQLITE_NOMEM if db == nil | ||||
| 	errStr := C.GoString(C.sqlite3_errmsg(db)) // returns "out of memory" if db == nil | ||||
|  | ||||
| 	// https://www.sqlite.org/c3ref/system_errno.html | ||||
| 	// sqlite3_system_errno is only meaningful if the error code was SQLITE_CANTOPEN, | ||||
| 	// or it was SQLITE_IOERR and the extended code was not SQLITE_IOERR_NOMEM | ||||
| 	var systemErrno syscall.Errno | ||||
| 	if rv == C.SQLITE_CANTOPEN || (rv == C.SQLITE_IOERR && extrv != C.SQLITE_IOERR_NOMEM) { | ||||
| 		systemErrno = syscall.Errno(C.sqlite3_system_errno(db)) | ||||
| 	} | ||||
|  | ||||
| 	return Error{ | ||||
| 		Code:         ErrNo(rv), | ||||
| 		ExtendedCode: ErrNoExtended(C.sqlite3_extended_errcode(db)), | ||||
| 		err:          C.GoString(C.sqlite3_errmsg(db)), | ||||
| 		ExtendedCode: ErrNoExtended(extrv), | ||||
| 		SystemErrno:  systemErrno, | ||||
| 		err:          errStr, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @@ -869,10 +889,6 @@ func (c *SQLiteConn) begin(ctx context.Context) (driver.Tx, error) { | ||||
| 	return &SQLiteTx{c}, nil | ||||
| } | ||||
|  | ||||
| func errorString(err Error) string { | ||||
| 	return C.GoString(C.sqlite3_errstr(C.int(err.Code))) | ||||
| } | ||||
|  | ||||
| // Open database and return a new connection. | ||||
| // | ||||
| // A pragma can take either zero or one argument. | ||||
| @@ -897,7 +913,7 @@ func errorString(err Error) string { | ||||
| //      - rwc | ||||
| //      - memory | ||||
| // | ||||
| //   shared | ||||
| //   cache | ||||
| //     SQLite Shared-Cache Mode | ||||
| //     https://www.sqlite.org/sharedcache.html | ||||
| //     Values: | ||||
| @@ -1000,7 +1016,7 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) { | ||||
| 	deferForeignKeys := -1 | ||||
| 	foreignKeys := -1 | ||||
| 	ignoreCheckConstraints := -1 | ||||
| 	journalMode := "DELETE" | ||||
| 	var journalMode string | ||||
| 	lockingMode := "NORMAL" | ||||
| 	queryOnly := -1 | ||||
| 	recursiveTriggers := -1 | ||||
| @@ -1232,7 +1248,7 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) { | ||||
| 		if _, ok := params["_locking"]; ok { | ||||
| 			pkey = "_locking" | ||||
| 		} | ||||
| 		if val := params.Get("_locking"); val != "" { | ||||
| 		if val := params.Get(pkey); val != "" { | ||||
| 			switch strings.ToUpper(val) { | ||||
| 			case "NORMAL", "EXCLUSIVE": | ||||
| 				lockingMode = strings.ToUpper(val) | ||||
| @@ -1342,10 +1358,13 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) { | ||||
| 		mutex|C.SQLITE_OPEN_READWRITE|C.SQLITE_OPEN_CREATE, | ||||
| 		nil) | ||||
| 	if rv != 0 { | ||||
| 		// Save off the error _before_ closing the database. | ||||
| 		// This is safe even if db is nil. | ||||
| 		err := lastError(db) | ||||
| 		if db != nil { | ||||
| 			C.sqlite3_close_v2(db) | ||||
| 		} | ||||
| 		return nil, Error{Code: ErrNo(rv)} | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if db == nil { | ||||
| 		return nil, errors.New("sqlite succeeded without returning a database") | ||||
| @@ -1522,10 +1541,10 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) { | ||||
| 		// Before going any further, we need to check that the user | ||||
| 		// has provided an username and password within the DSN. | ||||
| 		// We are not allowed to continue. | ||||
| 		if len(authUser) < 0 { | ||||
| 		if len(authUser) == 0 { | ||||
| 			return nil, fmt.Errorf("Missing '_auth_user' while user authentication was requested with '_auth'") | ||||
| 		} | ||||
| 		if len(authPass) < 0 { | ||||
| 		if len(authPass) == 0 { | ||||
| 			return nil, fmt.Errorf("Missing '_auth_pass' while user authentication was requested with '_auth'") | ||||
| 		} | ||||
|  | ||||
| @@ -1571,10 +1590,11 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) { | ||||
| 	} | ||||
|  | ||||
| 	// Journal Mode | ||||
| 	// Because default Journal Mode is DELETE this PRAGMA can always be executed. | ||||
| 	if err := exec(fmt.Sprintf("PRAGMA journal_mode = %s;", journalMode)); err != nil { | ||||
| 		C.sqlite3_close_v2(db) | ||||
| 		return nil, err | ||||
| 	if journalMode != "" { | ||||
| 		if err := exec(fmt.Sprintf("PRAGMA journal_mode = %s;", journalMode)); err != nil { | ||||
| 			C.sqlite3_close_v2(db) | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// Locking Mode | ||||
| @@ -1846,28 +1866,13 @@ func (s *SQLiteStmt) query(ctx context.Context, args []namedValue) (driver.Rows, | ||||
| 		decltype: nil, | ||||
| 		cls:      s.cls, | ||||
| 		closed:   false, | ||||
| 		done:     make(chan struct{}), | ||||
| 	} | ||||
|  | ||||
| 	if ctxdone := ctx.Done(); ctxdone != nil { | ||||
| 		go func(db *C.sqlite3) { | ||||
| 			select { | ||||
| 			case <-ctxdone: | ||||
| 				select { | ||||
| 				case <-rows.done: | ||||
| 				default: | ||||
| 					C.sqlite3_interrupt(db) | ||||
| 					rows.Close() | ||||
| 				} | ||||
| 			case <-rows.done: | ||||
| 			} | ||||
| 		}(s.c.db) | ||||
| 		ctx:      ctx, | ||||
| 	} | ||||
|  | ||||
| 	return rows, nil | ||||
| } | ||||
|  | ||||
| // LastInsertId teturn last inserted ID. | ||||
| // LastInsertId return last inserted ID. | ||||
| func (r *SQLiteResult) LastInsertId() (int64, error) { | ||||
| 	return r.id, nil | ||||
| } | ||||
| @@ -1889,29 +1894,43 @@ func (s *SQLiteStmt) Exec(args []driver.Value) (driver.Result, error) { | ||||
| 	return s.exec(context.Background(), list) | ||||
| } | ||||
|  | ||||
| // exec executes a query that doesn't return rows. Attempts to honor context timeout. | ||||
| func (s *SQLiteStmt) exec(ctx context.Context, args []namedValue) (driver.Result, error) { | ||||
| 	if ctx.Done() == nil { | ||||
| 		return s.execSync(args) | ||||
| 	} | ||||
|  | ||||
| 	type result struct { | ||||
| 		r   driver.Result | ||||
| 		err error | ||||
| 	} | ||||
| 	resultCh := make(chan result) | ||||
| 	go func() { | ||||
| 		r, err := s.execSync(args) | ||||
| 		resultCh <- result{r, err} | ||||
| 	}() | ||||
| 	select { | ||||
| 	case rv := <-resultCh: | ||||
| 		return rv.r, rv.err | ||||
| 	case <-ctx.Done(): | ||||
| 		select { | ||||
| 		case <-resultCh: // no need to interrupt | ||||
| 		default: | ||||
| 			// this is still racy and can be no-op if executed between sqlite3_* calls in execSync. | ||||
| 			C.sqlite3_interrupt(s.c.db) | ||||
| 			<-resultCh // ensure goroutine completed | ||||
| 		} | ||||
| 		return nil, ctx.Err() | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (s *SQLiteStmt) execSync(args []namedValue) (driver.Result, error) { | ||||
| 	if err := s.bind(args); err != nil { | ||||
| 		C.sqlite3_reset(s.s) | ||||
| 		C.sqlite3_clear_bindings(s.s) | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	if ctxdone := ctx.Done(); ctxdone != nil { | ||||
| 		done := make(chan struct{}) | ||||
| 		defer close(done) | ||||
| 		go func(db *C.sqlite3) { | ||||
| 			select { | ||||
| 			case <-done: | ||||
| 			case <-ctxdone: | ||||
| 				select { | ||||
| 				case <-done: | ||||
| 				default: | ||||
| 					C.sqlite3_interrupt(db) | ||||
| 				} | ||||
| 			} | ||||
| 		}(s.c.db) | ||||
| 	} | ||||
|  | ||||
| 	var rowid, changes C.longlong | ||||
| 	rv := C._sqlite3_step_row_internal(s.s, &rowid, &changes) | ||||
| 	if rv != C.SQLITE_ROW && rv != C.SQLITE_OK && rv != C.SQLITE_DONE { | ||||
| @@ -1932,9 +1951,6 @@ func (rc *SQLiteRows) Close() error { | ||||
| 		return nil | ||||
| 	} | ||||
| 	rc.closed = true | ||||
| 	if rc.done != nil { | ||||
| 		close(rc.done) | ||||
| 	} | ||||
| 	if rc.cls { | ||||
| 		rc.s.mu.Unlock() | ||||
| 		return rc.s.Close() | ||||
| @@ -1978,13 +1994,39 @@ func (rc *SQLiteRows) DeclTypes() []string { | ||||
| 	return rc.declTypes() | ||||
| } | ||||
|  | ||||
| // Next move cursor to next. | ||||
| // Next move cursor to next. Attempts to honor context timeout from QueryContext call. | ||||
| func (rc *SQLiteRows) Next(dest []driver.Value) error { | ||||
| 	rc.s.mu.Lock() | ||||
| 	defer rc.s.mu.Unlock() | ||||
|  | ||||
| 	if rc.s.closed { | ||||
| 		return io.EOF | ||||
| 	} | ||||
|  | ||||
| 	if rc.ctx.Done() == nil { | ||||
| 		return rc.nextSyncLocked(dest) | ||||
| 	} | ||||
| 	resultCh := make(chan error) | ||||
| 	go func() { | ||||
| 		resultCh <- rc.nextSyncLocked(dest) | ||||
| 	}() | ||||
| 	select { | ||||
| 	case err := <-resultCh: | ||||
| 		return err | ||||
| 	case <-rc.ctx.Done(): | ||||
| 		select { | ||||
| 		case <-resultCh: // no need to interrupt | ||||
| 		default: | ||||
| 			// this is still racy and can be no-op if executed between sqlite3_* calls in nextSyncLocked. | ||||
| 			C.sqlite3_interrupt(rc.s.c.db) | ||||
| 			<-resultCh // ensure goroutine completed | ||||
| 		} | ||||
| 		return rc.ctx.Err() | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // nextSyncLocked moves cursor to next; must be called with locked mutex. | ||||
| func (rc *SQLiteRows) nextSyncLocked(dest []driver.Value) error { | ||||
| 	rv := C._sqlite3_step_internal(rc.s.s) | ||||
| 	if rv == C.SQLITE_DONE { | ||||
| 		return io.EOF | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_context.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_context.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_go18.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_go18.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_libsqlite3.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_libsqlite3.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
| @@ -11,6 +11,7 @@ package sqlite3 | ||||
| #cgo CFLAGS: -DUSE_LIBSQLITE3 | ||||
| #cgo linux LDFLAGS: -lsqlite3 | ||||
| #cgo darwin LDFLAGS: -L/usr/local/opt/sqlite/lib -lsqlite3 | ||||
| #cgo darwin CFLAGS: -I/usr/local/opt/sqlite/include | ||||
| #cgo openbsd LDFLAGS: -lsqlite3 | ||||
| #cgo solaris LDFLAGS: -lsqlite3 | ||||
| */ | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_load_extension.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_load_extension.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_load_extension_omit.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_load_extension_omit.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_allow_uri_authority.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_allow_uri_authority.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2018 G.J.R. Timmer <gjr.timmer@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_app_armor.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_app_armor.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2018 G.J.R. Timmer <gjr.timmer@gmail.com>. | ||||
|  | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_foreign_keys.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_foreign_keys.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2018 G.J.R. Timmer <gjr.timmer@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_fts5.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_fts5.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_icu.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_icu.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_introspect.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_introspect.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2018 G.J.R. Timmer <gjr.timmer@gmail.com>. | ||||
|  | ||||
| // Use of this source code is governed by an MIT-style | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_json1.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_json1.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|   | ||||
							
								
								
									
										20
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| // Copyright (C) 2019 G.J.R. Timmer <gjr.timmer@gmail.com>. | ||||
| // Copyright (C) 2018 segment.com <friends@segment.com> | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // +build cgo | ||||
|  | ||||
| package sqlite3 | ||||
|  | ||||
| // SQLitePreUpdateData represents all of the data available during a | ||||
| // pre-update hook call. | ||||
| type SQLitePreUpdateData struct { | ||||
| 	Conn         *SQLiteConn | ||||
| 	Op           int | ||||
| 	DatabaseName string | ||||
| 	TableName    string | ||||
| 	OldRowID     int64 | ||||
| 	NewRowID     int64 | ||||
| } | ||||
							
								
								
									
										112
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate_hook.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate_hook.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,112 @@ | ||||
| // Copyright (C) 2019 G.J.R. Timmer <gjr.timmer@gmail.com>. | ||||
| // Copyright (C) 2018 segment.com <friends@segment.com> | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // +build sqlite_preupdate_hook | ||||
|  | ||||
| package sqlite3 | ||||
|  | ||||
| /* | ||||
| #cgo CFLAGS: -DSQLITE_ENABLE_PREUPDATE_HOOK | ||||
| #cgo LDFLAGS: -lm | ||||
|  | ||||
| #ifndef USE_LIBSQLITE3 | ||||
| #include <sqlite3-binding.h> | ||||
| #else | ||||
| #include <sqlite3.h> | ||||
| #endif | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
|  | ||||
| void preUpdateHookTrampoline(void*, sqlite3 *, int, char *, char *, sqlite3_int64, sqlite3_int64); | ||||
| */ | ||||
| import "C" | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
| // RegisterPreUpdateHook sets the pre-update hook for a connection. | ||||
| // | ||||
| // The callback is passed a SQLitePreUpdateData struct with the data for | ||||
| // the update, as well as methods for fetching copies of impacted data. | ||||
| // | ||||
| // If there is an existing update hook for this connection, it will be | ||||
| // removed. If callback is nil the existing hook (if any) will be removed | ||||
| // without creating a new one. | ||||
| func (c *SQLiteConn) RegisterPreUpdateHook(callback func(SQLitePreUpdateData)) { | ||||
| 	if callback == nil { | ||||
| 		C.sqlite3_preupdate_hook(c.db, nil, nil) | ||||
| 	} else { | ||||
| 		C.sqlite3_preupdate_hook(c.db, (*[0]byte)(unsafe.Pointer(C.preUpdateHookTrampoline)), unsafe.Pointer(newHandle(c, callback))) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Depth returns the source path of the write, see sqlite3_preupdate_depth() | ||||
| func (d *SQLitePreUpdateData) Depth() int { | ||||
| 	return int(C.sqlite3_preupdate_depth(d.Conn.db)) | ||||
| } | ||||
|  | ||||
| // Count returns the number of columns in the row | ||||
| func (d *SQLitePreUpdateData) Count() int { | ||||
| 	return int(C.sqlite3_preupdate_count(d.Conn.db)) | ||||
| } | ||||
|  | ||||
| func (d *SQLitePreUpdateData) row(dest []interface{}, new bool) error { | ||||
| 	for i := 0; i < d.Count() && i < len(dest); i++ { | ||||
| 		var val *C.sqlite3_value | ||||
| 		var src interface{} | ||||
|  | ||||
| 		// Initially I tried making this just a function pointer argument, but | ||||
| 		// it's absurdly complicated to pass C function pointers. | ||||
| 		if new { | ||||
| 			C.sqlite3_preupdate_new(d.Conn.db, C.int(i), &val) | ||||
| 		} else { | ||||
| 			C.sqlite3_preupdate_old(d.Conn.db, C.int(i), &val) | ||||
| 		} | ||||
|  | ||||
| 		switch C.sqlite3_value_type(val) { | ||||
| 		case C.SQLITE_INTEGER: | ||||
| 			src = int64(C.sqlite3_value_int64(val)) | ||||
| 		case C.SQLITE_FLOAT: | ||||
| 			src = float64(C.sqlite3_value_double(val)) | ||||
| 		case C.SQLITE_BLOB: | ||||
| 			len := C.sqlite3_value_bytes(val) | ||||
| 			blobptr := C.sqlite3_value_blob(val) | ||||
| 			src = C.GoBytes(blobptr, len) | ||||
| 		case C.SQLITE_TEXT: | ||||
| 			len := C.sqlite3_value_bytes(val) | ||||
| 			cstrptr := unsafe.Pointer(C.sqlite3_value_text(val)) | ||||
| 			src = C.GoBytes(cstrptr, len) | ||||
| 		case C.SQLITE_NULL: | ||||
| 			src = nil | ||||
| 		} | ||||
|  | ||||
| 		err := convertAssign(&dest[i], src) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Old populates dest with the row data to be replaced. This works similar to | ||||
| // database/sql's Rows.Scan() | ||||
| func (d *SQLitePreUpdateData) Old(dest ...interface{}) error { | ||||
| 	if d.Op == SQLITE_INSERT { | ||||
| 		return errors.New("There is no old row for INSERT operations") | ||||
| 	} | ||||
| 	return d.row(dest, false) | ||||
| } | ||||
|  | ||||
| // New populates dest with the replacement row data. This works similar to | ||||
| // database/sql's Rows.Scan() | ||||
| func (d *SQLitePreUpdateData) New(dest ...interface{}) error { | ||||
| 	if d.Op == SQLITE_DELETE { | ||||
| 		return errors.New("There is no new row for DELETE operations") | ||||
| 	} | ||||
| 	return d.row(dest, true) | ||||
| } | ||||
							
								
								
									
										21
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate_omit.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_preupdate_omit.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| // Copyright (C) 2019 G.J.R. Timmer <gjr.timmer@gmail.com>. | ||||
| // Copyright (C) 2018 segment.com <friends@segment.com> | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // +build !sqlite_preupdate_hook,cgo | ||||
|  | ||||
| package sqlite3 | ||||
|  | ||||
| // RegisterPreUpdateHook sets the pre-update hook for a connection. | ||||
| // | ||||
| // The callback is passed a SQLitePreUpdateData struct with the data for | ||||
| // the update, as well as methods for fetching copies of impacted data. | ||||
| // | ||||
| // If there is an existing update hook for this connection, it will be | ||||
| // removed. If callback is nil the existing hook (if any) will be removed | ||||
| // without creating a new one. | ||||
| func (c *SQLiteConn) RegisterPreUpdateHook(callback func(SQLitePreUpdateData)) { | ||||
| 	// NOOP | ||||
| } | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_secure_delete.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_secure_delete.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2018 G.J.R. Timmer <gjr.timmer@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_secure_delete_fast.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_secure_delete_fast.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2018 G.J.R. Timmer <gjr.timmer@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_stat4.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_stat4.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2018 G.J.R. Timmer <gjr.timmer@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2018 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vacuum_full.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vacuum_full.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2018 G.J.R. Timmer <gjr.timmer@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vacuum_incr.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vacuum_incr.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2018 G.J.R. Timmer <gjr.timmer@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vtable.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_opt_vtable.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_other.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_other.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_solaris.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_solaris.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2018 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_trace.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_trace.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2016 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
| @@ -89,6 +89,7 @@ func fillExpandedSQL(info *TraceInfo, db *C.sqlite3, pStmt unsafe.Pointer) { | ||||
| 	} | ||||
|  | ||||
| 	expSQLiteCStr := C.sqlite3_expanded_sql((*C.sqlite3_stmt)(pStmt)) | ||||
| 	defer C.sqlite3_free(unsafe.Pointer(expSQLiteCStr)) | ||||
| 	if expSQLiteCStr == nil { | ||||
| 		fillDBError(&info.DBError, db) | ||||
| 		return | ||||
|   | ||||
							
								
								
									
										5
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_type.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_type.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,3 +1,8 @@ | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package sqlite3 | ||||
|  | ||||
| /* | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3ext.h
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/mattn/go-sqlite3/sqlite3ext.h
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -323,6 +323,8 @@ struct sqlite3_api_routines { | ||||
|   /* Version 3.28.0 and later */ | ||||
|   int (*stmt_isexplain)(sqlite3_stmt*); | ||||
|   int (*value_frombind)(sqlite3_value*); | ||||
|   /* Version 3.30.0 and later */ | ||||
|   int (*drop_modules)(sqlite3*,const char**); | ||||
| }; | ||||
|  | ||||
| /* | ||||
| @@ -615,6 +617,8 @@ typedef int (*sqlite3_loadext_entry)( | ||||
| /* Version 3.28.0 and later */ | ||||
| #define sqlite3_stmt_isexplain         sqlite3_api->isexplain | ||||
| #define sqlite3_value_frombind         sqlite3_api->frombind | ||||
| /* Version 3.30.0 and later */ | ||||
| #define sqlite3_drop_modules           sqlite3_api->drop_modules | ||||
| #endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ | ||||
|  | ||||
| #if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) | ||||
|   | ||||
							
								
								
									
										5
									
								
								vendor/github.com/mattn/go-sqlite3/static_mock.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/mattn/go-sqlite3/static_mock.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,3 +1,8 @@ | ||||
| // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | ||||
| // | ||||
| // Use of this source code is governed by an MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // +build !cgo | ||||
|  | ||||
| package sqlite3 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 techknowlogick
					techknowlogick