Documentation ¶
Index ¶
- Variables
- func CreateSqliteDatabaseSchemaString(ctx context.Context, db Queryable) (string, error)
- func HashGoSqliteSchema(ctx context.Context, schemaStr string) (string, error)
- func HashMattnSqliteSchema(ctx context.Context, schemaStr string) (string, error)
- func HashSqliteDatabase(ctx context.Context, db Queryable) (string, error)
- func InsertSingle[TData any](ctx context.Context, q Queryable, tableName string, v TData) (sql.Result, error)
- func QueryAll[TData any](ctx context.Context, q Queryable, sql string, pp PP, mode StructScanMode, ...) ([]TData, error)
- func QuerySingle[TData any](ctx context.Context, q Queryable, sql string, pp PP, mode StructScanMode, ...) (TData, error)
- func ScanAll[TData any](ctx context.Context, q Queryable, rows *sqlx.Rows, mode StructScanMode, ...) ([]TData, error)
- func ScanSingle[TData any](ctx context.Context, q Queryable, rows *sqlx.Rows, mode StructScanMode, ...) (TData, error)
- type DB
- type DBTypeConverter
- type Listener
- type PP
- type Queryable
- type StructScanMode
- type StructScanSafety
- type StructScanner
- type Tx
- type TxStatus
Constants ¶
This section is empty.
Variables ¶
View Source
var ConverterBoolToBit = NewDBTypeConverter[bool, int](func(v bool) (int, error) { return langext.Conditional(v, 1, 0), nil }, func(v int) (bool, error) { if v == 0 { return false, nil } if v == 1 { return true, nil } return false, errors.New(fmt.Sprintf("invalid valud for boolean: '%d'", v)) })
View Source
var ConverterRFC339NanoTimeToString = NewDBTypeConverter[rfctime.RFC3339NanoTime, string](func(v rfctime.RFC3339NanoTime) (string, error) { return v.Time().In(time.UTC).Format("2006-01-02 15:04:05.999999999"), nil }, func(v string) (rfctime.RFC3339NanoTime, error) { t, err := time.ParseInLocation("2006-01-02 15:04:05.999999999", v, time.UTC) if err != nil { return rfctime.RFC3339NanoTime{}, err } return rfctime.NewRFC3339Nano(t), nil })
ConverterRFC339NanoTimeToString Does not really use RFC339 - but sqlite does not understand timezones and the `T` delimiter
View Source
var ConverterRFC339TimeToString = NewDBTypeConverter[rfctime.RFC3339Time, string](func(v rfctime.RFC3339Time) (string, error) { return v.Time().In(time.UTC).Format("2006-01-02 15:04:05"), nil }, func(v string) (rfctime.RFC3339Time, error) { t, err := time.Parse("2006-01-02 15:04:05", v) if err != nil { return rfctime.RFC3339Time{}, err } return rfctime.NewRFC3339(t), nil })
ConverterRFC339TimeToString Does not really use RFC339 - but sqlite does not understand timezones and the `T` delimiter
View Source
var ConverterRFCUnixMilliTimeToUnixMillis = NewDBTypeConverter[rfctime.UnixMilliTime, int64](func(v rfctime.UnixMilliTime) (int64, error) { return v.UnixMilli(), nil }, func(v int64) (rfctime.UnixMilliTime, error) { return rfctime.NewUnixMilli(time.UnixMilli(v)), nil })
View Source
var ConverterRFCUnixNanoTimeToUnixNanos = NewDBTypeConverter[rfctime.UnixNanoTime, int64](func(v rfctime.UnixNanoTime) (int64, error) { return v.UnixNano(), nil }, func(v int64) (rfctime.UnixNanoTime, error) { return rfctime.NewUnixNano(time.Unix(0, v)), nil })
Functions ¶
func CreateSqliteDatabaseSchemaString ¶ added in v0.0.125
func HashGoSqliteSchema ¶ added in v0.0.350
HashGoSqliteSchema use if mattn/go-sqlite3
func HashMattnSqliteSchema ¶ added in v0.0.350
HashMattnSqliteSchema use if github.com/glebarez/go-sqlite
func HashSqliteDatabase ¶ added in v0.0.126
func InsertSingle ¶ added in v0.0.125
func QueryAll ¶ added in v0.0.125
func QueryAll[TData any](ctx context.Context, q Queryable, sql string, pp PP, mode StructScanMode, sec StructScanSafety) ([]TData, error)
func QuerySingle ¶ added in v0.0.125
func QuerySingle[TData any](ctx context.Context, q Queryable, sql string, pp PP, mode StructScanMode, sec StructScanSafety) (TData, error)
func ScanAll ¶ added in v0.0.34
func ScanAll[TData any](ctx context.Context, q Queryable, rows *sqlx.Rows, mode StructScanMode, sec StructScanSafety, close bool) ([]TData, error)
func ScanSingle ¶ added in v0.0.34
func ScanSingle[TData any](ctx context.Context, q Queryable, rows *sqlx.Rows, mode StructScanMode, sec StructScanSafety, close bool) (TData, error)
Types ¶
type DB ¶
type DBTypeConverter ¶ added in v0.0.127
type DBTypeConverter interface { ModelTypeString() string DBTypeString() string ModelToDB(v any) (any, error) DBToModel(v any) (any, error) }
func NewDBTypeConverter ¶ added in v0.0.127
func NewDBTypeConverter[TModelData any, TDBData any](todb func(v TModelData) (TDBData, error), tomodel func(v TDBData) (TModelData, error)) DBTypeConverter
type Listener ¶
type Listener interface { PrePing(ctx context.Context) error PreTxBegin(ctx context.Context, txid uint16) error PreTxCommit(txid uint16) error PreTxRollback(txid uint16) error PreQuery(ctx context.Context, txID *uint16, sql *string, params *PP) error PreExec(ctx context.Context, txID *uint16, sql *string, params *PP) error PostPing(result error) PostTxBegin(txid uint16, result error) PostTxCommit(txid uint16, result error) PostTxRollback(txid uint16, result error) PostQuery(txID *uint16, sqlOriginal string, sqlReal string, params PP) PostExec(txID *uint16, sqlOriginal string, sqlReal string, params PP) }
type StructScanMode ¶ added in v0.0.44
type StructScanMode string
const ( SModeFast StructScanMode = "FAST" // Use default sq.Scan, does not work with joined/resolved types and/or custom value converter SModeExtended StructScanMode = "EXTENDED" // Fully featured perhaps (?) a tiny bit slower - default )
type StructScanSafety ¶ added in v0.0.44
type StructScanSafety string
const ( Safe StructScanSafety = "SAFE" // return error for missing fields Unsafe StructScanSafety = "UNSAFE" // ignore missing fields )
type StructScanner ¶ added in v0.0.44
func NewStructScanner ¶ added in v0.0.44
func NewStructScanner(rows *sqlx.Rows, unsafe bool) *StructScanner
func (*StructScanner) Start ¶ added in v0.0.44
func (r *StructScanner) Start(dest any) error
func (*StructScanner) StructScanBase ¶ added in v0.0.44
func (r *StructScanner) StructScanBase(dest any) error
StructScanBase forked from github.com/jmoiron/sqlx@v1.3.5/sqlx.go without (relevant) changes
func (*StructScanner) StructScanExt ¶ added in v0.0.44
func (r *StructScanner) StructScanExt(q Queryable, dest any) error
StructScanExt forked from github.com/jmoiron/sqlx@v1.3.5/sqlx.go does also work with nullabel structs (from LEFT JOIN's) does also work with custom value converters
Click to show internal directories.
Click to hide internal directories.