[chore] Bump database dependencies (#1164)

github.com/uptrace/bun v1.1.8 -> v1.1.9
github.com/uptrace/bun/pgdialect v1.1.8 -> v1.1.9
github.com/uptrace/bun/sqlitedialect v1.1.8 -> v1.1.9
modernc.org/sqlite v1.18.2 -> v1.19.5
This commit is contained in:
tobi 2022-11-28 11:19:39 +01:00 committed by GitHub
commit daf44ac2b7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
529 changed files with 971879 additions and 1370194 deletions

View file

@ -1,3 +1,23 @@
## [1.1.9](https://github.com/uptrace/bun/compare/v1.1.8...v1.1.9) (2022-11-23)
### Bug Fixes
* addng dialect override for append-bool ([#695](https://github.com/uptrace/bun/issues/695)) ([338f2f0](https://github.com/uptrace/bun/commit/338f2f04105ad89e64530db86aeb387e2ad4789e))
* don't call hooks twice for whereExists ([9057857](https://github.com/uptrace/bun/commit/90578578e717f248e4b6eb114c5b495fd8d4ed41))
* don't lock migrations when running Migrate and Rollback ([69a7354](https://github.com/uptrace/bun/commit/69a7354d987ff2ed5338c9ef5f4ce320724299ab))
* **query:** make WhereDeleted compatible with ForceDelete ([299c3fd](https://github.com/uptrace/bun/commit/299c3fd57866aaecd127a8f219c95332898475db)), closes [#673](https://github.com/uptrace/bun/issues/673)
* relation join soft delete SQL generate ([a98f4e9](https://github.com/uptrace/bun/commit/a98f4e9f2bbdbc2b81cd13aa228a1a91eb905ba2))
### Features
* add migrate.Exec ([d368bbe](https://github.com/uptrace/bun/commit/d368bbe52bb1ee3dabf0aada190bf967eec10255))
* **update:** "skipupdate" while bulk ([1a32b2f](https://github.com/uptrace/bun/commit/1a32b2ffbd5bc9a8d8b5978dd0f16c9fb79242ee))
* **zerolog:** added zerolog hook ([9d2267d](https://github.com/uptrace/bun/commit/9d2267d414b47164ab6ceada55bf311ad548a6b0))
## [1.1.8](https://github.com/uptrace/bun/compare/v1.1.7...v1.1.8) (2022-08-29)

View file

@ -6,9 +6,12 @@
[![Chat](https://discordapp.com/api/guilds/752070105847955518/widget.png)](https://discord.gg/rWtp5Aj)
> Bun is brought to you by :star: [**uptrace/uptrace**](https://github.com/uptrace/uptrace). Uptrace
> is an open source and blazingly fast
> [distributed tracing tool](https://get.uptrace.dev/compare/distributed-tracing-tools.html) powered
> by OpenTelemetry and ClickHouse. Give it a star as well!
> is an open-source APM tool that supports distributed tracing, metrics, and logs. You can use it to
> monitor applications and set up automatic alerts to receive notifications via email, Slack,
> Telegram, and others.
>
> See [OpenTelemetry](example/opentelemetry) example which demonstrates how you can use Uptrace to
> monitor Bun.
## Features

View file

@ -2,5 +2,5 @@ package pgdialect
// Version is the current release version.
func Version() string {
return "1.1.8"
return "1.1.9"
}

View file

@ -2,5 +2,5 @@ package sqlitedialect
// Version is the current release version.
func Version() string {
return "1.1.8"
return "1.1.9"
}

View file

@ -5,6 +5,7 @@ import (
"bytes"
"context"
"fmt"
"io"
"io/fs"
"sort"
"strings"
@ -38,83 +39,86 @@ type MigrationFunc func(ctx context.Context, db *bun.DB) error
func NewSQLMigrationFunc(fsys fs.FS, name string) MigrationFunc {
return func(ctx context.Context, db *bun.DB) error {
isTx := strings.HasSuffix(name, ".tx.up.sql") || strings.HasSuffix(name, ".tx.down.sql")
f, err := fsys.Open(name)
if err != nil {
return err
}
scanner := bufio.NewScanner(f)
var queries []string
isTx := strings.HasSuffix(name, ".tx.up.sql") || strings.HasSuffix(name, ".tx.down.sql")
return Exec(ctx, db, f, isTx)
}
}
var query []byte
for scanner.Scan() {
b := scanner.Bytes()
// Exec reads and executes the SQL migration in the f.
func Exec(ctx context.Context, db *bun.DB, f io.Reader, isTx bool) error {
scanner := bufio.NewScanner(f)
var queries []string
const prefix = "--bun:"
if bytes.HasPrefix(b, []byte(prefix)) {
b = b[len(prefix):]
if bytes.Equal(b, []byte("split")) {
queries = append(queries, string(query))
query = query[:0]
continue
}
return fmt.Errorf("bun: unknown directive: %q", b)
var query []byte
for scanner.Scan() {
b := scanner.Bytes()
const prefix = "--bun:"
if bytes.HasPrefix(b, []byte(prefix)) {
b = b[len(prefix):]
if bytes.Equal(b, []byte("split")) {
queries = append(queries, string(query))
query = query[:0]
continue
}
query = append(query, b...)
query = append(query, '\n')
return fmt.Errorf("bun: unknown directive: %q", b)
}
if len(query) > 0 {
queries = append(queries, string(query))
}
if err := scanner.Err(); err != nil {
query = append(query, b...)
query = append(query, '\n')
}
if len(query) > 0 {
queries = append(queries, string(query))
}
if err := scanner.Err(); err != nil {
return err
}
var idb bun.IConn
if isTx {
tx, err := db.BeginTx(ctx, nil)
if err != nil {
return err
}
var idb bun.IConn
if isTx {
tx, err := db.BeginTx(ctx, nil)
if err != nil {
return err
}
idb = tx
} else {
conn, err := db.Conn(ctx)
if err != nil {
return err
}
idb = conn
idb = tx
} else {
conn, err := db.Conn(ctx)
if err != nil {
return err
}
var retErr error
defer func() {
if tx, ok := idb.(bun.Tx); ok {
retErr = tx.Commit()
return
}
if conn, ok := idb.(bun.Conn); ok {
retErr = conn.Close()
return
}
panic("not reached")
}()
for _, q := range queries {
_, err = idb.ExecContext(ctx, q)
if err != nil {
return err
}
}
return retErr
idb = conn
}
var retErr error
defer func() {
if tx, ok := idb.(bun.Tx); ok {
retErr = tx.Commit()
return
}
if conn, ok := idb.(bun.Conn); ok {
retErr = conn.Close()
return
}
panic("not reached")
}()
for _, q := range queries {
if _, err := idb.ExecContext(ctx, q); err != nil {
return err
}
}
return retErr
}
const goTemplate = `package %s
@ -167,7 +171,7 @@ func (ms MigrationSlice) String() string {
if i > 0 {
sb.WriteString(", ")
}
sb.WriteString(ms[i].Name)
sb.WriteString(ms[i].String())
}
return sb.String()

View file

@ -136,11 +136,6 @@ func (m *Migrator) Migrate(ctx context.Context, opts ...MigrationOption) (*Migra
return nil, err
}
if err := m.Lock(ctx); err != nil {
return nil, err
}
defer m.Unlock(ctx) //nolint:errcheck
migrations, lastGroupID, err := m.migrationsWithStatus(ctx)
if err != nil {
return nil, err
@ -188,11 +183,6 @@ func (m *Migrator) Rollback(ctx context.Context, opts ...MigrationOption) (*Migr
return nil, err
}
if err := m.Lock(ctx); err != nil {
return nil, err
}
defer m.Unlock(ctx) //nolint:errcheck
migrations, err := m.MigrationsWithStatus(ctx)
if err != nil {
return nil, err
@ -380,7 +370,7 @@ func (m *Migrator) formattedTableName(db *bun.DB) string {
func (m *Migrator) validate() error {
if len(m.ms) == 0 {
return errors.New("migrate: there are no any migrations")
return errors.New("migrate: there are no migrations")
}
return nil
}

View file

@ -1,6 +1,6 @@
{
"name": "gobun",
"version": "1.1.8",
"version": "1.1.9",
"main": "index.js",
"repository": "git@github.com:uptrace/bun.git",
"author": "Vladimir Mihailenco <vladimir.webdev@gmail.com>",

View file

@ -20,8 +20,9 @@ const (
)
type withQuery struct {
name string
query schema.QueryAppender
name string
query schema.QueryAppender
recursive bool
}
// IConn is a common interface for *sql.DB, *sql.Conn, and *sql.Tx.
@ -158,8 +159,7 @@ func (q *baseQuery) setConn(db IConn) {
}
}
// TODO: rename to setModel
func (q *baseQuery) setTableModel(modeli interface{}) {
func (q *baseQuery) setModel(modeli interface{}) {
model, err := newSingleModel(q.db, modeli)
if err != nil {
q.setErr(err)
@ -238,17 +238,18 @@ func (q *baseQuery) isSoftDelete() bool {
if q.table != nil {
return q.table.SoftDeleteField != nil &&
!q.flags.Has(allWithDeletedFlag) &&
!q.flags.Has(forceDeleteFlag)
(!q.flags.Has(forceDeleteFlag) || q.flags.Has(deletedFlag))
}
return false
}
//------------------------------------------------------------------------------
func (q *baseQuery) addWith(name string, query schema.QueryAppender) {
func (q *baseQuery) addWith(name string, query schema.QueryAppender, recursive bool) {
q.with = append(q.with, withQuery{
name: name,
query: query,
name: name,
query: query,
recursive: recursive,
})
}
@ -263,6 +264,10 @@ func (q *baseQuery) appendWith(fmter schema.Formatter, b []byte) (_ []byte, err
b = append(b, ", "...)
}
if with.recursive {
b = append(b, "RECURSIVE "...)
}
b, err = q.appendCTE(fmter, b, with)
if err != nil {
return nil, err
@ -768,7 +773,7 @@ func (q *whereBaseQuery) addWhereCols(cols []string) {
func (q *whereBaseQuery) mustAppendWhere(
fmter schema.Formatter, b []byte, withAlias bool,
) ([]byte, error) {
if len(q.where) == 0 && q.whereFields == nil {
if len(q.where) == 0 && q.whereFields == nil && !q.flags.Has(deletedFlag) {
err := errors.New("bun: Update and Delete queries require at least one Where")
return nil, err
}

View file

@ -33,7 +33,7 @@ func (q *AddColumnQuery) Conn(db IConn) *AddColumnQuery {
}
func (q *AddColumnQuery) Model(model interface{}) *AddColumnQuery {
q.setTableModel(model)
q.setModel(model)
return q
}

View file

@ -31,7 +31,7 @@ func (q *DropColumnQuery) Conn(db IConn) *DropColumnQuery {
}
func (q *DropColumnQuery) Model(model interface{}) *DropColumnQuery {
q.setTableModel(model)
q.setModel(model)
return q
}

View file

@ -35,7 +35,7 @@ func (q *DeleteQuery) Conn(db IConn) *DeleteQuery {
}
func (q *DeleteQuery) Model(model interface{}) *DeleteQuery {
q.setTableModel(model)
q.setModel(model)
return q
}
@ -45,7 +45,12 @@ func (q *DeleteQuery) Apply(fn func(*DeleteQuery) *DeleteQuery) *DeleteQuery {
}
func (q *DeleteQuery) With(name string, query schema.QueryAppender) *DeleteQuery {
q.addWith(name, query)
q.addWith(name, query, false)
return q
}
func (q *DeleteQuery) WithRecursive(name string, query schema.QueryAppender) *DeleteQuery {
q.addWith(name, query, true)
return q
}
@ -158,7 +163,6 @@ func (q *DeleteQuery) AppendQuery(fmter schema.Formatter, b []byte) (_ []byte, e
return upd.AppendQuery(fmter, b)
}
q = q.WhereDeleted()
withAlias := q.db.features.Has(feature.DeleteTableAlias)
b, err = q.appendWith(fmter, b)

View file

@ -42,7 +42,7 @@ func (q *CreateIndexQuery) Conn(db IConn) *CreateIndexQuery {
}
func (q *CreateIndexQuery) Model(model interface{}) *CreateIndexQuery {
q.setTableModel(model)
q.setModel(model)
return q
}

View file

@ -36,7 +36,7 @@ func (q *DropIndexQuery) Conn(db IConn) *DropIndexQuery {
}
func (q *DropIndexQuery) Model(model interface{}) *DropIndexQuery {
q.setTableModel(model)
q.setModel(model)
return q
}

View file

@ -44,7 +44,7 @@ func (q *InsertQuery) Conn(db IConn) *InsertQuery {
}
func (q *InsertQuery) Model(model interface{}) *InsertQuery {
q.setTableModel(model)
q.setModel(model)
return q
}
@ -54,7 +54,12 @@ func (q *InsertQuery) Apply(fn func(*InsertQuery) *InsertQuery) *InsertQuery {
}
func (q *InsertQuery) With(name string, query schema.QueryAppender) *InsertQuery {
q.addWith(name, query)
q.addWith(name, query, false)
return q
}
func (q *InsertQuery) WithRecursive(name string, query schema.QueryAppender) *InsertQuery {
q.addWith(name, query, true)
return q
}

View file

@ -57,7 +57,7 @@ func (q *SelectQuery) Conn(db IConn) *SelectQuery {
}
func (q *SelectQuery) Model(model interface{}) *SelectQuery {
q.setTableModel(model)
q.setModel(model)
return q
}
@ -67,7 +67,12 @@ func (q *SelectQuery) Apply(fn func(*SelectQuery) *SelectQuery) *SelectQuery {
}
func (q *SelectQuery) With(name string, query schema.QueryAppender) *SelectQuery {
q.addWith(name, query)
q.addWith(name, query, false)
return q
}
func (q *SelectQuery) WithRecursive(name string, query schema.QueryAppender) *SelectQuery {
q.addWith(name, query, true)
return q
}
@ -1029,12 +1034,7 @@ func (q *SelectQuery) whereExists(ctx context.Context) (bool, error) {
}
query := internal.String(queryBytes)
ctx, event := q.db.beforeQuery(ctx, qq, query, nil, query, q.model)
res, err := q.exec(ctx, q, query)
q.db.afterQuery(ctx, event, nil, err)
res, err := q.exec(ctx, qq, query)
if err != nil {
return false, err
}

View file

@ -42,7 +42,7 @@ func (q *CreateTableQuery) Conn(db IConn) *CreateTableQuery {
}
func (q *CreateTableQuery) Model(model interface{}) *CreateTableQuery {
q.setTableModel(model)
q.setModel(model)
return q
}

View file

@ -33,7 +33,7 @@ func (q *DropTableQuery) Conn(db IConn) *DropTableQuery {
}
func (q *DropTableQuery) Model(model interface{}) *DropTableQuery {
q.setTableModel(model)
q.setModel(model)
return q
}

View file

@ -34,7 +34,7 @@ func (q *TruncateTableQuery) Conn(db IConn) *TruncateTableQuery {
}
func (q *TruncateTableQuery) Model(model interface{}) *TruncateTableQuery {
q.setTableModel(model)
q.setModel(model)
return q
}

View file

@ -43,7 +43,7 @@ func (q *UpdateQuery) Conn(db IConn) *UpdateQuery {
}
func (q *UpdateQuery) Model(model interface{}) *UpdateQuery {
q.setTableModel(model)
q.setModel(model)
return q
}
@ -53,7 +53,12 @@ func (q *UpdateQuery) Apply(fn func(*UpdateQuery) *UpdateQuery) *UpdateQuery {
}
func (q *UpdateQuery) With(name string, query schema.QueryAppender) *UpdateQuery {
q.addWith(name, query)
q.addWith(name, query, false)
return q
}
func (q *UpdateQuery) WithRecursive(name string, query schema.QueryAppender) *UpdateQuery {
q.addWith(name, query, true)
return q
}
@ -380,9 +385,14 @@ func (q *UpdateQuery) updateSliceSet(
}
var b []byte
for i, field := range fields {
if i > 0 {
pos := len(b)
for _, field := range fields {
if field.SkipUpdate() {
continue
}
if len(b) != pos {
b = append(b, ", "...)
pos = len(b)
}
if fmter.HasFeature(feature.UpdateMultiTable) {
b = append(b, model.table.SQLAlias...)

View file

@ -28,7 +28,7 @@ func NewValuesQuery(db *DB, model interface{}) *ValuesQuery {
conn: db.DB,
},
}
q.setTableModel(model)
q.setModel(model)
return q
}

View file

@ -3,6 +3,7 @@ package bun
import (
"context"
"reflect"
"time"
"github.com/uptrace/bun/dialect/feature"
"github.com/uptrace/bun/internal"
@ -256,14 +257,27 @@ func (j *relationJoin) appendBaseAlias(fmter schema.Formatter, b []byte) []byte
return append(b, j.BaseModel.Table().SQLAlias...)
}
func (j *relationJoin) appendSoftDelete(b []byte, flags internal.Flag) []byte {
func (j *relationJoin) appendSoftDelete(fmter schema.Formatter, b []byte, flags internal.Flag) []byte {
b = append(b, '.')
b = append(b, j.JoinModel.Table().SoftDeleteField.SQLName...)
if flags.Has(deletedFlag) {
b = append(b, " IS NOT NULL"...)
field := j.JoinModel.Table().SoftDeleteField
b = append(b, field.SQLName...)
if field.IsPtr || field.NullZero {
if flags.Has(deletedFlag) {
b = append(b, " IS NOT NULL"...)
} else {
b = append(b, " IS NULL"...)
}
} else {
b = append(b, " IS NULL"...)
if flags.Has(deletedFlag) {
b = append(b, " != "...)
} else {
b = append(b, " = "...)
}
b = fmter.Dialect().AppendTime(b, time.Time{})
}
return b
}
@ -306,7 +320,7 @@ func (j *relationJoin) appendHasOneJoin(
if isSoftDelete {
b = append(b, " AND "...)
b = j.appendAlias(fmter, b)
b = j.appendSoftDelete(b, q.flags)
b = j.appendSoftDelete(fmter, b, q.flags)
}
return b, nil

View file

@ -183,7 +183,7 @@ func PtrAppender(fn AppenderFunc) AppenderFunc {
}
func AppendBoolValue(fmter Formatter, b []byte, v reflect.Value) []byte {
return dialect.AppendBool(b, v.Bool())
return fmter.Dialect().AppendBool(b, v.Bool())
}
func AppendIntValue(fmter Formatter, b []byte, v reflect.Value) []byte {

View file

@ -29,6 +29,7 @@ type Dialect interface {
AppendString(b []byte, s string) []byte
AppendBytes(b []byte, bs []byte) []byte
AppendJSON(b, jsonb []byte) []byte
AppendBool(b []byte, v bool) []byte
}
//------------------------------------------------------------------------------
@ -126,6 +127,10 @@ func (BaseDialect) AppendJSON(b, jsonb []byte) []byte {
return b
}
func (BaseDialect) AppendBool(b []byte, v bool) []byte {
return dialect.AppendBool(b, v)
}
//------------------------------------------------------------------------------
type nopDialect struct {

View file

@ -2,5 +2,5 @@ package bun
// Version is the current release version.
func Version() string {
return "1.1.8"
return "1.1.9"
}