builder

package
v0.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 29, 2025 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

Package builder provides cross-database query building utilities. This package implements vendor-specific SQL generation and identifier handling for PostgreSQL, Oracle, and other database backends.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type QueryBuilder

type QueryBuilder struct {
	// contains filtered or unexported fields
}

QueryBuilder provides vendor-specific SQL query building. It wraps squirrel.StatementBuilderType with database-specific customizations for placeholder formats, identifier quoting, and function generation.

func NewQueryBuilder

func NewQueryBuilder(vendor dbtypes.Vendor) *QueryBuilder

NewQueryBuilder creates a new query builder for the specified database vendor. It configures placeholder formats and prepares for vendor-specific SQL generation.

func (*QueryBuilder) BuildBooleanValue

func (qb *QueryBuilder) BuildBooleanValue(value bool) any

BuildBooleanValue converts a Go boolean to the appropriate database representation

func (*QueryBuilder) BuildCaseInsensitiveLike

func (qb *QueryBuilder) BuildCaseInsensitiveLike(column, value string) squirrel.Sqlizer

BuildCaseInsensitiveLike creates a case-insensitive LIKE expression. The implementation varies by database vendor.

func (*QueryBuilder) BuildCurrentTimestamp

func (qb *QueryBuilder) BuildCurrentTimestamp() string

BuildCurrentTimestamp returns the current timestamp function for the database vendor

func (*QueryBuilder) BuildUUIDGeneration

func (qb *QueryBuilder) BuildUUIDGeneration() string

BuildUUIDGeneration returns the UUID generation function for the database vendor

func (*QueryBuilder) BuildUpsert

func (qb *QueryBuilder) BuildUpsert(table string, conflictColumns []string, insertColumns, updateColumns map[string]any) (query string, args []any, err error)

BuildUpsert creates an UPSERT/MERGE query using Oracle's MERGE statement. Oracle uses MERGE INTO ... USING ... ON ... WHEN MATCHED ... WHEN NOT MATCHED syntax.

func (*QueryBuilder) Delete

func (qb *QueryBuilder) Delete(table string) squirrel.DeleteBuilder

Delete creates a DELETE query builder for the specified table

func (*QueryBuilder) Eq added in v0.11.0

func (qb *QueryBuilder) Eq(column string, value any) squirrel.Eq

Eq creates an equality condition with proper column quoting for the database vendor

func (*QueryBuilder) EscapeIdentifier

func (qb *QueryBuilder) EscapeIdentifier(identifier string) string

EscapeIdentifier escapes a database identifier (table/column name) according to vendor rules

func (*QueryBuilder) Gt added in v0.11.0

func (qb *QueryBuilder) Gt(column string, value any) squirrel.Gt

Gt creates a greater-than condition with proper column quoting for the database vendor

func (*QueryBuilder) GtOrEq added in v0.11.0

func (qb *QueryBuilder) GtOrEq(column string, value any) squirrel.GtOrEq

GtOrEq creates a greater-than-or-equal condition with proper column quoting for the database vendor

func (*QueryBuilder) Insert

func (qb *QueryBuilder) Insert(table string) squirrel.InsertBuilder

Insert creates an INSERT query builder for the specified table

func (*QueryBuilder) InsertWithColumns

func (qb *QueryBuilder) InsertWithColumns(table string, columns ...string) squirrel.InsertBuilder

InsertWithColumns creates an INSERT query builder with pre-specified columns. It applies vendor-specific column quoting to the provided column list.

func (*QueryBuilder) Lt added in v0.11.0

func (qb *QueryBuilder) Lt(column string, value any) squirrel.Lt

Lt creates a less-than condition with proper column quoting for the database vendor

func (*QueryBuilder) LtOrEq added in v0.11.0

func (qb *QueryBuilder) LtOrEq(column string, value any) squirrel.LtOrEq

LtOrEq creates a less-than-or-equal condition with proper column quoting for the database vendor

func (*QueryBuilder) NotEq added in v0.11.0

func (qb *QueryBuilder) NotEq(column string, value any) squirrel.NotEq

NotEq creates a not-equal condition with proper column quoting for the database vendor

func (*QueryBuilder) Select

func (qb *QueryBuilder) Select(columns ...string) *SelectQueryBuilder

Select creates a SELECT query builder with vendor-specific column quoting. For Oracle, it applies identifier quoting to handle reserved words appropriately.

func (*QueryBuilder) Update

func (qb *QueryBuilder) Update(table string) squirrel.UpdateBuilder

Update creates an UPDATE query builder for the specified table

func (*QueryBuilder) Vendor

func (qb *QueryBuilder) Vendor() string

Vendor returns the database vendor string

type SelectQueryBuilder added in v0.11.0

type SelectQueryBuilder struct {
	// contains filtered or unexported fields
}

SelectQueryBuilder provides a type-safe interface for building SELECT queries with proper identifier quoting and vendor-specific optimizations.

func (*SelectQueryBuilder) CrossJoin added in v0.11.0

func (sqb *SelectQueryBuilder) CrossJoin(join string, rest ...any) dbtypes.SelectQueryBuilder

CrossJoin adds a CROSS JOIN clause to the query

func (*SelectQueryBuilder) From added in v0.11.0

From specifies the table(s) to select from Table names are automatically quoted according to database vendor rules to handle reserved words.

func (*SelectQueryBuilder) GroupBy added in v0.11.0

func (sqb *SelectQueryBuilder) GroupBy(groupBys ...string) dbtypes.SelectQueryBuilder

GroupBy adds a GROUP BY clause to the query Column names are automatically quoted according to database vendor rules to handle reserved words. SQL expressions and functions (like COUNT(*)) are preserved without quoting.

func (*SelectQueryBuilder) Having added in v0.11.0

func (sqb *SelectQueryBuilder) Having(pred any, rest ...any) dbtypes.SelectQueryBuilder

Having adds a HAVING clause to the query

func (*SelectQueryBuilder) InnerJoin added in v0.11.0

func (sqb *SelectQueryBuilder) InnerJoin(join string, rest ...any) dbtypes.SelectQueryBuilder

InnerJoin adds an INNER JOIN clause to the query

func (*SelectQueryBuilder) Join added in v0.11.0

func (sqb *SelectQueryBuilder) Join(join string, rest ...any) dbtypes.SelectQueryBuilder

Join adds a JOIN clause to the query

func (*SelectQueryBuilder) LeftJoin added in v0.11.0

func (sqb *SelectQueryBuilder) LeftJoin(join string, rest ...any) dbtypes.SelectQueryBuilder

LeftJoin adds a LEFT JOIN clause to the query

func (*SelectQueryBuilder) Limit added in v0.11.0

Limit sets the LIMIT for the query

func (*SelectQueryBuilder) Offset added in v0.11.0

Offset sets the OFFSET for the query

func (*SelectQueryBuilder) OrderBy added in v0.11.0

func (sqb *SelectQueryBuilder) OrderBy(orderBys ...string) dbtypes.SelectQueryBuilder

OrderBy adds an ORDER BY clause to the query Column names are automatically quoted according to database vendor rules to handle reserved words. SQL expressions and functions (like COUNT(*)) are preserved without quoting.

func (*SelectQueryBuilder) Paginate added in v0.11.0

func (sqb *SelectQueryBuilder) Paginate(limit, offset uint64) dbtypes.SelectQueryBuilder

Paginate applies pagination to the query with vendor-specific syntax. Use limit=0 for no limit (with offset only), offset=0 for no offset (limit only). Oracle 12c+ will use OFFSET...FETCH syntax, others use LIMIT/OFFSET.

func (*SelectQueryBuilder) RightJoin added in v0.11.0

func (sqb *SelectQueryBuilder) RightJoin(join string, rest ...any) dbtypes.SelectQueryBuilder

RightJoin adds a RIGHT JOIN clause to the query

func (*SelectQueryBuilder) ToSQL added in v0.11.0

func (sqb *SelectQueryBuilder) ToSQL() (sql string, args []any, err error)

ToSQL generates the final SQL query string and arguments. For Oracle, pagination uses OFFSET...FETCH syntax; for others, uses LIMIT/OFFSET.

func (*SelectQueryBuilder) Where added in v0.11.0

func (sqb *SelectQueryBuilder) Where(pred any, rest ...any) dbtypes.SelectQueryBuilder

Where adds a WHERE condition using the raw squirrel interface

func (*SelectQueryBuilder) WhereBetween added in v0.11.0

func (sqb *SelectQueryBuilder) WhereBetween(column string, lowerBound, upperBound any) dbtypes.SelectQueryBuilder

WhereBetween adds a BETWEEN condition to the WHERE clause. The column name is automatically quoted according to database vendor rules.

func (*SelectQueryBuilder) WhereEq added in v0.11.0

func (sqb *SelectQueryBuilder) WhereEq(column string, value any) dbtypes.SelectQueryBuilder

WhereEq adds an equality condition to the WHERE clause. The column name is automatically quoted according to database vendor rules.

func (*SelectQueryBuilder) WhereGt added in v0.11.0

func (sqb *SelectQueryBuilder) WhereGt(column string, value any) dbtypes.SelectQueryBuilder

WhereGt adds a greater-than condition to the WHERE clause. The column name is automatically quoted according to database vendor rules.

func (*SelectQueryBuilder) WhereGte added in v0.11.0

func (sqb *SelectQueryBuilder) WhereGte(column string, value any) dbtypes.SelectQueryBuilder

WhereGte adds a greater-than-or-equal condition to the WHERE clause. The column name is automatically quoted according to database vendor rules.

func (*SelectQueryBuilder) WhereIn added in v0.11.0

func (sqb *SelectQueryBuilder) WhereIn(column string, values any) dbtypes.SelectQueryBuilder

WhereIn adds an IN condition to the WHERE clause. The column name is automatically quoted according to database vendor rules.

func (*SelectQueryBuilder) WhereLike added in v0.11.0

func (sqb *SelectQueryBuilder) WhereLike(column, pattern string) dbtypes.SelectQueryBuilder

WhereLike adds a case-insensitive LIKE condition to the WHERE clause. This uses vendor-specific case-insensitive logic: - PostgreSQL: Uses ILIKE operator - Oracle: Uses UPPER() function on both column and value - Other vendors: Uses standard LIKE

func (*SelectQueryBuilder) WhereLt added in v0.11.0

func (sqb *SelectQueryBuilder) WhereLt(column string, value any) dbtypes.SelectQueryBuilder

WhereLt adds a less-than condition to the WHERE clause. The column name is automatically quoted according to database vendor rules.

func (*SelectQueryBuilder) WhereLte added in v0.11.0

func (sqb *SelectQueryBuilder) WhereLte(column string, value any) dbtypes.SelectQueryBuilder

WhereLte adds a less-than-or-equal condition to the WHERE clause. The column name is automatically quoted according to database vendor rules.

func (*SelectQueryBuilder) WhereNotEq added in v0.11.0

func (sqb *SelectQueryBuilder) WhereNotEq(column string, value any) dbtypes.SelectQueryBuilder

WhereNotEq adds a not-equal condition to the WHERE clause. The column name is automatically quoted according to database vendor rules.

func (*SelectQueryBuilder) WhereNotIn added in v0.11.0

func (sqb *SelectQueryBuilder) WhereNotIn(column string, values any) dbtypes.SelectQueryBuilder

WhereNotIn adds a NOT IN condition to the WHERE clause. The column name is automatically quoted according to database vendor rules.

func (*SelectQueryBuilder) WhereNotNull added in v0.11.0

func (sqb *SelectQueryBuilder) WhereNotNull(column string) dbtypes.SelectQueryBuilder

WhereNotNull adds an IS NOT NULL condition to the WHERE clause. The column name is automatically quoted according to database vendor rules.

func (*SelectQueryBuilder) WhereNull added in v0.11.0

func (sqb *SelectQueryBuilder) WhereNull(column string) dbtypes.SelectQueryBuilder

WhereNull adds an IS NULL condition to the WHERE clause. The column name is automatically quoted according to database vendor rules.

func (*SelectQueryBuilder) WhereRaw added in v0.11.0

func (sqb *SelectQueryBuilder) WhereRaw(condition string, args ...any) dbtypes.SelectQueryBuilder

WhereRaw adds a raw SQL WHERE condition to the query.

WARNING: This method bypasses all identifier quoting and SQL injection protection. It is the caller's responsibility to:

  • Properly quote any identifiers (especially Oracle reserved words like "number", "level", "size")
  • Ensure the SQL fragment is valid for the target database
  • Never concatenate user input directly into the condition string

Use this method ONLY when the type-safe methods cannot express your condition. For Oracle, remember to quote reserved words: WhereRaw(`"number" = ?`, value)

Examples:

sqb.WhereRaw(`"number" = ?`, accountNumber)  // Oracle reserved word
sqb.WhereRaw(`ROWNUM <= ?`, 10)              // Oracle-specific syntax
sqb.WhereRaw(`ST_Distance(location, ?) < ?`, point, radius) // Spatial queries

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL