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 ¶
- type QueryBuilder
- func (qb *QueryBuilder) BuildBooleanValue(value bool) any
- func (qb *QueryBuilder) BuildCaseInsensitiveLike(column, value string) squirrel.Sqlizer
- func (qb *QueryBuilder) BuildCurrentTimestamp() string
- func (qb *QueryBuilder) BuildUUIDGeneration() string
- func (qb *QueryBuilder) BuildUpsert(table string, conflictColumns []string, ...) (query string, args []any, err error)
- func (qb *QueryBuilder) Delete(table string) squirrel.DeleteBuilder
- func (qb *QueryBuilder) Eq(column string, value any) squirrel.Eq
- func (qb *QueryBuilder) EscapeIdentifier(identifier string) string
- func (qb *QueryBuilder) Gt(column string, value any) squirrel.Gt
- func (qb *QueryBuilder) GtOrEq(column string, value any) squirrel.GtOrEq
- func (qb *QueryBuilder) Insert(table string) squirrel.InsertBuilder
- func (qb *QueryBuilder) InsertWithColumns(table string, columns ...string) squirrel.InsertBuilder
- func (qb *QueryBuilder) Lt(column string, value any) squirrel.Lt
- func (qb *QueryBuilder) LtOrEq(column string, value any) squirrel.LtOrEq
- func (qb *QueryBuilder) NotEq(column string, value any) squirrel.NotEq
- func (qb *QueryBuilder) Select(columns ...string) *SelectQueryBuilder
- func (qb *QueryBuilder) Update(table string) squirrel.UpdateBuilder
- func (qb *QueryBuilder) Vendor() string
- type SelectQueryBuilder
- func (sqb *SelectQueryBuilder) CrossJoin(join string, rest ...any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) From(from ...string) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) GroupBy(groupBys ...string) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) Having(pred any, rest ...any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) InnerJoin(join string, rest ...any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) Join(join string, rest ...any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) LeftJoin(join string, rest ...any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) Limit(limit uint64) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) Offset(offset uint64) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) OrderBy(orderBys ...string) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) Paginate(limit, offset uint64) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) RightJoin(join string, rest ...any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) ToSQL() (sql string, args []any, err error)
- func (sqb *SelectQueryBuilder) Where(pred any, rest ...any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) WhereBetween(column string, lowerBound, upperBound any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) WhereEq(column string, value any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) WhereGt(column string, value any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) WhereGte(column string, value any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) WhereIn(column string, values any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) WhereLike(column, pattern string) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) WhereLt(column string, value any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) WhereLte(column string, value any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) WhereNotEq(column string, value any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) WhereNotIn(column string, values any) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) WhereNotNull(column string) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) WhereNull(column string) dbtypes.SelectQueryBuilder
- func (sqb *SelectQueryBuilder) WhereRaw(condition string, args ...any) dbtypes.SelectQueryBuilder
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
func (sqb *SelectQueryBuilder) From(from ...string) dbtypes.SelectQueryBuilder
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
func (sqb *SelectQueryBuilder) Limit(limit uint64) dbtypes.SelectQueryBuilder
Limit sets the LIMIT for the query
func (*SelectQueryBuilder) Offset ¶ added in v0.11.0
func (sqb *SelectQueryBuilder) Offset(offset uint64) dbtypes.SelectQueryBuilder
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