Documentation ¶
Index ¶
Constants ¶
const ( CommonTableSQLFragment = iota SelectSQLFragment SelectWithLimitSQLFragment FromSQLFragment JoinSQLFragment WhereSQLFragment GroupBySQLFragment HavingSQLFragment CompoundsSQLFragment OrderSQLFragment OrderWithOffsetFetchSQLFragment LimitSQLFragment OffsetSQLFragment ForSQLFragment UpdateBeginSQLFragment SourcesSQLFragment IntoSQLFragment UpdateSQLFragment UpdateFromSQLFragment ReturningSQLFragment InsertBeingSQLFragment InsertSQLFragment DeleteBeginSQLFragment TruncateSQLFragment WindowSQLFragment )
Variables ¶
var ( TrueLiteral = exp.NewLiteralExpression("TRUE") FalseLiteral = exp.NewLiteralExpression("FALSE") )
Functions ¶
func SetTimeLocation ¶
Set the location to use when interpolating time.Time instances. See https://golang.org/pkg/time/#LoadLocation NOTE: This has no effect when using prepared statements.
Types ¶
type DeleteSQLGenerator ¶
type DeleteSQLGenerator interface { Dialect() string Generate(b sb.SQLBuilder, clauses exp.DeleteClauses) }
An adapter interface to be used by a Dataset to generate SQL for a specific dialect. See DefaultAdapter for a concrete implementation and examples.
func NewDeleteSQLGenerator ¶
func NewDeleteSQLGenerator(dialect string, do *SQLDialectOptions) DeleteSQLGenerator
type ExpressionSQLGenerator ¶
type ExpressionSQLGenerator interface { Dialect() string Generate(b sb.SQLBuilder, val interface{}) }
An adapter interface to be used by a Dataset to generate SQL for a specific dialect. See DefaultAdapter for a concrete implementation and examples.
func NewExpressionSQLGenerator ¶
func NewExpressionSQLGenerator(dialect string, do *SQLDialectOptions) ExpressionSQLGenerator
type InsertSQLGenerator ¶
type InsertSQLGenerator interface { Dialect() string Generate(b sb.SQLBuilder, clauses exp.InsertClauses) }
An adapter interface to be used by a Dataset to generate SQL for a specific dialect. See DefaultAdapter for a concrete implementation and examples.
func NewInsertSQLGenerator ¶
func NewInsertSQLGenerator(dialect string, do *SQLDialectOptions) InsertSQLGenerator
type SQLDialectOptions ¶
type SQLDialectOptions struct { // Set to true if the dialect supports ORDER BY expressions in DELETE statements (DEFAULT=false) SupportsOrderByOnDelete bool // Set to true if the dialect supports ORDER BY expressions in UPDATE statements (DEFAULT=false) SupportsOrderByOnUpdate bool // Set to true if the dialect supports LIMIT expressions in DELETE statements (DEFAULT=false) SupportsLimitOnDelete bool // Set to true if the dialect supports LIMIT expressions in UPDATE statements (DEFAULT=false) SupportsLimitOnUpdate bool // Set to true if the dialect supports RETURN expressions (DEFAULT=true) SupportsReturn bool // Set to true if the dialect supports Conflict Target (DEFAULT=true) SupportsConflictTarget bool // Set to true if the dialect supports Conflict Target (DEFAULT=true) SupportsConflictUpdateWhere bool // Set to true if the dialect supports Insert Ignore syntax (DEFAULT=false) SupportsInsertIgnoreSyntax bool // Set to true if the dialect supports Common Table Expressions (DEFAULT=true) SupportsWithCTE bool // Set to true if the dialect supports recursive Common Table Expressions (DEFAULT=true) SupportsWithCTERecursive bool // Set to true if multiple tables are supported in UPDATE statement. (DEFAULT=true) SupportsMultipleUpdateTables bool // Set to true if DISTINCT ON is supported (DEFAULT=true) SupportsDistinctOn bool // Set to true if LATERAL queries are supported (DEFAULT=true) SupportsLateral bool // Set to false if the dialect does not require expressions to be wrapped in parens (DEFAULT=true) WrapCompoundsInParens bool // Set to true if window function are supported in SELECT statement. (DEFAULT=true) SupportsWindowFunction bool // Set to true if the dialect requires join tables in UPDATE to be in a FROM clause (DEFAULT=true). UseFromClauseForMultipleUpdateTables bool // Surround LIMIT parameter with parentheses, like in MSSQL: SELECT TOP (10) ... SurroundLimitWithParentheses bool // The UPDATE fragment to use when generating sql. (DEFAULT=[]byte("UPDATE")) UpdateClause []byte // The INSERT fragment to use when generating sql. (DEFAULT=[]byte("INSERT INTO")) InsertClause []byte // The INSERT IGNORE INTO fragment to use when generating sql. (DEFAULT=[]byte("INSERT IGNORE INTO")) InsertIgnoreClause []byte // The SELECT fragment to use when generating sql. (DEFAULT=[]byte("SELECT")) SelectClause []byte // The DELETE fragment to use when generating sql. (DEFAULT=[]byte("DELETE")) DeleteClause []byte // The TRUNCATE fragment to use when generating sql. (DEFAULT=[]byte("TRUNCATE")) TruncateClause []byte // The WITH fragment to use when generating sql. (DEFAULT=[]byte("WITH ")) WithFragment []byte // The RECURSIVE fragment to use when generating sql (after WITH). (DEFAULT=[]byte("RECURSIVE ")) RecursiveFragment []byte // The CASCADE fragment to use when generating sql. (DEFAULT=[]byte(" CASCADE")) CascadeFragment []byte // The RESTRICT fragment to use when generating sql. (DEFAULT=[]byte(" RESTRICT")) RestrictFragment []byte // The SQL fragment to use when generating insert sql and using // DEFAULT VALUES (e.g. postgres="DEFAULT VALUES", mysql="", sqlite3=""). (DEFAULT=[]byte(" DEFAULT VALUES")) DefaultValuesFragment []byte // The SQL fragment to use when generating insert sql and listing columns using a VALUES clause // (DEFAULT=[]byte(" VALUES ")) ValuesFragment []byte // The SQL fragment to use when generating truncate sql and using the IDENTITY clause // (DEFAULT=[]byte(" IDENTITY")) IdentityFragment []byte // The SQL fragment to use when generating update sql and using the SET clause (DEFAULT=[]byte(" SET ")) SetFragment []byte // The SQL DISTINCT keyword (DEFAULT=[]byte(" DISTINCT ")) DistinctFragment []byte // The SQL RETURNING clause (DEFAULT=[]byte(" RETURNING ")) ReturningFragment []byte // The SQL FROM clause fragment (DEFAULT=[]byte(" FROM")) FromFragment []byte // The SQL USING join clause fragment (DEFAULT=[]byte(" USING ")) UsingFragment []byte // The SQL ON join clause fragment (DEFAULT=[]byte(" ON ")) OnFragment []byte // The SQL WHERE clause fragment (DEFAULT=[]byte(" WHERE ")) WhereFragment []byte // The SQL GROUP BY clause fragment(DEFAULT=[]byte(" GROUP BY ")) GroupByFragment []byte // The SQL HAVING clause fragment(DEFAULT=[]byte(" HAVING ")) HavingFragment []byte // The SQL WINDOW clause fragment(DEFAULT=[]byte(" WINDOW ")) WindowFragment []byte // The SQL WINDOW clause PARTITION BY fragment(DEFAULT=[]byte("PARTITION BY ")) WindowPartitionByFragment []byte // The SQL WINDOW clause ORDER BY fragment(DEFAULT=[]byte("ORDER BY ")) WindowOrderByFragment []byte // The SQL WINDOW clause OVER fragment(DEFAULT=[]byte(" OVER ")) WindowOverFragment []byte // The SQL ORDER BY clause fragment(DEFAULT=[]byte(" ORDER BY ")) OrderByFragment []byte // The SQL FETCH fragment(DEFAULT=[]byte(" ")) FetchFragment []byte // The SQL LIMIT BY clause fragment(DEFAULT=[]byte(" LIMIT ")) LimitFragment []byte // The SQL OFFSET BY clause fragment(DEFAULT=[]byte(" OFFSET ")) OffsetFragment []byte // The SQL FOR UPDATE fragment(DEFAULT=[]byte(" FOR UPDATE ")) ForUpdateFragment []byte // The SQL FOR NO KEY UPDATE fragment(DEFAULT=[]byte(" FOR NO KEY UPDATE ")) ForNoKeyUpdateFragment []byte ForShareFragment []byte ForKeyShareFragment []byte // The SQL NOWAIT fragment(DEFAULT=[]byte("NOWAIT")) NowaitFragment []byte // The SQL SKIP LOCKED fragment(DEFAULT=[]byte("SKIP LOCKED")) SkipLockedFragment []byte // The SQL AS fragment when aliasing an Expression(DEFAULT=[]byte(" AS ")) AsFragment []byte // The SQL LATERAL fragment used for LATERAL joins LateralFragment []byte // The quote rune to use when quoting identifiers(DEFAULT='"') QuoteRune rune // The NULL literal to use when interpolating nulls values (DEFAULT=[]byte("NULL")) Null []byte // The TRUE literal to use when interpolating bool true values (DEFAULT=[]byte("TRUE")) True []byte // The FALSE literal to use when interpolating bool false values (DEFAULT=[]byte("FALSE")) False []byte // The ASC fragment when specifying column order (DEFAULT=[]byte(" ASC")) AscFragment []byte // The DESC fragment when specifying column order (DEFAULT=[]byte(" DESC")) DescFragment []byte // The NULLS FIRST fragment when specifying column order (DEFAULT=[]byte(" NULLS FIRST")) NullsFirstFragment []byte // The NULLS LAST fragment when specifying column order (DEFAULT=[]byte(" NULLS LAST")) NullsLastFragment []byte // The AND keyword used when joining ExpressionLists (DEFAULT=[]byte(" AND ")) AndFragment []byte // The OR keyword used when joining ExpressionLists (DEFAULT=[]byte(" OR ")) OrFragment []byte // The UNION keyword used when creating compound statements (DEFAULT=[]byte(" UNION ")) UnionFragment []byte // The UNION ALL keyword used when creating compound statements (DEFAULT=[]byte(" UNION ALL ")) UnionAllFragment []byte // The INTERSECT keyword used when creating compound statements (DEFAULT=[]byte(" INTERSECT ")) IntersectFragment []byte // The INTERSECT ALL keyword used when creating compound statements (DEFAULT=[]byte(" INTERSECT ALL ")) IntersectAllFragment []byte // The CAST keyword to use when casting a value (DEFAULT=[]byte("CAST")) CastFragment []byte // The CASE keyword to use when when creating a CASE statement (DEFAULT=[]byte("CASE ")) CaseFragment []byte // The WHEN keyword to use when when creating a CASE statement (DEFAULT=[]byte(" WHEN ")) WhenFragment []byte // The THEN keyword to use when when creating a CASE statement (DEFAULT=[]byte(" THEN ")) ThenFragment []byte // The ELSE keyword to use when when creating a CASE statement (DEFAULT=[]byte(" ELSE ")) ElseFragment []byte // The End keyword to use when when creating a CASE statement (DEFAULT=[]byte(" END")) EndFragment []byte // The quote rune to use when quoting string literals (DEFAULT='\”) StringQuote rune // The operator to use when setting values in an update statement (DEFAULT='=') SetOperatorRune rune // The placeholder fragment to use when generating a non interpolated statement (DEFAULT=[]byte"?") PlaceHolderFragment []byte // Empty string (DEFAULT="") EmptyString string // Comma rune (DEFAULT=',') CommaRune rune // Space rune (DEFAULT=' ') SpaceRune rune // Left paren rune (DEFAULT='(') LeftParenRune rune // Right paren rune (DEFAULT=')') RightParenRune rune // Star rune (DEFAULT='*') StarRune rune // Period rune (DEFAULT='.') PeriodRune rune // Set to true to include positional argument numbers when creating a prepared statement (Default=false) IncludePlaceholderNum bool // The time format to use when serializing time.Time (DEFAULT=time.RFC3339Nano) TimeFormat string // A map used to look up BooleanOperations and their SQL equivalents // (Default= map[exp.BooleanOperation][]byte{ // exp.EqOp: []byte("="), // exp.NeqOp: []byte("!="), // exp.GtOp: []byte(">"), // exp.GteOp: []byte(">="), // exp.LtOp: []byte("<"), // exp.LteOp: []byte("<="), // exp.InOp: []byte("IN"), // exp.NotInOp: []byte("NOT IN"), // exp.IsOp: []byte("IS"), // exp.IsNotOp: []byte("IS NOT"), // exp.LikeOp: []byte("LIKE"), // exp.NotLikeOp: []byte("NOT LIKE"), // exp.ILikeOp: []byte("ILIKE"), // exp.NotILikeOp: []byte("NOT ILIKE"), // exp.RegexpLikeOp: []byte("~"), // exp.RegexpNotLikeOp: []byte("!~"), // exp.RegexpILikeOp: []byte("~*"), // exp.RegexpNotILikeOp: []byte("!~*"), // }) BooleanOperatorLookup map[exp.BooleanOperation][]byte // A map used to look up RangeOperations and their SQL equivalents // (Default=map[exp.RangeOperation][]byte{ // exp.BetweenOp: []byte("BETWEEN"), // exp.NotBetweenOp: []byte("NOT BETWEEN"), // }) RangeOperatorLookup map[exp.RangeOperation][]byte // A map used to look up JoinTypes and their SQL equivalents // (Default= map[exp.JoinType][]byte{ // exp.InnerJoinType: []byte(" INNER JOIN "), // exp.FullOuterJoinType: []byte(" FULL OUTER JOIN "), // exp.RightOuterJoinType: []byte(" RIGHT OUTER JOIN "), // exp.LeftOuterJoinType: []byte(" LEFT OUTER JOIN "), // exp.FullJoinType: []byte(" FULL JOIN "), // exp.RightJoinType: []byte(" RIGHT JOIN "), // exp.LeftJoinType: []byte(" LEFT JOIN "), // exp.NaturalJoinType: []byte(" NATURAL JOIN "), // exp.NaturalLeftJoinType: []byte(" NATURAL LEFT JOIN "), // exp.NaturalRightJoinType: []byte(" NATURAL RIGHT JOIN "), // exp.NaturalFullJoinType: []byte(" NATURAL FULL JOIN "), // exp.CrossJoinType: []byte(" CROSS JOIN "), // }) JoinTypeLookup map[exp.JoinType][]byte // Whether or not to use literal TRUE or FALSE for IS statements (e.g. IS TRUE or IS 0) UseLiteralIsBools bool // EscapedRunes is a map of a rune and the corresponding escape sequence in bytes. Used when escaping text // types. // (Default= map[rune][]byte{ // '\”: []byte("”"), // }) EscapedRunes map[rune][]byte // The SQL fragment to use for CONFLICT (Default=[]byte(" ON CONFLICT")) ConflictFragment []byte // The SQL fragment to use for CONFLICT DO NOTHING (Default=[]byte(" DO NOTHING")) ConflictDoNothingFragment []byte // The SQL fragment to use for CONFLICT DO UPDATE (Default=[]byte(" DO UPDATE SET")) ConflictDoUpdateFragment []byte // The order of SQL fragments when creating a SELECT statement // (Default=[]SQLFragmentType{ // CommonTableSQLFragment, // SelectSQLFragment, // FromSQLFragment, // JoinSQLFragment, // WhereSQLFragment, // GroupBySQLFragment, // HavingSQLFragment, // CompoundsSQLFragment, // OrderSQLFragment, // LimitSQLFragment, // OffsetSQLFragment, // ForSQLFragment, // }) SelectSQLOrder []SQLFragmentType // The order of SQL fragments when creating an UPDATE statement // (Default=[]SQLFragmentType{ // CommonTableSQLFragment, // UpdateBeginSQLFragment, // SourcesSQLFragment, // UpdateSQLFragment, // WhereSQLFragment, // OrderSQLFragment, // LimitSQLFragment, // ReturningSQLFragment, // }) UpdateSQLOrder []SQLFragmentType // The order of SQL fragments when creating an INSERT statement // (Default=[]SQLFragmentType{ // CommonTableSQLFragment, // InsertBeingSQLFragment, // SourcesSQLFragment, // InsertSQLFragment, // ReturningSQLFragment, // }) InsertSQLOrder []SQLFragmentType // The order of SQL fragments when creating a DELETE statement // (Default=[]SQLFragmentType{ // CommonTableSQLFragment, // DeleteBeginSQLFragment, // FromSQLFragment, // WhereSQLFragment, // OrderSQLFragment, // LimitSQLFragment, // ReturningSQLFragment, // }) DeleteSQLOrder []SQLFragmentType // The order of SQL fragments when creating a TRUNCATE statement // (Default=[]SQLFragmentType{ // TruncateSQLFragment, // }) TruncateSQLOrder []SQLFragmentType }
func DefaultDialectOptions ¶
func DefaultDialectOptions() *SQLDialectOptions
type SQLFragmentType ¶
type SQLFragmentType int
func (SQLFragmentType) String ¶
func (sf SQLFragmentType) String() string
nolint:gocyclo // simple type to string conversion
type SelectSQLGenerator ¶
type SelectSQLGenerator interface { Dialect() string Generate(b sb.SQLBuilder, clauses exp.SelectClauses) }
An adapter interface to be used by a Dataset to generate SQL for a specific dialect. See DefaultAdapter for a concrete implementation and examples.
func NewSelectSQLGenerator ¶
func NewSelectSQLGenerator(dialect string, do *SQLDialectOptions) SelectSQLGenerator
type TruncateSQLGenerator ¶
type TruncateSQLGenerator interface { Dialect() string Generate(b sb.SQLBuilder, clauses exp.TruncateClauses) }
An adapter interface to be used by a Dataset to generate SQL for a specific dialect. See DefaultAdapter for a concrete implementation and examples.
func NewTruncateSQLGenerator ¶
func NewTruncateSQLGenerator(dialect string, do *SQLDialectOptions) TruncateSQLGenerator
type UpdateSQLGenerator ¶
type UpdateSQLGenerator interface { Dialect() string Generate(b sb.SQLBuilder, clauses exp.UpdateClauses) }
An adapter interface to be used by a Dataset to generate SQL for a specific dialect. See DefaultAdapter for a concrete implementation and examples.
func NewUpdateSQLGenerator ¶
func NewUpdateSQLGenerator(dialect string, do *SQLDialectOptions) UpdateSQLGenerator