Documentation
¶
Overview ¶
Package visitors provides SQL dialect generators that walk the AST.
Index ¶
- func RenderWindowDef(v nodes.Visitor, w *nodes.WindowDefinition) string
- type DotVisitor
- func (dv *DotVisitor) AddPluginCluster(name, color string, nodeIDs []string)
- func (dv *DotVisitor) NodeCount() int
- func (dv *DotVisitor) NodeIDsSince(start int) []string
- func (dv *DotVisitor) SetProvenance(p *PluginProvenance)
- func (dv *DotVisitor) ToDot() string
- func (dv *DotVisitor) VisitAggregate(n *nodes.AggregateNode) string
- func (dv *DotVisitor) VisitAlias(n *nodes.AliasNode) string
- func (dv *DotVisitor) VisitAnd(n *nodes.AndNode) string
- func (dv *DotVisitor) VisitAssignment(n *nodes.AssignmentNode) string
- func (dv *DotVisitor) VisitAttribute(n *nodes.Attribute) string
- func (dv *DotVisitor) VisitBetween(n *nodes.BetweenNode) string
- func (dv *DotVisitor) VisitBindParam(n *nodes.BindParamNode) string
- func (dv *DotVisitor) VisitCTE(n *nodes.CTENode) string
- func (dv *DotVisitor) VisitCase(n *nodes.CaseNode) string
- func (dv *DotVisitor) VisitCasted(n *nodes.CastedNode) string
- func (dv *DotVisitor) VisitComparison(n *nodes.ComparisonNode) string
- func (dv *DotVisitor) VisitDeleteStatement(n *nodes.DeleteStatement) string
- func (dv *DotVisitor) VisitExists(n *nodes.ExistsNode) string
- func (dv *DotVisitor) VisitExtract(n *nodes.ExtractNode) string
- func (dv *DotVisitor) VisitGrouping(n *nodes.GroupingNode) string
- func (dv *DotVisitor) VisitGroupingSet(n *nodes.GroupingSetNode) string
- func (dv *DotVisitor) VisitIn(n *nodes.InNode) string
- func (dv *DotVisitor) VisitInfix(n *nodes.InfixNode) string
- func (dv *DotVisitor) VisitInsertStatement(n *nodes.InsertStatement) string
- func (dv *DotVisitor) VisitJoin(n *nodes.JoinNode) string
- func (dv *DotVisitor) VisitLiteral(n *nodes.LiteralNode) string
- func (dv *DotVisitor) VisitNamedFunction(n *nodes.NamedFunctionNode) string
- func (dv *DotVisitor) VisitNot(n *nodes.NotNode) string
- func (dv *DotVisitor) VisitOnConflict(n *nodes.OnConflictNode) string
- func (dv *DotVisitor) VisitOr(n *nodes.OrNode) string
- func (dv *DotVisitor) VisitOrdering(n *nodes.OrderingNode) string
- func (dv *DotVisitor) VisitOver(n *nodes.OverNode) string
- func (dv *DotVisitor) VisitSelectCore(n *nodes.SelectCore) string
- func (dv *DotVisitor) VisitSetOperation(n *nodes.SetOperationNode) string
- func (dv *DotVisitor) VisitSqlLiteral(n *nodes.SqlLiteral) string
- func (dv *DotVisitor) VisitStar(n *nodes.StarNode) string
- func (dv *DotVisitor) VisitTable(n *nodes.Table) string
- func (dv *DotVisitor) VisitTableAlias(n *nodes.TableAlias) string
- func (dv *DotVisitor) VisitUnary(n *nodes.UnaryNode) string
- func (dv *DotVisitor) VisitUnaryMath(n *nodes.UnaryMathNode) string
- func (dv *DotVisitor) VisitUpdateStatement(n *nodes.UpdateStatement) string
- func (dv *DotVisitor) VisitWindowFunction(n *nodes.WindowFuncNode) string
- type FormattingVisitor
- func (f *FormattingVisitor) Params() []any
- func (f *FormattingVisitor) Reset()
- func (f *FormattingVisitor) VisitAggregate(node *nodes.AggregateNode) string
- func (f *FormattingVisitor) VisitAlias(node *nodes.AliasNode) string
- func (f *FormattingVisitor) VisitAnd(node *nodes.AndNode) string
- func (f *FormattingVisitor) VisitAssignment(node *nodes.AssignmentNode) string
- func (f *FormattingVisitor) VisitAttribute(node *nodes.Attribute) string
- func (f *FormattingVisitor) VisitBetween(node *nodes.BetweenNode) string
- func (f *FormattingVisitor) VisitBindParam(node *nodes.BindParamNode) string
- func (f *FormattingVisitor) VisitCTE(node *nodes.CTENode) string
- func (f *FormattingVisitor) VisitCase(node *nodes.CaseNode) string
- func (f *FormattingVisitor) VisitCasted(node *nodes.CastedNode) string
- func (f *FormattingVisitor) VisitComparison(node *nodes.ComparisonNode) string
- func (f *FormattingVisitor) VisitDeleteStatement(n *nodes.DeleteStatement) string
- func (f *FormattingVisitor) VisitExists(node *nodes.ExistsNode) string
- func (f *FormattingVisitor) VisitExtract(node *nodes.ExtractNode) string
- func (f *FormattingVisitor) VisitGrouping(node *nodes.GroupingNode) string
- func (f *FormattingVisitor) VisitGroupingSet(node *nodes.GroupingSetNode) string
- func (f *FormattingVisitor) VisitIn(node *nodes.InNode) string
- func (f *FormattingVisitor) VisitInfix(node *nodes.InfixNode) string
- func (f *FormattingVisitor) VisitInsertStatement(n *nodes.InsertStatement) string
- func (f *FormattingVisitor) VisitJoin(node *nodes.JoinNode) string
- func (f *FormattingVisitor) VisitLiteral(node *nodes.LiteralNode) string
- func (f *FormattingVisitor) VisitNamedFunction(node *nodes.NamedFunctionNode) string
- func (f *FormattingVisitor) VisitNot(node *nodes.NotNode) string
- func (f *FormattingVisitor) VisitOnConflict(node *nodes.OnConflictNode) string
- func (f *FormattingVisitor) VisitOr(node *nodes.OrNode) string
- func (f *FormattingVisitor) VisitOrdering(node *nodes.OrderingNode) string
- func (f *FormattingVisitor) VisitOver(node *nodes.OverNode) string
- func (f *FormattingVisitor) VisitSelectCore(node *nodes.SelectCore) string
- func (f *FormattingVisitor) VisitSetOperation(n *nodes.SetOperationNode) string
- func (f *FormattingVisitor) VisitSqlLiteral(node *nodes.SqlLiteral) string
- func (f *FormattingVisitor) VisitStar(node *nodes.StarNode) string
- func (f *FormattingVisitor) VisitTable(node *nodes.Table) string
- func (f *FormattingVisitor) VisitTableAlias(node *nodes.TableAlias) string
- func (f *FormattingVisitor) VisitUnary(node *nodes.UnaryNode) string
- func (f *FormattingVisitor) VisitUnaryMath(node *nodes.UnaryMathNode) string
- func (f *FormattingVisitor) VisitUpdateStatement(n *nodes.UpdateStatement) string
- func (f *FormattingVisitor) VisitWindowFunction(node *nodes.WindowFuncNode) string
- type MySQLVisitor
- func (b MySQLVisitor) Params() []any
- func (b MySQLVisitor) Reset()
- func (b MySQLVisitor) VisitAggregate(n *nodes.AggregateNode) string
- func (b MySQLVisitor) VisitAlias(n *nodes.AliasNode) string
- func (b MySQLVisitor) VisitAnd(n *nodes.AndNode) string
- func (b MySQLVisitor) VisitAssignment(n *nodes.AssignmentNode) string
- func (b MySQLVisitor) VisitAttribute(n *nodes.Attribute) string
- func (b MySQLVisitor) VisitBetween(n *nodes.BetweenNode) string
- func (b MySQLVisitor) VisitBindParam(n *nodes.BindParamNode) string
- func (b MySQLVisitor) VisitCTE(n *nodes.CTENode) string
- func (b MySQLVisitor) VisitCase(n *nodes.CaseNode) string
- func (b MySQLVisitor) VisitCasted(n *nodes.CastedNode) string
- func (v *MySQLVisitor) VisitComparison(n *nodes.ComparisonNode) string
- func (b MySQLVisitor) VisitDeleteStatement(n *nodes.DeleteStatement) string
- func (b MySQLVisitor) VisitExists(n *nodes.ExistsNode) string
- func (b MySQLVisitor) VisitExtract(n *nodes.ExtractNode) string
- func (b MySQLVisitor) VisitGrouping(n *nodes.GroupingNode) string
- func (b MySQLVisitor) VisitGroupingSet(n *nodes.GroupingSetNode) string
- func (b MySQLVisitor) VisitIn(n *nodes.InNode) string
- func (b MySQLVisitor) VisitInfix(n *nodes.InfixNode) string
- func (b MySQLVisitor) VisitInsertStatement(n *nodes.InsertStatement) string
- func (b MySQLVisitor) VisitJoin(n *nodes.JoinNode) string
- func (b MySQLVisitor) VisitLiteral(n *nodes.LiteralNode) string
- func (b MySQLVisitor) VisitNamedFunction(n *nodes.NamedFunctionNode) string
- func (b MySQLVisitor) VisitNot(n *nodes.NotNode) string
- func (b MySQLVisitor) VisitOnConflict(n *nodes.OnConflictNode) string
- func (b MySQLVisitor) VisitOr(n *nodes.OrNode) string
- func (b MySQLVisitor) VisitOrdering(n *nodes.OrderingNode) string
- func (b MySQLVisitor) VisitOver(n *nodes.OverNode) string
- func (b MySQLVisitor) VisitSelectCore(n *nodes.SelectCore) string
- func (b MySQLVisitor) VisitSetOperation(n *nodes.SetOperationNode) string
- func (b MySQLVisitor) VisitSqlLiteral(n *nodes.SqlLiteral) string
- func (b MySQLVisitor) VisitStar(n *nodes.StarNode) string
- func (b MySQLVisitor) VisitTable(n *nodes.Table) string
- func (b MySQLVisitor) VisitTableAlias(n *nodes.TableAlias) string
- func (b MySQLVisitor) VisitUnary(n *nodes.UnaryNode) string
- func (b MySQLVisitor) VisitUnaryMath(n *nodes.UnaryMathNode) string
- func (b MySQLVisitor) VisitUpdateStatement(n *nodes.UpdateStatement) string
- func (b MySQLVisitor) VisitWindowFunction(n *nodes.WindowFuncNode) string
- type Option
- type PluginProvenance
- type PostgresVisitor
- func (b PostgresVisitor) Params() []any
- func (b PostgresVisitor) Reset()
- func (b PostgresVisitor) VisitAggregate(n *nodes.AggregateNode) string
- func (b PostgresVisitor) VisitAlias(n *nodes.AliasNode) string
- func (b PostgresVisitor) VisitAnd(n *nodes.AndNode) string
- func (b PostgresVisitor) VisitAssignment(n *nodes.AssignmentNode) string
- func (b PostgresVisitor) VisitAttribute(n *nodes.Attribute) string
- func (b PostgresVisitor) VisitBetween(n *nodes.BetweenNode) string
- func (b PostgresVisitor) VisitBindParam(n *nodes.BindParamNode) string
- func (b PostgresVisitor) VisitCTE(n *nodes.CTENode) string
- func (b PostgresVisitor) VisitCase(n *nodes.CaseNode) string
- func (b PostgresVisitor) VisitCasted(n *nodes.CastedNode) string
- func (b PostgresVisitor) VisitComparison(n *nodes.ComparisonNode) string
- func (b PostgresVisitor) VisitDeleteStatement(n *nodes.DeleteStatement) string
- func (b PostgresVisitor) VisitExists(n *nodes.ExistsNode) string
- func (b PostgresVisitor) VisitExtract(n *nodes.ExtractNode) string
- func (b PostgresVisitor) VisitGrouping(n *nodes.GroupingNode) string
- func (b PostgresVisitor) VisitGroupingSet(n *nodes.GroupingSetNode) string
- func (b PostgresVisitor) VisitIn(n *nodes.InNode) string
- func (b PostgresVisitor) VisitInfix(n *nodes.InfixNode) string
- func (b PostgresVisitor) VisitInsertStatement(n *nodes.InsertStatement) string
- func (b PostgresVisitor) VisitJoin(n *nodes.JoinNode) string
- func (b PostgresVisitor) VisitLiteral(n *nodes.LiteralNode) string
- func (b PostgresVisitor) VisitNamedFunction(n *nodes.NamedFunctionNode) string
- func (b PostgresVisitor) VisitNot(n *nodes.NotNode) string
- func (b PostgresVisitor) VisitOnConflict(n *nodes.OnConflictNode) string
- func (b PostgresVisitor) VisitOr(n *nodes.OrNode) string
- func (b PostgresVisitor) VisitOrdering(n *nodes.OrderingNode) string
- func (b PostgresVisitor) VisitOver(n *nodes.OverNode) string
- func (b PostgresVisitor) VisitSelectCore(n *nodes.SelectCore) string
- func (b PostgresVisitor) VisitSetOperation(n *nodes.SetOperationNode) string
- func (b PostgresVisitor) VisitSqlLiteral(n *nodes.SqlLiteral) string
- func (b PostgresVisitor) VisitStar(n *nodes.StarNode) string
- func (b PostgresVisitor) VisitTable(n *nodes.Table) string
- func (b PostgresVisitor) VisitTableAlias(n *nodes.TableAlias) string
- func (b PostgresVisitor) VisitUnary(n *nodes.UnaryNode) string
- func (b PostgresVisitor) VisitUnaryMath(n *nodes.UnaryMathNode) string
- func (b PostgresVisitor) VisitUpdateStatement(n *nodes.UpdateStatement) string
- func (b PostgresVisitor) VisitWindowFunction(n *nodes.WindowFuncNode) string
- type SQLiteVisitor
- func (b SQLiteVisitor) Params() []any
- func (b SQLiteVisitor) Reset()
- func (b SQLiteVisitor) VisitAggregate(n *nodes.AggregateNode) string
- func (b SQLiteVisitor) VisitAlias(n *nodes.AliasNode) string
- func (b SQLiteVisitor) VisitAnd(n *nodes.AndNode) string
- func (b SQLiteVisitor) VisitAssignment(n *nodes.AssignmentNode) string
- func (b SQLiteVisitor) VisitAttribute(n *nodes.Attribute) string
- func (b SQLiteVisitor) VisitBetween(n *nodes.BetweenNode) string
- func (b SQLiteVisitor) VisitBindParam(n *nodes.BindParamNode) string
- func (b SQLiteVisitor) VisitCTE(n *nodes.CTENode) string
- func (b SQLiteVisitor) VisitCase(n *nodes.CaseNode) string
- func (b SQLiteVisitor) VisitCasted(n *nodes.CastedNode) string
- func (v *SQLiteVisitor) VisitComparison(n *nodes.ComparisonNode) string
- func (b SQLiteVisitor) VisitDeleteStatement(n *nodes.DeleteStatement) string
- func (b SQLiteVisitor) VisitExists(n *nodes.ExistsNode) string
- func (b SQLiteVisitor) VisitExtract(n *nodes.ExtractNode) string
- func (b SQLiteVisitor) VisitGrouping(n *nodes.GroupingNode) string
- func (b SQLiteVisitor) VisitGroupingSet(n *nodes.GroupingSetNode) string
- func (b SQLiteVisitor) VisitIn(n *nodes.InNode) string
- func (b SQLiteVisitor) VisitInfix(n *nodes.InfixNode) string
- func (b SQLiteVisitor) VisitInsertStatement(n *nodes.InsertStatement) string
- func (b SQLiteVisitor) VisitJoin(n *nodes.JoinNode) string
- func (b SQLiteVisitor) VisitLiteral(n *nodes.LiteralNode) string
- func (b SQLiteVisitor) VisitNamedFunction(n *nodes.NamedFunctionNode) string
- func (b SQLiteVisitor) VisitNot(n *nodes.NotNode) string
- func (b SQLiteVisitor) VisitOnConflict(n *nodes.OnConflictNode) string
- func (b SQLiteVisitor) VisitOr(n *nodes.OrNode) string
- func (b SQLiteVisitor) VisitOrdering(n *nodes.OrderingNode) string
- func (b SQLiteVisitor) VisitOver(n *nodes.OverNode) string
- func (b SQLiteVisitor) VisitSelectCore(n *nodes.SelectCore) string
- func (b SQLiteVisitor) VisitSetOperation(n *nodes.SetOperationNode) string
- func (b SQLiteVisitor) VisitSqlLiteral(n *nodes.SqlLiteral) string
- func (b SQLiteVisitor) VisitStar(n *nodes.StarNode) string
- func (b SQLiteVisitor) VisitTable(n *nodes.Table) string
- func (b SQLiteVisitor) VisitTableAlias(n *nodes.TableAlias) string
- func (b SQLiteVisitor) VisitUnary(n *nodes.UnaryNode) string
- func (b SQLiteVisitor) VisitUnaryMath(n *nodes.UnaryMathNode) string
- func (b SQLiteVisitor) VisitUpdateStatement(n *nodes.UpdateStatement) string
- func (b SQLiteVisitor) VisitWindowFunction(n *nodes.WindowFuncNode) string
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func RenderWindowDef ¶
func RenderWindowDef(v nodes.Visitor, w *nodes.WindowDefinition) string
RenderWindowDef renders a window definition as a SQL parenthesised expression. Exported so FormattingVisitor and any future visitor can reuse it without duplicating logic. Pass the active dialect visitor for correct quoting.
Types ¶
type DotVisitor ¶
type DotVisitor struct {
// contains filtered or unexported fields
}
DotVisitor walks the AST and produces Graphviz DOT output. It implements nodes.Visitor.
func NewDotVisitor ¶
func NewDotVisitor() *DotVisitor
NewDotVisitor creates a new DotVisitor ready to walk an AST.
func (*DotVisitor) AddPluginCluster ¶
func (dv *DotVisitor) AddPluginCluster(name, color string, nodeIDs []string)
AddPluginCluster registers a plugin cluster for grouped rendering in the DOT output.
func (*DotVisitor) NodeCount ¶
func (dv *DotVisitor) NodeCount() int
NodeCount returns the number of nodes accumulated so far.
func (*DotVisitor) NodeIDsSince ¶
func (dv *DotVisitor) NodeIDsSince(start int) []string
NodeIDsSince returns the IDs of nodes added since (and including) the given index.
func (*DotVisitor) SetProvenance ¶
func (dv *DotVisitor) SetProvenance(p *PluginProvenance)
SetProvenance configures plugin provenance tracking for clause attribution.
func (*DotVisitor) ToDot ¶
func (dv *DotVisitor) ToDot() string
ToDot generates the complete DOT graph text.
func (*DotVisitor) VisitAggregate ¶
func (dv *DotVisitor) VisitAggregate(n *nodes.AggregateNode) string
func (*DotVisitor) VisitAlias ¶
func (dv *DotVisitor) VisitAlias(n *nodes.AliasNode) string
func (*DotVisitor) VisitAssignment ¶
func (dv *DotVisitor) VisitAssignment(n *nodes.AssignmentNode) string
func (*DotVisitor) VisitAttribute ¶
func (dv *DotVisitor) VisitAttribute(n *nodes.Attribute) string
func (*DotVisitor) VisitBetween ¶
func (dv *DotVisitor) VisitBetween(n *nodes.BetweenNode) string
func (*DotVisitor) VisitBindParam ¶
func (dv *DotVisitor) VisitBindParam(n *nodes.BindParamNode) string
func (*DotVisitor) VisitCasted ¶
func (dv *DotVisitor) VisitCasted(n *nodes.CastedNode) string
func (*DotVisitor) VisitComparison ¶
func (dv *DotVisitor) VisitComparison(n *nodes.ComparisonNode) string
func (*DotVisitor) VisitDeleteStatement ¶
func (dv *DotVisitor) VisitDeleteStatement(n *nodes.DeleteStatement) string
func (*DotVisitor) VisitExists ¶
func (dv *DotVisitor) VisitExists(n *nodes.ExistsNode) string
func (*DotVisitor) VisitExtract ¶
func (dv *DotVisitor) VisitExtract(n *nodes.ExtractNode) string
func (*DotVisitor) VisitGrouping ¶
func (dv *DotVisitor) VisitGrouping(n *nodes.GroupingNode) string
func (*DotVisitor) VisitGroupingSet ¶
func (dv *DotVisitor) VisitGroupingSet(n *nodes.GroupingSetNode) string
func (*DotVisitor) VisitInfix ¶
func (dv *DotVisitor) VisitInfix(n *nodes.InfixNode) string
func (*DotVisitor) VisitInsertStatement ¶
func (dv *DotVisitor) VisitInsertStatement(n *nodes.InsertStatement) string
func (*DotVisitor) VisitLiteral ¶
func (dv *DotVisitor) VisitLiteral(n *nodes.LiteralNode) string
func (*DotVisitor) VisitNamedFunction ¶
func (dv *DotVisitor) VisitNamedFunction(n *nodes.NamedFunctionNode) string
func (*DotVisitor) VisitOnConflict ¶
func (dv *DotVisitor) VisitOnConflict(n *nodes.OnConflictNode) string
func (*DotVisitor) VisitOrdering ¶
func (dv *DotVisitor) VisitOrdering(n *nodes.OrderingNode) string
func (*DotVisitor) VisitSelectCore ¶
func (dv *DotVisitor) VisitSelectCore(n *nodes.SelectCore) string
func (*DotVisitor) VisitSetOperation ¶
func (dv *DotVisitor) VisitSetOperation(n *nodes.SetOperationNode) string
func (*DotVisitor) VisitSqlLiteral ¶
func (dv *DotVisitor) VisitSqlLiteral(n *nodes.SqlLiteral) string
func (*DotVisitor) VisitTable ¶
func (dv *DotVisitor) VisitTable(n *nodes.Table) string
func (*DotVisitor) VisitTableAlias ¶
func (dv *DotVisitor) VisitTableAlias(n *nodes.TableAlias) string
func (*DotVisitor) VisitUnary ¶
func (dv *DotVisitor) VisitUnary(n *nodes.UnaryNode) string
func (*DotVisitor) VisitUnaryMath ¶
func (dv *DotVisitor) VisitUnaryMath(n *nodes.UnaryMathNode) string
func (*DotVisitor) VisitUpdateStatement ¶
func (dv *DotVisitor) VisitUpdateStatement(n *nodes.UpdateStatement) string
func (*DotVisitor) VisitWindowFunction ¶
func (dv *DotVisitor) VisitWindowFunction(n *nodes.WindowFuncNode) string
type FormattingVisitor ¶
type FormattingVisitor struct {
// contains filtered or unexported fields
}
FormattingVisitor wraps any nodes.Visitor (dialect visitor) and produces human-readable multi-line SQL. VisitSelectCore, VisitSetOperation, VisitInsertStatement, VisitUpdateStatement, and VisitDeleteStatement are real implementations that render each major clause on its own line.
func NewFormattingVisitor ¶
func NewFormattingVisitor(inner nodes.Visitor) *FormattingVisitor
NewFormattingVisitor constructs a FormattingVisitor wrapping the given dialect visitor.
func (*FormattingVisitor) Params ¶
func (f *FormattingVisitor) Params() []any
Params delegates to the inner visitor if it implements nodes.Parameterizer, otherwise returns nil.
func (*FormattingVisitor) Reset ¶
func (f *FormattingVisitor) Reset()
Reset delegates to the inner visitor if it implements nodes.Parameterizer.
func (*FormattingVisitor) VisitAggregate ¶
func (f *FormattingVisitor) VisitAggregate(node *nodes.AggregateNode) string
func (*FormattingVisitor) VisitAlias ¶
func (f *FormattingVisitor) VisitAlias(node *nodes.AliasNode) string
func (*FormattingVisitor) VisitAnd ¶
func (f *FormattingVisitor) VisitAnd(node *nodes.AndNode) string
func (*FormattingVisitor) VisitAssignment ¶
func (f *FormattingVisitor) VisitAssignment(node *nodes.AssignmentNode) string
func (*FormattingVisitor) VisitAttribute ¶
func (f *FormattingVisitor) VisitAttribute(node *nodes.Attribute) string
func (*FormattingVisitor) VisitBetween ¶
func (f *FormattingVisitor) VisitBetween(node *nodes.BetweenNode) string
func (*FormattingVisitor) VisitBindParam ¶
func (f *FormattingVisitor) VisitBindParam(node *nodes.BindParamNode) string
func (*FormattingVisitor) VisitCTE ¶
func (f *FormattingVisitor) VisitCTE(node *nodes.CTENode) string
func (*FormattingVisitor) VisitCase ¶
func (f *FormattingVisitor) VisitCase(node *nodes.CaseNode) string
func (*FormattingVisitor) VisitCasted ¶
func (f *FormattingVisitor) VisitCasted(node *nodes.CastedNode) string
func (*FormattingVisitor) VisitComparison ¶
func (f *FormattingVisitor) VisitComparison(node *nodes.ComparisonNode) string
func (*FormattingVisitor) VisitDeleteStatement ¶
func (f *FormattingVisitor) VisitDeleteStatement(n *nodes.DeleteStatement) string
VisitDeleteStatement renders DELETE FROM with each clause on its own line.
func (*FormattingVisitor) VisitExists ¶
func (f *FormattingVisitor) VisitExists(node *nodes.ExistsNode) string
func (*FormattingVisitor) VisitExtract ¶
func (f *FormattingVisitor) VisitExtract(node *nodes.ExtractNode) string
func (*FormattingVisitor) VisitGrouping ¶
func (f *FormattingVisitor) VisitGrouping(node *nodes.GroupingNode) string
func (*FormattingVisitor) VisitGroupingSet ¶
func (f *FormattingVisitor) VisitGroupingSet(node *nodes.GroupingSetNode) string
func (*FormattingVisitor) VisitInfix ¶
func (f *FormattingVisitor) VisitInfix(node *nodes.InfixNode) string
func (*FormattingVisitor) VisitInsertStatement ¶
func (f *FormattingVisitor) VisitInsertStatement(n *nodes.InsertStatement) string
VisitInsertStatement renders INSERT with each major clause on its own line.
func (*FormattingVisitor) VisitJoin ¶
func (f *FormattingVisitor) VisitJoin(node *nodes.JoinNode) string
func (*FormattingVisitor) VisitLiteral ¶
func (f *FormattingVisitor) VisitLiteral(node *nodes.LiteralNode) string
func (*FormattingVisitor) VisitNamedFunction ¶
func (f *FormattingVisitor) VisitNamedFunction(node *nodes.NamedFunctionNode) string
func (*FormattingVisitor) VisitNot ¶
func (f *FormattingVisitor) VisitNot(node *nodes.NotNode) string
func (*FormattingVisitor) VisitOnConflict ¶
func (f *FormattingVisitor) VisitOnConflict(node *nodes.OnConflictNode) string
func (*FormattingVisitor) VisitOrdering ¶
func (f *FormattingVisitor) VisitOrdering(node *nodes.OrderingNode) string
func (*FormattingVisitor) VisitOver ¶
func (f *FormattingVisitor) VisitOver(node *nodes.OverNode) string
func (*FormattingVisitor) VisitSelectCore ¶
func (f *FormattingVisitor) VisitSelectCore(node *nodes.SelectCore) string
VisitSelectCore renders a SELECT statement in multi-line formatted style. Projections use leading-comma continuation; all major clauses begin on a new line. Child expressions are rendered via f.inner (dialect-specific).
func (*FormattingVisitor) VisitSetOperation ¶
func (f *FormattingVisitor) VisitSetOperation(n *nodes.SetOperationNode) string
VisitSetOperation renders each leg of a set operation in parentheses with the operator keyword on its own line between them. Any ORDER BY, LIMIT, or OFFSET on the node apply to the combined result and are rendered afterwards.
func (*FormattingVisitor) VisitSqlLiteral ¶
func (f *FormattingVisitor) VisitSqlLiteral(node *nodes.SqlLiteral) string
func (*FormattingVisitor) VisitStar ¶
func (f *FormattingVisitor) VisitStar(node *nodes.StarNode) string
func (*FormattingVisitor) VisitTable ¶
func (f *FormattingVisitor) VisitTable(node *nodes.Table) string
func (*FormattingVisitor) VisitTableAlias ¶
func (f *FormattingVisitor) VisitTableAlias(node *nodes.TableAlias) string
func (*FormattingVisitor) VisitUnary ¶
func (f *FormattingVisitor) VisitUnary(node *nodes.UnaryNode) string
func (*FormattingVisitor) VisitUnaryMath ¶
func (f *FormattingVisitor) VisitUnaryMath(node *nodes.UnaryMathNode) string
func (*FormattingVisitor) VisitUpdateStatement ¶
func (f *FormattingVisitor) VisitUpdateStatement(n *nodes.UpdateStatement) string
VisitUpdateStatement renders UPDATE with each clause on its own line and leading-comma style for multiple SET assignments.
func (*FormattingVisitor) VisitWindowFunction ¶
func (f *FormattingVisitor) VisitWindowFunction(node *nodes.WindowFuncNode) string
type MySQLVisitor ¶
type MySQLVisitor struct {
// contains filtered or unexported fields
}
MySQLVisitor generates MySQL-dialect SQL. Identifiers are quoted with backticks: `table`.`column`.
func NewMySQLVisitor ¶
func NewMySQLVisitor(opts ...Option) *MySQLVisitor
NewMySQLVisitor creates a MySQLVisitor ready for use. Parameterized mode is enabled by default for SQL injection protection. Pass WithoutParams() to disable (not recommended for production).
Example ¶
MySQL quotes identifiers with backticks and uses ? placeholders. Its default collations already compare case-insensitively, so a plain = is emitted.
package main
import (
"fmt"
"github.com/bawdo/gosbee/managers"
"github.com/bawdo/gosbee/nodes"
"github.com/bawdo/gosbee/visitors"
)
// lookupQuery builds one query for every dialect example, so the dialect
// is the only thing that changes between them.
func lookupQuery() *managers.SelectManager {
users := nodes.NewTable("users")
return managers.NewSelectManager(users).
Select(users.Col("id"), users.Col("email")).
Where(
users.Col("email").CaseInsensitiveEq("Alice@Example.com"),
users.Col("id").Gt(100),
)
}
func render(v nodes.Visitor) {
sql, params, err := lookupQuery().ToSQL(v)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Println(sql)
fmt.Println(params)
}
func main() {
render(visitors.NewMySQLVisitor())
}
Output: SELECT `users`.`id`, `users`.`email` FROM `users` WHERE `users`.`email` = ? AND `users`.`id` > ? [Alice@Example.com 100]
func (MySQLVisitor) Params ¶
func (b MySQLVisitor) Params() []any
Params returns the collected bind parameters from the last SQL generation.
func (MySQLVisitor) Reset ¶
func (b MySQLVisitor) Reset()
Reset clears collected parameters for reuse.
func (MySQLVisitor) VisitAggregate ¶
func (b MySQLVisitor) VisitAggregate(n *nodes.AggregateNode) string
func (MySQLVisitor) VisitAlias ¶
func (MySQLVisitor) VisitAssignment ¶
func (b MySQLVisitor) VisitAssignment(n *nodes.AssignmentNode) string
VisitAssignment renders a SET assignment. A column target is written bare, never table-qualified: the target is always a column of the table being updated, and PostgreSQL and SQLite reject a qualified one. The value is an ordinary expression and is rendered in full.
func (MySQLVisitor) VisitAttribute ¶
func (MySQLVisitor) VisitBetween ¶
func (b MySQLVisitor) VisitBetween(n *nodes.BetweenNode) string
func (MySQLVisitor) VisitBindParam ¶
func (b MySQLVisitor) VisitBindParam(n *nodes.BindParamNode) string
func (MySQLVisitor) VisitCasted ¶
func (b MySQLVisitor) VisitCasted(n *nodes.CastedNode) string
func (*MySQLVisitor) VisitComparison ¶
func (v *MySQLVisitor) VisitComparison(n *nodes.ComparisonNode) string
func (MySQLVisitor) VisitDeleteStatement ¶
func (b MySQLVisitor) VisitDeleteStatement(n *nodes.DeleteStatement) string
func (MySQLVisitor) VisitExists ¶
func (b MySQLVisitor) VisitExists(n *nodes.ExistsNode) string
func (MySQLVisitor) VisitExtract ¶
func (b MySQLVisitor) VisitExtract(n *nodes.ExtractNode) string
func (MySQLVisitor) VisitGrouping ¶
func (b MySQLVisitor) VisitGrouping(n *nodes.GroupingNode) string
func (MySQLVisitor) VisitGroupingSet ¶
func (b MySQLVisitor) VisitGroupingSet(n *nodes.GroupingSetNode) string
func (MySQLVisitor) VisitInfix ¶
func (MySQLVisitor) VisitInsertStatement ¶
func (b MySQLVisitor) VisitInsertStatement(n *nodes.InsertStatement) string
func (MySQLVisitor) VisitLiteral ¶
func (b MySQLVisitor) VisitLiteral(n *nodes.LiteralNode) string
func (MySQLVisitor) VisitNamedFunction ¶
func (b MySQLVisitor) VisitNamedFunction(n *nodes.NamedFunctionNode) string
func (MySQLVisitor) VisitOnConflict ¶
func (b MySQLVisitor) VisitOnConflict(n *nodes.OnConflictNode) string
func (MySQLVisitor) VisitOrdering ¶
func (b MySQLVisitor) VisitOrdering(n *nodes.OrderingNode) string
func (MySQLVisitor) VisitSelectCore ¶
func (b MySQLVisitor) VisitSelectCore(n *nodes.SelectCore) string
func (MySQLVisitor) VisitSetOperation ¶
func (b MySQLVisitor) VisitSetOperation(n *nodes.SetOperationNode) string
func (MySQLVisitor) VisitSqlLiteral ¶
func (b MySQLVisitor) VisitSqlLiteral(n *nodes.SqlLiteral) string
func (MySQLVisitor) VisitTable ¶
func (MySQLVisitor) VisitTableAlias ¶
func (b MySQLVisitor) VisitTableAlias(n *nodes.TableAlias) string
func (MySQLVisitor) VisitUnary ¶
func (MySQLVisitor) VisitUnaryMath ¶
func (b MySQLVisitor) VisitUnaryMath(n *nodes.UnaryMathNode) string
func (MySQLVisitor) VisitUpdateStatement ¶
func (b MySQLVisitor) VisitUpdateStatement(n *nodes.UpdateStatement) string
func (MySQLVisitor) VisitWindowFunction ¶
func (b MySQLVisitor) VisitWindowFunction(n *nodes.WindowFuncNode) string
type Option ¶
type Option func(*baseVisitor)
Option configures a visitor at construction time.
func WithParams ¶
func WithParams() Option
WithParams enables parameterized query mode. When enabled, literal values are replaced with bind placeholders and collected for separate retrieval.
Note: Parameterized mode is now enabled by default. This option is kept for backwards compatibility and has no effect.
func WithoutParams ¶
func WithoutParams() Option
WithoutParams disables parameterized query mode.
⚠️ WARNING: Disables SQL injection protection. Only use for debugging or when you're certain all values are trusted. Production code should NEVER use this option.
When disabled, literal values are interpolated directly into the SQL string with basic escaping only. This is convenient for debugging but creates serious security vulnerabilities with untrusted input.
type PluginProvenance ¶
type PluginProvenance struct {
// contains filtered or unexported fields
}
PluginProvenance tracks which clause indices belong to which plugins.
func NewPluginProvenance ¶
func NewPluginProvenance() *PluginProvenance
NewPluginProvenance creates a new PluginProvenance tracker.
func (*PluginProvenance) AddJoin ¶
func (pp *PluginProvenance) AddJoin(plugin, color string, index int)
AddJoin marks a JOIN clause index as belonging to a plugin.
func (*PluginProvenance) AddWhere ¶
func (pp *PluginProvenance) AddWhere(plugin, color string, index int)
AddWhere marks a WHERE clause index as belonging to a plugin.
type PostgresVisitor ¶
type PostgresVisitor struct {
// contains filtered or unexported fields
}
PostgresVisitor generates PostgreSQL-dialect SQL. Identifiers are quoted with double quotes: "table"."column".
func NewPostgresVisitor ¶
func NewPostgresVisitor(opts ...Option) *PostgresVisitor
NewPostgresVisitor creates a PostgresVisitor ready for use. Parameterized mode is enabled by default for SQL injection protection. Pass WithoutParams() to disable (not recommended for production).
Example ¶
PostgreSQL quotes identifiers with double quotes, numbers its placeholders, and compares case-insensitively by lowering both sides.
package main
import (
"fmt"
"github.com/bawdo/gosbee/managers"
"github.com/bawdo/gosbee/nodes"
"github.com/bawdo/gosbee/visitors"
)
// lookupQuery builds one query for every dialect example, so the dialect
// is the only thing that changes between them.
func lookupQuery() *managers.SelectManager {
users := nodes.NewTable("users")
return managers.NewSelectManager(users).
Select(users.Col("id"), users.Col("email")).
Where(
users.Col("email").CaseInsensitiveEq("Alice@Example.com"),
users.Col("id").Gt(100),
)
}
func render(v nodes.Visitor) {
sql, params, err := lookupQuery().ToSQL(v)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Println(sql)
fmt.Println(params)
}
func main() {
render(visitors.NewPostgresVisitor())
}
Output: SELECT "users"."id", "users"."email" FROM "users" WHERE LOWER("users"."email") = LOWER($1) AND "users"."id" > $2 [Alice@Example.com 100]
func (PostgresVisitor) Params ¶
func (b PostgresVisitor) Params() []any
Params returns the collected bind parameters from the last SQL generation.
func (PostgresVisitor) Reset ¶
func (b PostgresVisitor) Reset()
Reset clears collected parameters for reuse.
func (PostgresVisitor) VisitAggregate ¶
func (b PostgresVisitor) VisitAggregate(n *nodes.AggregateNode) string
func (PostgresVisitor) VisitAlias ¶
func (PostgresVisitor) VisitAssignment ¶
func (b PostgresVisitor) VisitAssignment(n *nodes.AssignmentNode) string
VisitAssignment renders a SET assignment. A column target is written bare, never table-qualified: the target is always a column of the table being updated, and PostgreSQL and SQLite reject a qualified one. The value is an ordinary expression and is rendered in full.
func (PostgresVisitor) VisitAttribute ¶
func (PostgresVisitor) VisitBetween ¶
func (b PostgresVisitor) VisitBetween(n *nodes.BetweenNode) string
func (PostgresVisitor) VisitBindParam ¶
func (b PostgresVisitor) VisitBindParam(n *nodes.BindParamNode) string
func (PostgresVisitor) VisitCasted ¶
func (b PostgresVisitor) VisitCasted(n *nodes.CastedNode) string
func (PostgresVisitor) VisitComparison ¶
func (b PostgresVisitor) VisitComparison(n *nodes.ComparisonNode) string
func (PostgresVisitor) VisitDeleteStatement ¶
func (b PostgresVisitor) VisitDeleteStatement(n *nodes.DeleteStatement) string
func (PostgresVisitor) VisitExists ¶
func (b PostgresVisitor) VisitExists(n *nodes.ExistsNode) string
func (PostgresVisitor) VisitExtract ¶
func (b PostgresVisitor) VisitExtract(n *nodes.ExtractNode) string
func (PostgresVisitor) VisitGrouping ¶
func (b PostgresVisitor) VisitGrouping(n *nodes.GroupingNode) string
func (PostgresVisitor) VisitGroupingSet ¶
func (b PostgresVisitor) VisitGroupingSet(n *nodes.GroupingSetNode) string
func (PostgresVisitor) VisitInfix ¶
func (PostgresVisitor) VisitInsertStatement ¶
func (b PostgresVisitor) VisitInsertStatement(n *nodes.InsertStatement) string
func (PostgresVisitor) VisitLiteral ¶
func (b PostgresVisitor) VisitLiteral(n *nodes.LiteralNode) string
func (PostgresVisitor) VisitNamedFunction ¶
func (b PostgresVisitor) VisitNamedFunction(n *nodes.NamedFunctionNode) string
func (PostgresVisitor) VisitOnConflict ¶
func (b PostgresVisitor) VisitOnConflict(n *nodes.OnConflictNode) string
func (PostgresVisitor) VisitOrdering ¶
func (b PostgresVisitor) VisitOrdering(n *nodes.OrderingNode) string
func (PostgresVisitor) VisitSelectCore ¶
func (b PostgresVisitor) VisitSelectCore(n *nodes.SelectCore) string
func (PostgresVisitor) VisitSetOperation ¶
func (b PostgresVisitor) VisitSetOperation(n *nodes.SetOperationNode) string
func (PostgresVisitor) VisitSqlLiteral ¶
func (b PostgresVisitor) VisitSqlLiteral(n *nodes.SqlLiteral) string
func (PostgresVisitor) VisitTable ¶
func (PostgresVisitor) VisitTableAlias ¶
func (b PostgresVisitor) VisitTableAlias(n *nodes.TableAlias) string
func (PostgresVisitor) VisitUnary ¶
func (PostgresVisitor) VisitUnaryMath ¶
func (b PostgresVisitor) VisitUnaryMath(n *nodes.UnaryMathNode) string
func (PostgresVisitor) VisitUpdateStatement ¶
func (b PostgresVisitor) VisitUpdateStatement(n *nodes.UpdateStatement) string
func (PostgresVisitor) VisitWindowFunction ¶
func (b PostgresVisitor) VisitWindowFunction(n *nodes.WindowFuncNode) string
type SQLiteVisitor ¶
type SQLiteVisitor struct {
// contains filtered or unexported fields
}
SQLiteVisitor generates SQLite-dialect SQL. Identifiers are quoted with double quotes: "table"."column" (ANSI SQL).
func NewSQLiteVisitor ¶
func NewSQLiteVisitor(opts ...Option) *SQLiteVisitor
NewSQLiteVisitor creates a SQLiteVisitor ready for use. Parameterized mode is enabled by default for SQL injection protection. Pass WithoutParams() to disable (not recommended for production).
Example ¶
SQLite quotes identifiers with double quotes, uses ? placeholders, and spells a case-insensitive comparison as a collation.
package main
import (
"fmt"
"github.com/bawdo/gosbee/managers"
"github.com/bawdo/gosbee/nodes"
"github.com/bawdo/gosbee/visitors"
)
// lookupQuery builds one query for every dialect example, so the dialect
// is the only thing that changes between them.
func lookupQuery() *managers.SelectManager {
users := nodes.NewTable("users")
return managers.NewSelectManager(users).
Select(users.Col("id"), users.Col("email")).
Where(
users.Col("email").CaseInsensitiveEq("Alice@Example.com"),
users.Col("id").Gt(100),
)
}
func render(v nodes.Visitor) {
sql, params, err := lookupQuery().ToSQL(v)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Println(sql)
fmt.Println(params)
}
func main() {
render(visitors.NewSQLiteVisitor())
}
Output: SELECT "users"."id", "users"."email" FROM "users" WHERE "users"."email" = ? COLLATE NOCASE AND "users"."id" > ? [Alice@Example.com 100]
func (SQLiteVisitor) Params ¶
func (b SQLiteVisitor) Params() []any
Params returns the collected bind parameters from the last SQL generation.
func (SQLiteVisitor) Reset ¶
func (b SQLiteVisitor) Reset()
Reset clears collected parameters for reuse.
func (SQLiteVisitor) VisitAggregate ¶
func (b SQLiteVisitor) VisitAggregate(n *nodes.AggregateNode) string
func (SQLiteVisitor) VisitAlias ¶
func (SQLiteVisitor) VisitAssignment ¶
func (b SQLiteVisitor) VisitAssignment(n *nodes.AssignmentNode) string
VisitAssignment renders a SET assignment. A column target is written bare, never table-qualified: the target is always a column of the table being updated, and PostgreSQL and SQLite reject a qualified one. The value is an ordinary expression and is rendered in full.
func (SQLiteVisitor) VisitAttribute ¶
func (SQLiteVisitor) VisitBetween ¶
func (b SQLiteVisitor) VisitBetween(n *nodes.BetweenNode) string
func (SQLiteVisitor) VisitBindParam ¶
func (b SQLiteVisitor) VisitBindParam(n *nodes.BindParamNode) string
func (SQLiteVisitor) VisitCasted ¶
func (b SQLiteVisitor) VisitCasted(n *nodes.CastedNode) string
func (*SQLiteVisitor) VisitComparison ¶
func (v *SQLiteVisitor) VisitComparison(n *nodes.ComparisonNode) string
func (SQLiteVisitor) VisitDeleteStatement ¶
func (b SQLiteVisitor) VisitDeleteStatement(n *nodes.DeleteStatement) string
func (SQLiteVisitor) VisitExists ¶
func (b SQLiteVisitor) VisitExists(n *nodes.ExistsNode) string
func (SQLiteVisitor) VisitExtract ¶
func (b SQLiteVisitor) VisitExtract(n *nodes.ExtractNode) string
func (SQLiteVisitor) VisitGrouping ¶
func (b SQLiteVisitor) VisitGrouping(n *nodes.GroupingNode) string
func (SQLiteVisitor) VisitGroupingSet ¶
func (b SQLiteVisitor) VisitGroupingSet(n *nodes.GroupingSetNode) string
func (SQLiteVisitor) VisitInfix ¶
func (SQLiteVisitor) VisitInsertStatement ¶
func (b SQLiteVisitor) VisitInsertStatement(n *nodes.InsertStatement) string
func (SQLiteVisitor) VisitLiteral ¶
func (b SQLiteVisitor) VisitLiteral(n *nodes.LiteralNode) string
func (SQLiteVisitor) VisitNamedFunction ¶
func (b SQLiteVisitor) VisitNamedFunction(n *nodes.NamedFunctionNode) string
func (SQLiteVisitor) VisitOnConflict ¶
func (b SQLiteVisitor) VisitOnConflict(n *nodes.OnConflictNode) string
func (SQLiteVisitor) VisitOrdering ¶
func (b SQLiteVisitor) VisitOrdering(n *nodes.OrderingNode) string
func (SQLiteVisitor) VisitSelectCore ¶
func (b SQLiteVisitor) VisitSelectCore(n *nodes.SelectCore) string
func (SQLiteVisitor) VisitSetOperation ¶
func (b SQLiteVisitor) VisitSetOperation(n *nodes.SetOperationNode) string
func (SQLiteVisitor) VisitSqlLiteral ¶
func (b SQLiteVisitor) VisitSqlLiteral(n *nodes.SqlLiteral) string
func (SQLiteVisitor) VisitTable ¶
func (SQLiteVisitor) VisitTableAlias ¶
func (b SQLiteVisitor) VisitTableAlias(n *nodes.TableAlias) string
func (SQLiteVisitor) VisitUnary ¶
func (SQLiteVisitor) VisitUnaryMath ¶
func (b SQLiteVisitor) VisitUnaryMath(n *nodes.UnaryMathNode) string
func (SQLiteVisitor) VisitUpdateStatement ¶
func (b SQLiteVisitor) VisitUpdateStatement(n *nodes.UpdateStatement) string
func (SQLiteVisitor) VisitWindowFunction ¶
func (b SQLiteVisitor) VisitWindowFunction(n *nodes.WindowFuncNode) string