Files
upstream-mirror 0f4df23290
Some checks failed
kotlin / test (push) Has been skipped
python / test (push) Has been skipped
typescript / test (push) Has been skipped
go / build darwin/amd64 (push) Has been cancelled
go / build linux/amd64 (push) Has been cancelled
go / build windows/amd64 (push) Has been cancelled
go / build darwin/arm64 (push) Has been cancelled
go / build linux/arm64 (push) Has been cancelled
go / build windows/arm64 (push) Has been cancelled
go / test (push) Has been cancelled
go / vuln_check (push) Has been cancelled
snapshot of https://github.com/sqlc-dev/sqlc.git (main, 2026-09-16; blobs > 131072B omitted)
2026-09-16 02:17:34 +05:00

3729 lines
92 KiB
Go

package postgresql
import (
"fmt"
pg "github.com/sqlc-dev/oliphant"
"github.com/sqlc-dev/sqlc/internal/sql/ast"
)
func convertFuncParamMode(m pg.FunctionParameterMode) (ast.FuncParamMode, error) {
switch m {
case pg.FunctionParameterMode_FUNC_PARAM_IN:
return ast.FuncParamIn, nil
case pg.FunctionParameterMode_FUNC_PARAM_OUT:
return ast.FuncParamOut, nil
case pg.FunctionParameterMode_FUNC_PARAM_INOUT:
return ast.FuncParamInOut, nil
case pg.FunctionParameterMode_FUNC_PARAM_VARIADIC:
return ast.FuncParamVariadic, nil
case pg.FunctionParameterMode_FUNC_PARAM_TABLE:
return ast.FuncParamTable, nil
case pg.FunctionParameterMode_FUNC_PARAM_DEFAULT:
return ast.FuncParamDefault, nil
default:
return -1, fmt.Errorf("parse func param: invalid mode %v", m)
}
}
func convertSubLinkType(t pg.SubLinkType) (ast.SubLinkType, error) {
switch t {
case pg.SubLinkType_EXISTS_SUBLINK:
return ast.EXISTS_SUBLINK, nil
case pg.SubLinkType_ALL_SUBLINK:
return ast.ALL_SUBLINK, nil
case pg.SubLinkType_ANY_SUBLINK:
return ast.ANY_SUBLINK, nil
case pg.SubLinkType_ROWCOMPARE_SUBLINK:
return ast.ROWCOMPARE_SUBLINK, nil
case pg.SubLinkType_EXPR_SUBLINK:
return ast.EXPR_SUBLINK, nil
case pg.SubLinkType_MULTIEXPR_SUBLINK:
return ast.MULTIEXPR_SUBLINK, nil
case pg.SubLinkType_ARRAY_SUBLINK:
return ast.ARRAY_SUBLINK, nil
case pg.SubLinkType_CTE_SUBLINK:
return ast.CTE_SUBLINK, nil
default:
return 0, fmt.Errorf("parse sublink type: unknown type %s", t)
}
}
func convertSetOperation(t pg.SetOperation) (ast.SetOperation, error) {
switch t {
case pg.SetOperation_SETOP_NONE:
return ast.None, nil
case pg.SetOperation_SETOP_UNION:
return ast.Union, nil
case pg.SetOperation_SETOP_INTERSECT:
return ast.Intersect, nil
case pg.SetOperation_SETOP_EXCEPT:
return ast.Except, nil
default:
return 0, fmt.Errorf("parse set operation: unknown type %s", t)
}
}
func convertList(l *pg.List) *ast.List {
out := &ast.List{}
for _, item := range l.Items {
out.Items = append(out.Items, convertNode(item))
}
return out
}
func convertSlice(nodes []*pg.Node) *ast.List {
out := &ast.List{}
for _, n := range nodes {
out.Items = append(out.Items, convertNode(n))
}
return out
}
func convert(node *pg.Node) (ast.Node, error) {
return convertNode(node), nil
}
func convertA_ArrayExpr(n *pg.A_ArrayExpr) *ast.A_ArrayExpr {
if n == nil {
return nil
}
return &ast.A_ArrayExpr{
Elements: convertSlice(n.Elements),
Location: int(n.Location),
}
}
func convertA_Const(n *pg.A_Const) *ast.A_Const {
if n == nil {
return nil
}
var val ast.Node
if n.Isnull {
val = &ast.Null{}
} else {
switch v := n.Val.(type) {
case *pg.A_Const_Boolval:
val = convertBoolean(v.Boolval)
case *pg.A_Const_Bsval:
val = convertBitString(v.Bsval)
case *pg.A_Const_Fval:
val = convertFloat(v.Fval)
case *pg.A_Const_Ival:
val = convertInteger(v.Ival)
case *pg.A_Const_Sval:
val = convertString(v.Sval)
}
}
return &ast.A_Const{
Val: val,
Location: int(n.Location),
}
}
func convertA_Expr(n *pg.A_Expr) *ast.A_Expr {
if n == nil {
return nil
}
return &ast.A_Expr{
Kind: ast.A_Expr_Kind(n.Kind),
Name: convertSlice(n.Name),
Lexpr: convertNode(n.Lexpr),
Rexpr: convertNode(n.Rexpr),
Location: int(n.Location),
}
}
func convertA_Indices(n *pg.A_Indices) *ast.A_Indices {
if n == nil {
return nil
}
return &ast.A_Indices{
IsSlice: n.IsSlice,
Lidx: convertNode(n.Lidx),
Uidx: convertNode(n.Uidx),
}
}
func convertA_Indirection(n *pg.A_Indirection) *ast.A_Indirection {
if n == nil {
return nil
}
return &ast.A_Indirection{
Arg: convertNode(n.Arg),
Indirection: convertSlice(n.Indirection),
}
}
func convertA_Star(n *pg.A_Star) *ast.A_Star {
if n == nil {
return nil
}
return &ast.A_Star{}
}
func convertAccessPriv(n *pg.AccessPriv) *ast.AccessPriv {
if n == nil {
return nil
}
return &ast.AccessPriv{
PrivName: makeString(n.PrivName),
Cols: convertSlice(n.Cols),
}
}
func convertAggref(n *pg.Aggref) *ast.Aggref {
if n == nil {
return nil
}
return &ast.Aggref{
Xpr: convertNode(n.Xpr),
Aggfnoid: ast.Oid(n.Aggfnoid),
Aggtype: ast.Oid(n.Aggtype),
Aggcollid: ast.Oid(n.Aggcollid),
Inputcollid: ast.Oid(n.Inputcollid),
Aggargtypes: convertSlice(n.Aggargtypes),
Aggdirectargs: convertSlice(n.Aggdirectargs),
Args: convertSlice(n.Args),
Aggorder: convertSlice(n.Aggorder),
Aggdistinct: convertSlice(n.Aggdistinct),
Aggfilter: convertNode(n.Aggfilter),
Aggstar: n.Aggstar,
Aggvariadic: n.Aggvariadic,
Aggkind: makeByte(n.Aggkind),
Agglevelsup: ast.Index(n.Agglevelsup),
Aggsplit: ast.AggSplit(n.Aggsplit),
Location: int(n.Location),
}
}
func convertAlias(n *pg.Alias) *ast.Alias {
if n == nil {
return nil
}
return &ast.Alias{
Aliasname: makeString(n.Aliasname),
Colnames: convertSlice(n.Colnames),
}
}
func convertAlterCollationStmt(n *pg.AlterCollationStmt) *ast.AlterCollationStmt {
if n == nil {
return nil
}
return &ast.AlterCollationStmt{
Collname: convertSlice(n.Collname),
}
}
func convertAlterDatabaseSetStmt(n *pg.AlterDatabaseSetStmt) *ast.AlterDatabaseSetStmt {
if n == nil {
return nil
}
return &ast.AlterDatabaseSetStmt{
Dbname: makeString(n.Dbname),
Setstmt: convertVariableSetStmt(n.Setstmt),
}
}
func convertAlterDatabaseStmt(n *pg.AlterDatabaseStmt) *ast.AlterDatabaseStmt {
if n == nil {
return nil
}
return &ast.AlterDatabaseStmt{
Dbname: makeString(n.Dbname),
Options: convertSlice(n.Options),
}
}
func convertAlterDefaultPrivilegesStmt(n *pg.AlterDefaultPrivilegesStmt) *ast.AlterDefaultPrivilegesStmt {
if n == nil {
return nil
}
return &ast.AlterDefaultPrivilegesStmt{
Options: convertSlice(n.Options),
Action: convertGrantStmt(n.Action),
}
}
func convertAlterDomainStmt(n *pg.AlterDomainStmt) *ast.AlterDomainStmt {
if n == nil {
return nil
}
return &ast.AlterDomainStmt{
Subtype: makeByte(n.Subtype),
TypeName: convertSlice(n.TypeName),
Name: makeString(n.Name),
Def: convertNode(n.Def),
Behavior: ast.DropBehavior(n.Behavior),
MissingOk: n.MissingOk,
}
}
func convertAlterEnumStmt(n *pg.AlterEnumStmt) *ast.AlterEnumStmt {
if n == nil {
return nil
}
return &ast.AlterEnumStmt{
TypeName: convertSlice(n.TypeName),
OldVal: makeString(n.OldVal),
NewVal: makeString(n.NewVal),
NewValNeighbor: makeString(n.NewValNeighbor),
NewValIsAfter: n.NewValIsAfter,
SkipIfNewValExists: n.SkipIfNewValExists,
}
}
func convertAlterEventTrigStmt(n *pg.AlterEventTrigStmt) *ast.AlterEventTrigStmt {
if n == nil {
return nil
}
return &ast.AlterEventTrigStmt{
Trigname: makeString(n.Trigname),
Tgenabled: makeByte(n.Tgenabled),
}
}
func convertAlterExtensionContentsStmt(n *pg.AlterExtensionContentsStmt) *ast.AlterExtensionContentsStmt {
if n == nil {
return nil
}
return &ast.AlterExtensionContentsStmt{
Extname: makeString(n.Extname),
Action: int(n.Action),
Objtype: ast.ObjectType(n.Objtype),
Object: convertNode(n.Object),
}
}
func convertAlterExtensionStmt(n *pg.AlterExtensionStmt) *ast.AlterExtensionStmt {
if n == nil {
return nil
}
return &ast.AlterExtensionStmt{
Extname: makeString(n.Extname),
Options: convertSlice(n.Options),
}
}
func convertAlterFdwStmt(n *pg.AlterFdwStmt) *ast.AlterFdwStmt {
if n == nil {
return nil
}
return &ast.AlterFdwStmt{
Fdwname: makeString(n.Fdwname),
FuncOptions: convertSlice(n.FuncOptions),
Options: convertSlice(n.Options),
}
}
func convertAlterForeignServerStmt(n *pg.AlterForeignServerStmt) *ast.AlterForeignServerStmt {
if n == nil {
return nil
}
return &ast.AlterForeignServerStmt{
Servername: makeString(n.Servername),
Version: makeString(n.Version),
Options: convertSlice(n.Options),
HasVersion: n.HasVersion,
}
}
func convertAlterFunctionStmt(n *pg.AlterFunctionStmt) *ast.AlterFunctionStmt {
if n == nil {
return nil
}
return &ast.AlterFunctionStmt{
Func: convertObjectWithArgs(n.Func),
Actions: convertSlice(n.Actions),
}
}
func convertAlterObjectDependsStmt(n *pg.AlterObjectDependsStmt) *ast.AlterObjectDependsStmt {
if n == nil {
return nil
}
return &ast.AlterObjectDependsStmt{
ObjectType: ast.ObjectType(n.ObjectType),
Relation: convertRangeVar(n.Relation),
Object: convertNode(n.Object),
Extname: convertString(n.Extname),
}
}
func convertAlterObjectSchemaStmt(n *pg.AlterObjectSchemaStmt) *ast.AlterObjectSchemaStmt {
if n == nil {
return nil
}
return &ast.AlterObjectSchemaStmt{
ObjectType: ast.ObjectType(n.ObjectType),
Relation: convertRangeVar(n.Relation),
Object: convertNode(n.Object),
Newschema: makeString(n.Newschema),
MissingOk: n.MissingOk,
}
}
func convertAlterOpFamilyStmt(n *pg.AlterOpFamilyStmt) *ast.AlterOpFamilyStmt {
if n == nil {
return nil
}
return &ast.AlterOpFamilyStmt{
Opfamilyname: convertSlice(n.Opfamilyname),
Amname: makeString(n.Amname),
IsDrop: n.IsDrop,
Items: convertSlice(n.Items),
}
}
func convertAlterOperatorStmt(n *pg.AlterOperatorStmt) *ast.AlterOperatorStmt {
if n == nil {
return nil
}
return &ast.AlterOperatorStmt{
Opername: convertObjectWithArgs(n.Opername),
Options: convertSlice(n.Options),
}
}
func convertAlterOwnerStmt(n *pg.AlterOwnerStmt) *ast.AlterOwnerStmt {
if n == nil {
return nil
}
return &ast.AlterOwnerStmt{
ObjectType: ast.ObjectType(n.ObjectType),
Relation: convertRangeVar(n.Relation),
Object: convertNode(n.Object),
Newowner: convertRoleSpec(n.Newowner),
}
}
func convertAlterPolicyStmt(n *pg.AlterPolicyStmt) *ast.AlterPolicyStmt {
if n == nil {
return nil
}
return &ast.AlterPolicyStmt{
PolicyName: makeString(n.PolicyName),
Table: convertRangeVar(n.Table),
Roles: convertSlice(n.Roles),
Qual: convertNode(n.Qual),
WithCheck: convertNode(n.WithCheck),
}
}
func convertAlterPublicationStmt(n *pg.AlterPublicationStmt) *ast.AlterPublicationStmt {
if n == nil {
return nil
}
return &ast.AlterPublicationStmt{
Pubname: makeString(n.Pubname),
Options: convertSlice(n.Options),
Tables: convertSlice(n.Pubobjects),
ForAllTables: n.ForAllTables,
TableAction: ast.DefElemAction(n.Action),
}
}
func convertAlterRoleSetStmt(n *pg.AlterRoleSetStmt) *ast.AlterRoleSetStmt {
if n == nil {
return nil
}
return &ast.AlterRoleSetStmt{
Role: convertRoleSpec(n.Role),
Database: makeString(n.Database),
Setstmt: convertVariableSetStmt(n.Setstmt),
}
}
func convertAlterRoleStmt(n *pg.AlterRoleStmt) *ast.AlterRoleStmt {
if n == nil {
return nil
}
return &ast.AlterRoleStmt{
Role: convertRoleSpec(n.Role),
Options: convertSlice(n.Options),
Action: int(n.Action),
}
}
func convertAlterSeqStmt(n *pg.AlterSeqStmt) *ast.AlterSeqStmt {
if n == nil {
return nil
}
return &ast.AlterSeqStmt{
Sequence: convertRangeVar(n.Sequence),
Options: convertSlice(n.Options),
ForIdentity: n.ForIdentity,
MissingOk: n.MissingOk,
}
}
func convertAlterSubscriptionStmt(n *pg.AlterSubscriptionStmt) *ast.AlterSubscriptionStmt {
if n == nil {
return nil
}
return &ast.AlterSubscriptionStmt{
Kind: ast.AlterSubscriptionType(n.Kind),
Subname: makeString(n.Subname),
Conninfo: makeString(n.Conninfo),
Publication: convertSlice(n.Publication),
Options: convertSlice(n.Options),
}
}
func convertAlterSystemStmt(n *pg.AlterSystemStmt) *ast.AlterSystemStmt {
if n == nil {
return nil
}
return &ast.AlterSystemStmt{
Setstmt: convertVariableSetStmt(n.Setstmt),
}
}
func convertAlterTSConfigurationStmt(n *pg.AlterTSConfigurationStmt) *ast.AlterTSConfigurationStmt {
if n == nil {
return nil
}
return &ast.AlterTSConfigurationStmt{
Kind: ast.AlterTSConfigType(n.Kind),
Cfgname: convertSlice(n.Cfgname),
Tokentype: convertSlice(n.Tokentype),
Dicts: convertSlice(n.Dicts),
Override: n.Override,
Replace: n.Replace,
MissingOk: n.MissingOk,
}
}
func convertAlterTSDictionaryStmt(n *pg.AlterTSDictionaryStmt) *ast.AlterTSDictionaryStmt {
if n == nil {
return nil
}
return &ast.AlterTSDictionaryStmt{
Dictname: convertSlice(n.Dictname),
Options: convertSlice(n.Options),
}
}
func convertAlterTableCmd(n *pg.AlterTableCmd) *ast.AlterTableCmd {
if n == nil {
return nil
}
def := convertNode(n.Def)
columnDef := def.(*ast.ColumnDef)
return &ast.AlterTableCmd{
Subtype: ast.AlterTableType(n.Subtype),
Name: makeString(n.Name),
Newowner: convertRoleSpec(n.Newowner),
Def: columnDef,
Behavior: ast.DropBehavior(n.Behavior),
MissingOk: n.MissingOk,
}
}
func convertAlterTableMoveAllStmt(n *pg.AlterTableMoveAllStmt) *ast.AlterTableMoveAllStmt {
if n == nil {
return nil
}
return &ast.AlterTableMoveAllStmt{
OrigTablespacename: makeString(n.OrigTablespacename),
Objtype: ast.ObjectType(n.Objtype),
Roles: convertSlice(n.Roles),
NewTablespacename: makeString(n.NewTablespacename),
Nowait: n.Nowait,
}
}
func convertAlterTableSpaceOptionsStmt(n *pg.AlterTableSpaceOptionsStmt) *ast.AlterTableSpaceOptionsStmt {
if n == nil {
return nil
}
return &ast.AlterTableSpaceOptionsStmt{
Tablespacename: makeString(n.Tablespacename),
Options: convertSlice(n.Options),
IsReset: n.IsReset,
}
}
func convertAlterTableStmt(n *pg.AlterTableStmt) *ast.AlterTableStmt {
if n == nil {
return nil
}
return &ast.AlterTableStmt{
Relation: convertRangeVar(n.Relation),
Cmds: convertSlice(n.Cmds),
Relkind: ast.ObjectType(n.Objtype),
MissingOk: n.MissingOk,
}
}
func convertAlterUserMappingStmt(n *pg.AlterUserMappingStmt) *ast.AlterUserMappingStmt {
if n == nil {
return nil
}
return &ast.AlterUserMappingStmt{
User: convertRoleSpec(n.User),
Servername: makeString(n.Servername),
Options: convertSlice(n.Options),
}
}
func convertAlternativeSubPlan(n *pg.AlternativeSubPlan) *ast.AlternativeSubPlan {
if n == nil {
return nil
}
return &ast.AlternativeSubPlan{
Xpr: convertNode(n.Xpr),
Subplans: convertSlice(n.Subplans),
}
}
func convertArrayCoerceExpr(n *pg.ArrayCoerceExpr) *ast.ArrayCoerceExpr {
if n == nil {
return nil
}
return &ast.ArrayCoerceExpr{
Xpr: convertNode(n.Xpr),
Arg: convertNode(n.Arg),
Resulttype: ast.Oid(n.Resulttype),
Resulttypmod: n.Resulttypmod,
Resultcollid: ast.Oid(n.Resultcollid),
Coerceformat: ast.CoercionForm(n.Coerceformat),
Location: int(n.Location),
}
}
func convertArrayExpr(n *pg.ArrayExpr) *ast.ArrayExpr {
if n == nil {
return nil
}
return &ast.ArrayExpr{
Xpr: convertNode(n.Xpr),
ArrayTypeid: ast.Oid(n.ArrayTypeid),
ArrayCollid: ast.Oid(n.ArrayCollid),
ElementTypeid: ast.Oid(n.ElementTypeid),
Elements: convertSlice(n.Elements),
Multidims: n.Multidims,
Location: int(n.Location),
}
}
func convertBitString(n *pg.BitString) *ast.BitString {
if n == nil {
return nil
}
return &ast.BitString{
Str: n.Bsval,
}
}
func convertBoolExpr(n *pg.BoolExpr) *ast.BoolExpr {
if n == nil {
return nil
}
return &ast.BoolExpr{
Xpr: convertNode(n.Xpr),
Boolop: ast.BoolExprType(n.Boolop),
Args: convertSlice(n.Args),
Location: int(n.Location),
}
}
func convertBoolean(n *pg.Boolean) *ast.Boolean {
if n == nil {
return nil
}
return &ast.Boolean{
Boolval: n.Boolval,
}
}
func convertBooleanTest(n *pg.BooleanTest) *ast.BooleanTest {
if n == nil {
return nil
}
return &ast.BooleanTest{
Xpr: convertNode(n.Xpr),
Arg: convertNode(n.Arg),
Booltesttype: ast.BoolTestType(n.Booltesttype),
Location: int(n.Location),
}
}
func convertCallStmt(n *pg.CallStmt) *ast.CallStmt {
if n == nil {
return nil
}
rel, err := parseRelationFromNodes(n.Funccall.Funcname)
if err != nil {
// TODO: How should we handle errors?
panic(err)
}
return &ast.CallStmt{
FuncCall: &ast.FuncCall{
Func: rel.FuncName(),
Funcname: convertSlice(n.Funccall.Funcname),
Args: convertSlice(n.Funccall.Args),
AggOrder: convertSlice(n.Funccall.AggOrder),
AggFilter: convertNode(n.Funccall.AggFilter),
AggWithinGroup: n.Funccall.AggWithinGroup,
AggStar: n.Funccall.AggStar,
AggDistinct: n.Funccall.AggDistinct,
FuncVariadic: n.Funccall.FuncVariadic,
Over: convertWindowDef(n.Funccall.Over),
Location: int(n.Funccall.Location),
},
}
}
func convertCaseExpr(n *pg.CaseExpr) *ast.CaseExpr {
if n == nil {
return nil
}
return &ast.CaseExpr{
Xpr: convertNode(n.Xpr),
Casetype: ast.Oid(n.Casetype),
Casecollid: ast.Oid(n.Casecollid),
Arg: convertNode(n.Arg),
Args: convertSlice(n.Args),
Defresult: convertNode(n.Defresult),
Location: int(n.Location),
}
}
func convertCaseTestExpr(n *pg.CaseTestExpr) *ast.CaseTestExpr {
if n == nil {
return nil
}
return &ast.CaseTestExpr{
Xpr: convertNode(n.Xpr),
TypeId: ast.Oid(n.TypeId),
TypeMod: n.TypeMod,
Collation: ast.Oid(n.Collation),
}
}
func convertCaseWhen(n *pg.CaseWhen) *ast.CaseWhen {
if n == nil {
return nil
}
return &ast.CaseWhen{
Xpr: convertNode(n.Xpr),
Expr: convertNode(n.Expr),
Result: convertNode(n.Result),
Location: int(n.Location),
}
}
func convertCheckPointStmt(n *pg.CheckPointStmt) *ast.CheckPointStmt {
if n == nil {
return nil
}
return &ast.CheckPointStmt{}
}
func convertClosePortalStmt(n *pg.ClosePortalStmt) *ast.ClosePortalStmt {
if n == nil {
return nil
}
return &ast.ClosePortalStmt{
Portalname: makeString(n.Portalname),
}
}
func convertClusterStmt(n *pg.ClusterStmt) *ast.ClusterStmt {
if n == nil {
return nil
}
return &ast.ClusterStmt{
Relation: convertRangeVar(n.Relation),
Indexname: makeString(n.Indexname),
}
}
func convertCoalesceExpr(n *pg.CoalesceExpr) *ast.CoalesceExpr {
if n == nil {
return nil
}
return &ast.CoalesceExpr{
Xpr: convertNode(n.Xpr),
Coalescetype: ast.Oid(n.Coalescetype),
Coalescecollid: ast.Oid(n.Coalescecollid),
Args: convertSlice(n.Args),
Location: int(n.Location),
}
}
func convertCoerceToDomain(n *pg.CoerceToDomain) *ast.CoerceToDomain {
if n == nil {
return nil
}
return &ast.CoerceToDomain{
Xpr: convertNode(n.Xpr),
Arg: convertNode(n.Arg),
Resulttype: ast.Oid(n.Resulttype),
Resulttypmod: n.Resulttypmod,
Resultcollid: ast.Oid(n.Resultcollid),
Coercionformat: ast.CoercionForm(n.Coercionformat),
Location: int(n.Location),
}
}
func convertCoerceToDomainValue(n *pg.CoerceToDomainValue) *ast.CoerceToDomainValue {
if n == nil {
return nil
}
return &ast.CoerceToDomainValue{
Xpr: convertNode(n.Xpr),
TypeId: ast.Oid(n.TypeId),
TypeMod: n.TypeMod,
Collation: ast.Oid(n.Collation),
Location: int(n.Location),
}
}
func convertCoerceViaIO(n *pg.CoerceViaIO) *ast.CoerceViaIO {
if n == nil {
return nil
}
return &ast.CoerceViaIO{
Xpr: convertNode(n.Xpr),
Arg: convertNode(n.Arg),
Resulttype: ast.Oid(n.Resulttype),
Resultcollid: ast.Oid(n.Resultcollid),
Coerceformat: ast.CoercionForm(n.Coerceformat),
Location: int(n.Location),
}
}
func convertCollateClause(n *pg.CollateClause) *ast.CollateClause {
if n == nil {
return nil
}
return &ast.CollateClause{
Arg: convertNode(n.Arg),
Collname: convertSlice(n.Collname),
Location: int(n.Location),
}
}
func convertCollateExpr(n *pg.CollateExpr) *ast.CollateExpr {
if n == nil {
return nil
}
return &ast.CollateExpr{
Xpr: convertNode(n.Xpr),
Arg: convertNode(n.Arg),
CollOid: ast.Oid(n.CollOid),
Location: int(n.Location),
}
}
func convertColumnDef(n *pg.ColumnDef) *ast.ColumnDef {
if n == nil {
return nil
}
return &ast.ColumnDef{
Colname: n.Colname,
TypeName: convertTypeName(n.TypeName),
Inhcount: int(n.Inhcount),
IsLocal: n.IsLocal,
IsNotNull: n.IsNotNull,
IsFromType: n.IsFromType,
Storage: makeByte(n.Storage),
RawDefault: convertNode(n.RawDefault),
CookedDefault: convertNode(n.CookedDefault),
Identity: makeByte(n.Identity),
CollClause: convertCollateClause(n.CollClause),
CollOid: ast.Oid(n.CollOid),
Constraints: convertSlice(n.Constraints),
Fdwoptions: convertSlice(n.Fdwoptions),
Location: int(n.Location),
}
}
func convertColumnRef(n *pg.ColumnRef) *ast.ColumnRef {
if n == nil {
return nil
}
return &ast.ColumnRef{
Fields: convertSlice(n.Fields),
Location: int(n.Location),
}
}
func convertCommentStmt(n *pg.CommentStmt) *ast.CommentStmt {
if n == nil {
return nil
}
return &ast.CommentStmt{
Objtype: ast.ObjectType(n.Objtype),
Object: convertNode(n.Object),
Comment: makeString(n.Comment),
}
}
func convertCommonTableExpr(n *pg.CommonTableExpr) *ast.CommonTableExpr {
if n == nil {
return nil
}
return &ast.CommonTableExpr{
Ctename: makeString(n.Ctename),
Aliascolnames: convertSlice(n.Aliascolnames),
Ctequery: convertNode(n.Ctequery),
Location: int(n.Location),
Cterecursive: n.Cterecursive,
Cterefcount: int(n.Cterefcount),
Ctecolnames: convertSlice(n.Ctecolnames),
Ctecoltypes: convertSlice(n.Ctecoltypes),
Ctecoltypmods: convertSlice(n.Ctecoltypmods),
Ctecolcollations: convertSlice(n.Ctecolcollations),
}
}
func convertCompositeTypeStmt(n *pg.CompositeTypeStmt) *ast.CompositeTypeStmt {
if n == nil {
return nil
}
rel := parseRelationFromRangeVar(n.Typevar)
return &ast.CompositeTypeStmt{
TypeName: rel.TypeName(),
}
}
func convertConstraint(n *pg.Constraint) *ast.Constraint {
if n == nil {
return nil
}
return &ast.Constraint{
Contype: ast.ConstrType(n.Contype),
Conname: makeString(n.Conname),
Deferrable: n.Deferrable,
Initdeferred: n.Initdeferred,
Location: int(n.Location),
IsNoInherit: n.IsNoInherit,
RawExpr: convertNode(n.RawExpr),
CookedExpr: makeString(n.CookedExpr),
GeneratedWhen: makeByte(n.GeneratedWhen),
Keys: convertSlice(n.Keys),
Exclusions: convertSlice(n.Exclusions),
Options: convertSlice(n.Options),
Indexname: makeString(n.Indexname),
Indexspace: makeString(n.Indexspace),
AccessMethod: makeString(n.AccessMethod),
WhereClause: convertNode(n.WhereClause),
Pktable: convertRangeVar(n.Pktable),
FkAttrs: convertSlice(n.FkAttrs),
PkAttrs: convertSlice(n.PkAttrs),
FkMatchtype: makeByte(n.FkMatchtype),
FkUpdAction: makeByte(n.FkUpdAction),
FkDelAction: makeByte(n.FkDelAction),
OldConpfeqop: convertSlice(n.OldConpfeqop),
OldPktableOid: ast.Oid(n.OldPktableOid),
SkipValidation: n.SkipValidation,
InitiallyValid: n.InitiallyValid,
}
}
func convertConstraintsSetStmt(n *pg.ConstraintsSetStmt) *ast.ConstraintsSetStmt {
if n == nil {
return nil
}
return &ast.ConstraintsSetStmt{
Constraints: convertSlice(n.Constraints),
Deferred: n.Deferred,
}
}
func convertConvertRowtypeExpr(n *pg.ConvertRowtypeExpr) *ast.ConvertRowtypeExpr {
if n == nil {
return nil
}
return &ast.ConvertRowtypeExpr{
Xpr: convertNode(n.Xpr),
Arg: convertNode(n.Arg),
Resulttype: ast.Oid(n.Resulttype),
Convertformat: ast.CoercionForm(n.Convertformat),
Location: int(n.Location),
}
}
func convertCopyStmt(n *pg.CopyStmt) *ast.CopyStmt {
if n == nil {
return nil
}
return &ast.CopyStmt{
Relation: convertRangeVar(n.Relation),
Query: convertNode(n.Query),
Attlist: convertSlice(n.Attlist),
IsFrom: n.IsFrom,
IsProgram: n.IsProgram,
Filename: makeString(n.Filename),
Options: convertSlice(n.Options),
}
}
func convertCreateAmStmt(n *pg.CreateAmStmt) *ast.CreateAmStmt {
if n == nil {
return nil
}
return &ast.CreateAmStmt{
Amname: makeString(n.Amname),
HandlerName: convertSlice(n.HandlerName),
Amtype: makeByte(n.Amtype),
}
}
func convertCreateCastStmt(n *pg.CreateCastStmt) *ast.CreateCastStmt {
if n == nil {
return nil
}
return &ast.CreateCastStmt{
Sourcetype: convertTypeName(n.Sourcetype),
Targettype: convertTypeName(n.Targettype),
Func: convertObjectWithArgs(n.Func),
Context: ast.CoercionContext(n.Context),
Inout: n.Inout,
}
}
func convertCreateConversionStmt(n *pg.CreateConversionStmt) *ast.CreateConversionStmt {
if n == nil {
return nil
}
return &ast.CreateConversionStmt{
ConversionName: convertSlice(n.ConversionName),
ForEncodingName: makeString(n.ForEncodingName),
ToEncodingName: makeString(n.ToEncodingName),
FuncName: convertSlice(n.FuncName),
Def: n.Def,
}
}
func convertCreateDomainStmt(n *pg.CreateDomainStmt) *ast.CreateDomainStmt {
if n == nil {
return nil
}
return &ast.CreateDomainStmt{
Domainname: convertSlice(n.Domainname),
TypeName: convertTypeName(n.TypeName),
CollClause: convertCollateClause(n.CollClause),
Constraints: convertSlice(n.Constraints),
}
}
func convertCreateEnumStmt(n *pg.CreateEnumStmt) *ast.CreateEnumStmt {
if n == nil {
return nil
}
rel, err := parseRelationFromNodes(n.TypeName)
if err != nil {
panic(err)
}
return &ast.CreateEnumStmt{
TypeName: rel.TypeName(),
Vals: convertSlice(n.Vals),
}
}
func convertCreateEventTrigStmt(n *pg.CreateEventTrigStmt) *ast.CreateEventTrigStmt {
if n == nil {
return nil
}
return &ast.CreateEventTrigStmt{
Trigname: makeString(n.Trigname),
Eventname: makeString(n.Eventname),
Whenclause: convertSlice(n.Whenclause),
Funcname: convertSlice(n.Funcname),
}
}
func convertCreateExtensionStmt(n *pg.CreateExtensionStmt) *ast.CreateExtensionStmt {
if n == nil {
return nil
}
return &ast.CreateExtensionStmt{
Extname: makeString(n.Extname),
IfNotExists: n.IfNotExists,
Options: convertSlice(n.Options),
}
}
func convertCreateFdwStmt(n *pg.CreateFdwStmt) *ast.CreateFdwStmt {
if n == nil {
return nil
}
return &ast.CreateFdwStmt{
Fdwname: makeString(n.Fdwname),
FuncOptions: convertSlice(n.FuncOptions),
Options: convertSlice(n.Options),
}
}
func convertCreateForeignServerStmt(n *pg.CreateForeignServerStmt) *ast.CreateForeignServerStmt {
if n == nil {
return nil
}
return &ast.CreateForeignServerStmt{
Servername: makeString(n.Servername),
Servertype: makeString(n.Servertype),
Version: makeString(n.Version),
Fdwname: makeString(n.Fdwname),
IfNotExists: n.IfNotExists,
Options: convertSlice(n.Options),
}
}
func convertCreateForeignTableStmt(n *pg.CreateForeignTableStmt) *ast.CreateForeignTableStmt {
if n == nil {
return nil
}
return &ast.CreateForeignTableStmt{
Servername: makeString(n.Servername),
Options: convertSlice(n.Options),
}
}
func convertCreateFunctionStmt(n *pg.CreateFunctionStmt) *ast.CreateFunctionStmt {
if n == nil {
return nil
}
rel, err := parseRelationFromNodes(n.Funcname)
if err != nil {
panic(err)
}
return &ast.CreateFunctionStmt{
Replace: n.Replace,
Func: rel.FuncName(),
Params: convertSlice(n.Parameters),
ReturnType: convertTypeName(n.ReturnType),
Options: convertSlice(n.Options),
}
}
func convertCreateOpClassItem(n *pg.CreateOpClassItem) *ast.CreateOpClassItem {
if n == nil {
return nil
}
return &ast.CreateOpClassItem{
Itemtype: int(n.Itemtype),
Name: convertObjectWithArgs(n.Name),
Number: int(n.Number),
OrderFamily: convertSlice(n.OrderFamily),
ClassArgs: convertSlice(n.ClassArgs),
Storedtype: convertTypeName(n.Storedtype),
}
}
func convertCreateOpClassStmt(n *pg.CreateOpClassStmt) *ast.CreateOpClassStmt {
if n == nil {
return nil
}
return &ast.CreateOpClassStmt{
Opclassname: convertSlice(n.Opclassname),
Opfamilyname: convertSlice(n.Opfamilyname),
Amname: makeString(n.Amname),
Datatype: convertTypeName(n.Datatype),
Items: convertSlice(n.Items),
IsDefault: n.IsDefault,
}
}
func convertCreateOpFamilyStmt(n *pg.CreateOpFamilyStmt) *ast.CreateOpFamilyStmt {
if n == nil {
return nil
}
return &ast.CreateOpFamilyStmt{
Opfamilyname: convertSlice(n.Opfamilyname),
Amname: makeString(n.Amname),
}
}
func convertCreatePLangStmt(n *pg.CreatePLangStmt) *ast.CreatePLangStmt {
if n == nil {
return nil
}
return &ast.CreatePLangStmt{
Replace: n.Replace,
Plname: makeString(n.Plname),
Plhandler: convertSlice(n.Plhandler),
Plinline: convertSlice(n.Plinline),
Plvalidator: convertSlice(n.Plvalidator),
Pltrusted: n.Pltrusted,
}
}
func convertCreatePolicyStmt(n *pg.CreatePolicyStmt) *ast.CreatePolicyStmt {
if n == nil {
return nil
}
return &ast.CreatePolicyStmt{
PolicyName: makeString(n.PolicyName),
Table: convertRangeVar(n.Table),
CmdName: makeString(n.CmdName),
Permissive: n.Permissive,
Roles: convertSlice(n.Roles),
Qual: convertNode(n.Qual),
WithCheck: convertNode(n.WithCheck),
}
}
func convertCreatePublicationStmt(n *pg.CreatePublicationStmt) *ast.CreatePublicationStmt {
if n == nil {
return nil
}
return &ast.CreatePublicationStmt{
Pubname: makeString(n.Pubname),
Options: convertSlice(n.Options),
Tables: convertSlice(n.Pubobjects),
ForAllTables: n.ForAllTables,
}
}
func convertCreateRangeStmt(n *pg.CreateRangeStmt) *ast.CreateRangeStmt {
if n == nil {
return nil
}
return &ast.CreateRangeStmt{
TypeName: convertSlice(n.TypeName),
Params: convertSlice(n.Params),
}
}
func convertCreateRoleStmt(n *pg.CreateRoleStmt) *ast.CreateRoleStmt {
if n == nil {
return nil
}
return &ast.CreateRoleStmt{
StmtType: ast.RoleStmtType(n.StmtType),
Role: makeString(n.Role),
Options: convertSlice(n.Options),
}
}
func convertCreateSchemaStmt(n *pg.CreateSchemaStmt) *ast.CreateSchemaStmt {
if n == nil {
return nil
}
return &ast.CreateSchemaStmt{
Name: makeString(n.Schemaname),
Authrole: convertRoleSpec(n.Authrole),
SchemaElts: convertSlice(n.SchemaElts),
IfNotExists: n.IfNotExists,
}
}
func convertCreateSeqStmt(n *pg.CreateSeqStmt) *ast.CreateSeqStmt {
if n == nil {
return nil
}
return &ast.CreateSeqStmt{
Sequence: convertRangeVar(n.Sequence),
Options: convertSlice(n.Options),
OwnerId: ast.Oid(n.OwnerId),
ForIdentity: n.ForIdentity,
IfNotExists: n.IfNotExists,
}
}
func convertCreateStatsStmt(n *pg.CreateStatsStmt) *ast.CreateStatsStmt {
if n == nil {
return nil
}
return &ast.CreateStatsStmt{
Defnames: convertSlice(n.Defnames),
StatTypes: convertSlice(n.StatTypes),
Exprs: convertSlice(n.Exprs),
Relations: convertSlice(n.Relations),
IfNotExists: n.IfNotExists,
}
}
func convertCreateStmt(n *pg.CreateStmt) *ast.CreateStmt {
if n == nil {
return nil
}
return &ast.CreateStmt{
Relation: convertRangeVar(n.Relation),
TableElts: convertSlice(n.TableElts),
InhRelations: convertSlice(n.InhRelations),
Partbound: convertPartitionBoundSpec(n.Partbound),
Partspec: convertPartitionSpec(n.Partspec),
OfTypename: convertTypeName(n.OfTypename),
Constraints: convertSlice(n.Constraints),
Options: convertSlice(n.Options),
Oncommit: ast.OnCommitAction(n.Oncommit),
Tablespacename: makeString(n.Tablespacename),
IfNotExists: n.IfNotExists,
}
}
func convertCreateSubscriptionStmt(n *pg.CreateSubscriptionStmt) *ast.CreateSubscriptionStmt {
if n == nil {
return nil
}
return &ast.CreateSubscriptionStmt{
Subname: makeString(n.Subname),
Conninfo: makeString(n.Conninfo),
Publication: convertSlice(n.Publication),
Options: convertSlice(n.Options),
}
}
func convertCreateTableAsStmt(n *pg.CreateTableAsStmt) *ast.CreateTableAsStmt {
if n == nil {
return nil
}
res := &ast.CreateTableAsStmt{
Query: convertNode(n.Query),
Into: convertIntoClause(n.Into),
Relkind: ast.ObjectType(n.Objtype),
IsSelectInto: n.IsSelectInto,
IfNotExists: n.IfNotExists,
}
return res
}
func convertCreateTableSpaceStmt(n *pg.CreateTableSpaceStmt) *ast.CreateTableSpaceStmt {
if n == nil {
return nil
}
return &ast.CreateTableSpaceStmt{
Tablespacename: makeString(n.Tablespacename),
Owner: convertRoleSpec(n.Owner),
Location: makeString(n.Location),
Options: convertSlice(n.Options),
}
}
func convertCreateTransformStmt(n *pg.CreateTransformStmt) *ast.CreateTransformStmt {
if n == nil {
return nil
}
return &ast.CreateTransformStmt{
Replace: n.Replace,
TypeName: convertTypeName(n.TypeName),
Lang: makeString(n.Lang),
Fromsql: convertObjectWithArgs(n.Fromsql),
Tosql: convertObjectWithArgs(n.Tosql),
}
}
func convertCreateTrigStmt(n *pg.CreateTrigStmt) *ast.CreateTrigStmt {
if n == nil {
return nil
}
return &ast.CreateTrigStmt{
Trigname: makeString(n.Trigname),
Relation: convertRangeVar(n.Relation),
Funcname: convertSlice(n.Funcname),
Args: convertSlice(n.Args),
Row: n.Row,
Timing: int16(n.Timing),
Events: int16(n.Events),
Columns: convertSlice(n.Columns),
WhenClause: convertNode(n.WhenClause),
Isconstraint: n.Isconstraint,
TransitionRels: convertSlice(n.TransitionRels),
Deferrable: n.Deferrable,
Initdeferred: n.Initdeferred,
Constrrel: convertRangeVar(n.Constrrel),
}
}
func convertCreateUserMappingStmt(n *pg.CreateUserMappingStmt) *ast.CreateUserMappingStmt {
if n == nil {
return nil
}
return &ast.CreateUserMappingStmt{
User: convertRoleSpec(n.User),
Servername: makeString(n.Servername),
IfNotExists: n.IfNotExists,
Options: convertSlice(n.Options),
}
}
func convertCreatedbStmt(n *pg.CreatedbStmt) *ast.CreatedbStmt {
if n == nil {
return nil
}
return &ast.CreatedbStmt{
Dbname: makeString(n.Dbname),
Options: convertSlice(n.Options),
}
}
func convertCurrentOfExpr(n *pg.CurrentOfExpr) *ast.CurrentOfExpr {
if n == nil {
return nil
}
return &ast.CurrentOfExpr{
Xpr: convertNode(n.Xpr),
Cvarno: ast.Index(n.Cvarno),
CursorName: makeString(n.CursorName),
CursorParam: int(n.CursorParam),
}
}
func convertDeallocateStmt(n *pg.DeallocateStmt) *ast.DeallocateStmt {
if n == nil {
return nil
}
return &ast.DeallocateStmt{
Name: makeString(n.Name),
}
}
func convertDeclareCursorStmt(n *pg.DeclareCursorStmt) *ast.DeclareCursorStmt {
if n == nil {
return nil
}
return &ast.DeclareCursorStmt{
Portalname: makeString(n.Portalname),
Options: int(n.Options),
Query: convertNode(n.Query),
}
}
func convertDefElem(n *pg.DefElem) *ast.DefElem {
if n == nil {
return nil
}
return &ast.DefElem{
Defnamespace: makeString(n.Defnamespace),
Defname: makeString(n.Defname),
Arg: convertNode(n.Arg),
Defaction: ast.DefElemAction(n.Defaction),
Location: int(n.Location),
}
}
func convertDefineStmt(n *pg.DefineStmt) *ast.DefineStmt {
if n == nil {
return nil
}
return &ast.DefineStmt{
Kind: ast.ObjectType(n.Kind),
Oldstyle: n.Oldstyle,
Defnames: convertSlice(n.Defnames),
Args: convertSlice(n.Args),
Definition: convertSlice(n.Definition),
IfNotExists: n.IfNotExists,
}
}
func convertDeleteStmt(n *pg.DeleteStmt) *ast.DeleteStmt {
if n == nil {
return nil
}
oldAlias, newAlias := convertReturningOptions(n.ReturningClause)
return &ast.DeleteStmt{
Relations: &ast.List{
Items: []ast.Node{convertRangeVar(n.Relation)},
},
UsingClause: convertSlice(n.UsingClause),
WhereClause: convertNode(n.WhereClause),
ReturningList: convertSlice(n.ReturningClause.GetExprs()),
ReturningOldAlias: oldAlias,
ReturningNewAlias: newAlias,
WithClause: convertWithClause(n.WithClause),
}
}
// convertReturningOptions extracts the aliases assigned to the OLD and NEW
// rows by a PostgreSQL 18 RETURNING WITH (...) option list.
func convertReturningOptions(n *pg.ReturningClause) (oldAlias, newAlias string) {
for _, option := range n.GetOptions() {
ro := option.GetReturningOption()
if ro == nil {
continue
}
switch ro.Option {
case pg.ReturningOptionKind_RETURNING_OPTION_OLD:
oldAlias = ro.Value
case pg.ReturningOptionKind_RETURNING_OPTION_NEW:
newAlias = ro.Value
}
}
return oldAlias, newAlias
}
func convertDiscardStmt(n *pg.DiscardStmt) *ast.DiscardStmt {
if n == nil {
return nil
}
return &ast.DiscardStmt{
Target: ast.DiscardMode(n.Target),
}
}
func convertDoStmt(n *pg.DoStmt) *ast.DoStmt {
if n == nil {
return nil
}
return &ast.DoStmt{
Args: convertSlice(n.Args),
}
}
func convertDropOwnedStmt(n *pg.DropOwnedStmt) *ast.DropOwnedStmt {
if n == nil {
return nil
}
return &ast.DropOwnedStmt{
Roles: convertSlice(n.Roles),
Behavior: ast.DropBehavior(n.Behavior),
}
}
func convertDropRoleStmt(n *pg.DropRoleStmt) *ast.DropRoleStmt {
if n == nil {
return nil
}
return &ast.DropRoleStmt{
Roles: convertSlice(n.Roles),
MissingOk: n.MissingOk,
}
}
func convertDropStmt(n *pg.DropStmt) *ast.DropStmt {
if n == nil {
return nil
}
return &ast.DropStmt{
Objects: convertSlice(n.Objects),
RemoveType: ast.ObjectType(n.RemoveType),
Behavior: ast.DropBehavior(n.Behavior),
MissingOk: n.MissingOk,
Concurrent: n.Concurrent,
}
}
func convertDropSubscriptionStmt(n *pg.DropSubscriptionStmt) *ast.DropSubscriptionStmt {
if n == nil {
return nil
}
return &ast.DropSubscriptionStmt{
Subname: makeString(n.Subname),
MissingOk: n.MissingOk,
Behavior: ast.DropBehavior(n.Behavior),
}
}
func convertDropTableSpaceStmt(n *pg.DropTableSpaceStmt) *ast.DropTableSpaceStmt {
if n == nil {
return nil
}
return &ast.DropTableSpaceStmt{
Tablespacename: makeString(n.Tablespacename),
MissingOk: n.MissingOk,
}
}
func convertDropUserMappingStmt(n *pg.DropUserMappingStmt) *ast.DropUserMappingStmt {
if n == nil {
return nil
}
return &ast.DropUserMappingStmt{
User: convertRoleSpec(n.User),
Servername: makeString(n.Servername),
MissingOk: n.MissingOk,
}
}
func convertDropdbStmt(n *pg.DropdbStmt) *ast.DropdbStmt {
if n == nil {
return nil
}
return &ast.DropdbStmt{
Dbname: makeString(n.Dbname),
MissingOk: n.MissingOk,
}
}
func convertExecuteStmt(n *pg.ExecuteStmt) *ast.ExecuteStmt {
if n == nil {
return nil
}
return &ast.ExecuteStmt{
Name: makeString(n.Name),
Params: convertSlice(n.Params),
}
}
func convertExplainStmt(n *pg.ExplainStmt) *ast.ExplainStmt {
if n == nil {
return nil
}
return &ast.ExplainStmt{
Query: convertNode(n.Query),
Options: convertSlice(n.Options),
}
}
func convertFetchStmt(n *pg.FetchStmt) *ast.FetchStmt {
if n == nil {
return nil
}
return &ast.FetchStmt{
Direction: ast.FetchDirection(n.Direction),
HowMany: n.HowMany,
Portalname: makeString(n.Portalname),
Ismove: n.Ismove,
}
}
func convertFieldSelect(n *pg.FieldSelect) *ast.FieldSelect {
if n == nil {
return nil
}
return &ast.FieldSelect{
Xpr: convertNode(n.Xpr),
Arg: convertNode(n.Arg),
Fieldnum: ast.AttrNumber(n.Fieldnum),
Resulttype: ast.Oid(n.Resulttype),
Resulttypmod: n.Resulttypmod,
Resultcollid: ast.Oid(n.Resultcollid),
}
}
func convertFieldStore(n *pg.FieldStore) *ast.FieldStore {
if n == nil {
return nil
}
return &ast.FieldStore{
Xpr: convertNode(n.Xpr),
Arg: convertNode(n.Arg),
Newvals: convertSlice(n.Newvals),
Fieldnums: convertSlice(n.Fieldnums),
Resulttype: ast.Oid(n.Resulttype),
}
}
func convertFloat(n *pg.Float) *ast.Float {
if n == nil {
return nil
}
return &ast.Float{
Str: n.Fval,
}
}
func convertFromExpr(n *pg.FromExpr) *ast.FromExpr {
if n == nil {
return nil
}
return &ast.FromExpr{
Fromlist: convertSlice(n.Fromlist),
Quals: convertNode(n.Quals),
}
}
func convertFuncCall(n *pg.FuncCall) *ast.FuncCall {
if n == nil {
return nil
}
rel, err := parseRelationFromNodes(n.Funcname)
if err != nil {
// TODO: How should we handle errors?
panic(err)
}
return &ast.FuncCall{
Func: rel.FuncName(),
Funcname: convertSlice(n.Funcname),
Args: convertSlice(n.Args),
AggOrder: convertSlice(n.AggOrder),
AggFilter: convertNode(n.AggFilter),
AggWithinGroup: n.AggWithinGroup,
AggStar: n.AggStar,
AggDistinct: n.AggDistinct,
FuncVariadic: n.FuncVariadic,
Over: convertWindowDef(n.Over),
Location: int(n.Location),
}
}
func convertFuncExpr(n *pg.FuncExpr) *ast.FuncExpr {
if n == nil {
return nil
}
return &ast.FuncExpr{
Xpr: convertNode(n.Xpr),
Funcid: ast.Oid(n.Funcid),
Funcresulttype: ast.Oid(n.Funcresulttype),
Funcretset: n.Funcretset,
Funcvariadic: n.Funcvariadic,
Funcformat: ast.CoercionForm(n.Funcformat),
Funccollid: ast.Oid(n.Funccollid),
Inputcollid: ast.Oid(n.Inputcollid),
Args: convertSlice(n.Args),
Location: int(n.Location),
}
}
func convertFunctionParameter(n *pg.FunctionParameter) *ast.FunctionParameter {
if n == nil {
return nil
}
return &ast.FunctionParameter{
Name: makeString(n.Name),
ArgType: convertTypeName(n.ArgType),
Mode: ast.FunctionParameterMode(n.Mode),
Defexpr: convertNode(n.Defexpr),
}
}
func convertGrantRoleStmt(n *pg.GrantRoleStmt) *ast.GrantRoleStmt {
if n == nil {
return nil
}
return &ast.GrantRoleStmt{
GrantedRoles: convertSlice(n.GrantedRoles),
GranteeRoles: convertSlice(n.GranteeRoles),
IsGrant: n.IsGrant,
Grantor: convertRoleSpec(n.Grantor),
Behavior: ast.DropBehavior(n.Behavior),
}
}
func convertGrantStmt(n *pg.GrantStmt) *ast.GrantStmt {
if n == nil {
return nil
}
return &ast.GrantStmt{
IsGrant: n.IsGrant,
Targtype: ast.GrantTargetType(n.Targtype),
Objtype: ast.GrantObjectType(n.Objtype),
Objects: convertSlice(n.Objects),
Privileges: convertSlice(n.Privileges),
Grantees: convertSlice(n.Grantees),
GrantOption: n.GrantOption,
Behavior: ast.DropBehavior(n.Behavior),
}
}
func convertGroupingFunc(n *pg.GroupingFunc) *ast.GroupingFunc {
if n == nil {
return nil
}
return &ast.GroupingFunc{
Xpr: convertNode(n.Xpr),
Args: convertSlice(n.Args),
Refs: convertSlice(n.Refs),
Agglevelsup: ast.Index(n.Agglevelsup),
Location: int(n.Location),
}
}
func convertGroupingSet(n *pg.GroupingSet) *ast.GroupingSet {
if n == nil {
return nil
}
return &ast.GroupingSet{
Kind: ast.GroupingSetKind(n.Kind),
Content: convertSlice(n.Content),
Location: int(n.Location),
}
}
func convertImportForeignSchemaStmt(n *pg.ImportForeignSchemaStmt) *ast.ImportForeignSchemaStmt {
if n == nil {
return nil
}
return &ast.ImportForeignSchemaStmt{
ServerName: makeString(n.ServerName),
RemoteSchema: makeString(n.RemoteSchema),
LocalSchema: makeString(n.LocalSchema),
ListType: ast.ImportForeignSchemaType(n.ListType),
TableList: convertSlice(n.TableList),
Options: convertSlice(n.Options),
}
}
func convertIndexElem(n *pg.IndexElem) *ast.IndexElem {
if n == nil {
return nil
}
return &ast.IndexElem{
Name: makeString(n.Name),
Expr: convertNode(n.Expr),
Indexcolname: makeString(n.Indexcolname),
Collation: convertSlice(n.Collation),
Opclass: convertSlice(n.Opclass),
Ordering: ast.SortByDir(n.Ordering),
NullsOrdering: ast.SortByNulls(n.NullsOrdering),
}
}
func convertIndexStmt(n *pg.IndexStmt) *ast.IndexStmt {
if n == nil {
return nil
}
return &ast.IndexStmt{
Idxname: makeString(n.Idxname),
Relation: convertRangeVar(n.Relation),
AccessMethod: makeString(n.AccessMethod),
TableSpace: makeString(n.TableSpace),
IndexParams: convertSlice(n.IndexParams),
Options: convertSlice(n.Options),
WhereClause: convertNode(n.WhereClause),
ExcludeOpNames: convertSlice(n.ExcludeOpNames),
Idxcomment: makeString(n.Idxcomment),
IndexOid: ast.Oid(n.IndexOid),
Unique: n.Unique,
Primary: n.Primary,
Isconstraint: n.Isconstraint,
Deferrable: n.Deferrable,
Initdeferred: n.Initdeferred,
Transformed: n.Transformed,
Concurrent: n.Concurrent,
IfNotExists: n.IfNotExists,
}
}
func convertInferClause(n *pg.InferClause) *ast.InferClause {
if n == nil {
return nil
}
return &ast.InferClause{
IndexElems: convertSlice(n.IndexElems),
WhereClause: convertNode(n.WhereClause),
Conname: makeString(n.Conname),
Location: int(n.Location),
}
}
func convertInferenceElem(n *pg.InferenceElem) *ast.InferenceElem {
if n == nil {
return nil
}
return &ast.InferenceElem{
Xpr: convertNode(n.Xpr),
Expr: convertNode(n.Expr),
Infercollid: ast.Oid(n.Infercollid),
Inferopclass: ast.Oid(n.Inferopclass),
}
}
func convertInlineCodeBlock(n *pg.InlineCodeBlock) *ast.InlineCodeBlock {
if n == nil {
return nil
}
return &ast.InlineCodeBlock{
SourceText: makeString(n.SourceText),
LangOid: ast.Oid(n.LangOid),
LangIsTrusted: n.LangIsTrusted,
}
}
func convertInsertStmt(n *pg.InsertStmt) *ast.InsertStmt {
if n == nil {
return nil
}
oldAlias, newAlias := convertReturningOptions(n.ReturningClause)
return &ast.InsertStmt{
Relation: convertRangeVar(n.Relation),
Cols: convertSlice(n.Cols),
SelectStmt: convertNode(n.SelectStmt),
OnConflictClause: convertOnConflictClause(n.OnConflictClause),
ReturningList: convertSlice(n.ReturningClause.GetExprs()),
ReturningOldAlias: oldAlias,
ReturningNewAlias: newAlias,
WithClause: convertWithClause(n.WithClause),
Override: ast.OverridingKind(n.Override),
}
}
func convertInteger(n *pg.Integer) *ast.Integer {
if n == nil {
return nil
}
return &ast.Integer{
Ival: int64(n.Ival),
}
}
func convertIntoClause(n *pg.IntoClause) *ast.IntoClause {
if n == nil {
return nil
}
var viewQuery ast.Node = &ast.TODO{}
if n.ViewQuery != nil {
viewQuery = convertQuery(n.ViewQuery)
}
return &ast.IntoClause{
Rel: convertRangeVar(n.Rel),
ColNames: convertSlice(n.ColNames),
Options: convertSlice(n.Options),
OnCommit: ast.OnCommitAction(n.OnCommit),
TableSpaceName: makeString(n.TableSpaceName),
ViewQuery: viewQuery,
SkipData: n.SkipData,
}
}
func convertJoinExpr(n *pg.JoinExpr) *ast.JoinExpr {
if n == nil {
return nil
}
jointype := ast.JoinType(n.Jointype)
// PostgreSQL parses CROSS JOIN as an inner join with no condition —
// the only inner join its grammar allows without one — so that shape
// is CROSS JOIN, and must print as it: a bare JOIN with no ON or
// USING is a syntax error in PostgreSQL.
if jointype == ast.JoinTypeInner && !n.IsNatural && n.Quals == nil && len(n.UsingClause) == 0 {
jointype = ast.JoinTypeCross
}
return &ast.JoinExpr{
Jointype: jointype,
IsNatural: n.IsNatural,
Larg: convertNode(n.Larg),
Rarg: convertNode(n.Rarg),
UsingClause: convertSlice(n.UsingClause),
Quals: convertNode(n.Quals),
Alias: convertAlias(n.Alias),
Rtindex: int(n.Rtindex),
}
}
func convertListenStmt(n *pg.ListenStmt) *ast.ListenStmt {
if n == nil {
return nil
}
return &ast.ListenStmt{
Conditionname: makeString(n.Conditionname),
}
}
func convertLoadStmt(n *pg.LoadStmt) *ast.LoadStmt {
if n == nil {
return nil
}
return &ast.LoadStmt{
Filename: makeString(n.Filename),
}
}
func convertLockStmt(n *pg.LockStmt) *ast.LockStmt {
if n == nil {
return nil
}
return &ast.LockStmt{
Relations: convertSlice(n.Relations),
Mode: int(n.Mode),
Nowait: n.Nowait,
}
}
func convertLockingClause(n *pg.LockingClause) *ast.LockingClause {
if n == nil {
return nil
}
return &ast.LockingClause{
LockedRels: convertSlice(n.LockedRels),
Strength: ast.LockClauseStrength(n.Strength),
WaitPolicy: ast.LockWaitPolicy(n.WaitPolicy),
}
}
func convertMinMaxExpr(n *pg.MinMaxExpr) *ast.MinMaxExpr {
if n == nil {
return nil
}
return &ast.MinMaxExpr{
Xpr: convertNode(n.Xpr),
Minmaxtype: ast.Oid(n.Minmaxtype),
Minmaxcollid: ast.Oid(n.Minmaxcollid),
Inputcollid: ast.Oid(n.Inputcollid),
Op: ast.MinMaxOp(n.Op),
Args: convertSlice(n.Args),
Location: int(n.Location),
}
}
func convertMultiAssignRef(n *pg.MultiAssignRef) *ast.MultiAssignRef {
if n == nil {
return nil
}
return &ast.MultiAssignRef{
Source: convertNode(n.Source),
Colno: int(n.Colno),
Ncolumns: int(n.Ncolumns),
}
}
func convertNamedArgExpr(n *pg.NamedArgExpr) *ast.NamedArgExpr {
if n == nil {
return nil
}
return &ast.NamedArgExpr{
Xpr: convertNode(n.Xpr),
Arg: convertNode(n.Arg),
Name: makeString(n.Name),
Argnumber: int(n.Argnumber),
Location: int(n.Location),
}
}
func convertNextValueExpr(n *pg.NextValueExpr) *ast.NextValueExpr {
if n == nil {
return nil
}
return &ast.NextValueExpr{
Xpr: convertNode(n.Xpr),
Seqid: ast.Oid(n.Seqid),
TypeId: ast.Oid(n.TypeId),
}
}
func convertNotifyStmt(n *pg.NotifyStmt) *ast.NotifyStmt {
if n == nil {
return nil
}
return &ast.NotifyStmt{
Conditionname: makeString(n.Conditionname),
Payload: makeString(n.Payload),
}
}
func convertNullTest(n *pg.NullTest) *ast.NullTest {
if n == nil {
return nil
}
return &ast.NullTest{
Xpr: convertNode(n.Xpr),
Arg: convertNode(n.Arg),
Nulltesttype: ast.NullTestType(n.Nulltesttype),
Argisrow: n.Argisrow,
Location: int(n.Location),
}
}
func convertNullIfExpr(n *pg.NullIfExpr) *ast.NullIfExpr {
if n == nil {
return nil
}
return &ast.NullIfExpr{
Xpr: convertNode(n.Xpr),
Opno: ast.Oid(n.Opno),
Opresulttype: ast.Oid(n.Opresulttype),
Opretset: n.Opretset,
Opcollid: ast.Oid(n.Opcollid),
Inputcollid: ast.Oid(n.Inputcollid),
Args: convertSlice(n.Args),
Location: int(n.Location),
}
}
func convertObjectWithArgs(n *pg.ObjectWithArgs) *ast.ObjectWithArgs {
if n == nil {
return nil
}
return &ast.ObjectWithArgs{
Objname: convertSlice(n.Objname),
Objargs: convertSlice(n.Objargs),
ArgsUnspecified: n.ArgsUnspecified,
}
}
func convertOnConflictClause(n *pg.OnConflictClause) *ast.OnConflictClause {
if n == nil {
return nil
}
return &ast.OnConflictClause{
Action: ast.OnConflictAction(n.Action),
Infer: convertInferClause(n.Infer),
TargetList: convertSlice(n.TargetList),
WhereClause: convertNode(n.WhereClause),
Location: int(n.Location),
}
}
func convertOnConflictExpr(n *pg.OnConflictExpr) *ast.OnConflictExpr {
if n == nil {
return nil
}
return &ast.OnConflictExpr{
Action: ast.OnConflictAction(n.Action),
ArbiterElems: convertSlice(n.ArbiterElems),
ArbiterWhere: convertNode(n.ArbiterWhere),
Constraint: ast.Oid(n.Constraint),
OnConflictSet: convertSlice(n.OnConflictSet),
OnConflictWhere: convertNode(n.OnConflictWhere),
ExclRelIndex: int(n.ExclRelIndex),
ExclRelTlist: convertSlice(n.ExclRelTlist),
}
}
func convertOpExpr(n *pg.OpExpr) *ast.OpExpr {
if n == nil {
return nil
}
return &ast.OpExpr{
Xpr: convertNode(n.Xpr),
Opno: ast.Oid(n.Opno),
Opresulttype: ast.Oid(n.Opresulttype),
Opretset: n.Opretset,
Opcollid: ast.Oid(n.Opcollid),
Inputcollid: ast.Oid(n.Inputcollid),
Args: convertSlice(n.Args),
Location: int(n.Location),
}
}
func convertParam(n *pg.Param) *ast.Param {
if n == nil {
return nil
}
return &ast.Param{
Xpr: convertNode(n.Xpr),
Paramkind: ast.ParamKind(n.Paramkind),
Paramid: int(n.Paramid),
Paramtype: ast.Oid(n.Paramtype),
Paramtypmod: n.Paramtypmod,
Paramcollid: ast.Oid(n.Paramcollid),
Location: int(n.Location),
}
}
func convertParamRef(n *pg.ParamRef) *ast.ParamRef {
if n == nil {
return nil
}
var dollar bool
if n.Number != 0 {
dollar = true
}
return &ast.ParamRef{
Dollar: dollar,
Number: int(n.Number),
Location: int(n.Location),
}
}
func convertPartitionBoundSpec(n *pg.PartitionBoundSpec) *ast.PartitionBoundSpec {
if n == nil {
return nil
}
return &ast.PartitionBoundSpec{
Strategy: makeByte(n.Strategy),
Listdatums: convertSlice(n.Listdatums),
Lowerdatums: convertSlice(n.Lowerdatums),
Upperdatums: convertSlice(n.Upperdatums),
Location: int(n.Location),
}
}
func convertPartitionCmd(n *pg.PartitionCmd) *ast.PartitionCmd {
if n == nil {
return nil
}
return &ast.PartitionCmd{
Name: convertRangeVar(n.Name),
Bound: convertPartitionBoundSpec(n.Bound),
}
}
func convertPartitionElem(n *pg.PartitionElem) *ast.PartitionElem {
if n == nil {
return nil
}
return &ast.PartitionElem{
Name: makeString(n.Name),
Expr: convertNode(n.Expr),
Collation: convertSlice(n.Collation),
Opclass: convertSlice(n.Opclass),
Location: int(n.Location),
}
}
func convertPartitionRangeDatum(n *pg.PartitionRangeDatum) *ast.PartitionRangeDatum {
if n == nil {
return nil
}
return &ast.PartitionRangeDatum{
Kind: ast.PartitionRangeDatumKind(n.Kind),
Value: convertNode(n.Value),
Location: int(n.Location),
}
}
func convertPartitionSpec(n *pg.PartitionSpec) *ast.PartitionSpec {
if n == nil {
return nil
}
return &ast.PartitionSpec{
Strategy: makeString(n.Strategy.String()),
PartParams: convertSlice(n.PartParams),
Location: int(n.Location),
}
}
func convertPrepareStmt(n *pg.PrepareStmt) *ast.PrepareStmt {
if n == nil {
return nil
}
return &ast.PrepareStmt{
Name: makeString(n.Name),
Argtypes: convertSlice(n.Argtypes),
Query: convertNode(n.Query),
}
}
func convertQuery(n *pg.Query) *ast.Query {
if n == nil {
return nil
}
return &ast.Query{
CommandType: ast.CmdType(n.CommandType),
QuerySource: ast.QuerySource(n.QuerySource),
CanSetTag: n.CanSetTag,
UtilityStmt: convertNode(n.UtilityStmt),
ResultRelation: int(n.ResultRelation),
HasAggs: n.HasAggs,
HasWindowFuncs: n.HasWindowFuncs,
HasTargetSrfs: n.HasTargetSrfs,
HasSubLinks: n.HasSubLinks,
HasDistinctOn: n.HasDistinctOn,
HasRecursive: n.HasRecursive,
HasModifyingCte: n.HasModifyingCte,
HasForUpdate: n.HasForUpdate,
HasRowSecurity: n.HasRowSecurity,
CteList: convertSlice(n.CteList),
Rtable: convertSlice(n.Rtable),
Jointree: convertFromExpr(n.Jointree),
TargetList: convertSlice(n.TargetList),
Override: ast.OverridingKind(n.Override),
OnConflict: convertOnConflictExpr(n.OnConflict),
ReturningList: convertSlice(n.ReturningList),
GroupClause: convertSlice(n.GroupClause),
GroupingSets: convertSlice(n.GroupingSets),
HavingQual: convertNode(n.HavingQual),
WindowClause: convertSlice(n.WindowClause),
DistinctClause: convertSlice(n.DistinctClause),
SortClause: convertSlice(n.SortClause),
LimitOffset: convertNode(n.LimitOffset),
LimitCount: convertNode(n.LimitCount),
RowMarks: convertSlice(n.RowMarks),
SetOperations: convertNode(n.SetOperations),
ConstraintDeps: convertSlice(n.ConstraintDeps),
WithCheckOptions: convertSlice(n.WithCheckOptions),
StmtLocation: int(n.StmtLocation),
StmtLen: int(n.StmtLen),
}
}
func convertRangeFunction(n *pg.RangeFunction) *ast.RangeFunction {
if n == nil {
return nil
}
return &ast.RangeFunction{
Lateral: n.Lateral,
Ordinality: n.Ordinality,
IsRowsfrom: n.IsRowsfrom,
Functions: convertSlice(n.Functions),
Alias: convertAlias(n.Alias),
Coldeflist: convertSlice(n.Coldeflist),
}
}
func convertRangeSubselect(n *pg.RangeSubselect) *ast.RangeSubselect {
if n == nil {
return nil
}
return &ast.RangeSubselect{
Lateral: n.Lateral,
Subquery: convertNode(n.Subquery),
Alias: convertAlias(n.Alias),
}
}
func convertRangeTableFunc(n *pg.RangeTableFunc) *ast.RangeTableFunc {
if n == nil {
return nil
}
return &ast.RangeTableFunc{
Lateral: n.Lateral,
Docexpr: convertNode(n.Docexpr),
Rowexpr: convertNode(n.Rowexpr),
Namespaces: convertSlice(n.Namespaces),
Columns: convertSlice(n.Columns),
Alias: convertAlias(n.Alias),
Location: int(n.Location),
}
}
func convertRangeTableFuncCol(n *pg.RangeTableFuncCol) *ast.RangeTableFuncCol {
if n == nil {
return nil
}
return &ast.RangeTableFuncCol{
Colname: makeString(n.Colname),
TypeName: convertTypeName(n.TypeName),
ForOrdinality: n.ForOrdinality,
IsNotNull: n.IsNotNull,
Colexpr: convertNode(n.Colexpr),
Coldefexpr: convertNode(n.Coldefexpr),
Location: int(n.Location),
}
}
func convertRangeTableSample(n *pg.RangeTableSample) *ast.RangeTableSample {
if n == nil {
return nil
}
return &ast.RangeTableSample{
Relation: convertNode(n.Relation),
Method: convertSlice(n.Method),
Args: convertSlice(n.Args),
Repeatable: convertNode(n.Repeatable),
Location: int(n.Location),
}
}
func convertRangeTblEntry(n *pg.RangeTblEntry) *ast.RangeTblEntry {
if n == nil {
return nil
}
return &ast.RangeTblEntry{
Rtekind: ast.RTEKind(n.Rtekind),
Relid: ast.Oid(n.Relid),
Relkind: makeByte(n.Relkind),
Tablesample: convertTableSampleClause(n.Tablesample),
Subquery: convertQuery(n.Subquery),
SecurityBarrier: n.SecurityBarrier,
Jointype: ast.JoinType(n.Jointype),
Joinaliasvars: convertSlice(n.Joinaliasvars),
Functions: convertSlice(n.Functions),
Funcordinality: n.Funcordinality,
Tablefunc: convertTableFunc(n.Tablefunc),
ValuesLists: convertSlice(n.ValuesLists),
Ctename: makeString(n.Ctename),
Ctelevelsup: ast.Index(n.Ctelevelsup),
SelfReference: n.SelfReference,
Coltypes: convertSlice(n.Coltypes),
Coltypmods: convertSlice(n.Coltypmods),
Colcollations: convertSlice(n.Colcollations),
Enrname: makeString(n.Enrname),
Enrtuples: n.Enrtuples,
Alias: convertAlias(n.Alias),
Eref: convertAlias(n.Eref),
Lateral: n.Lateral,
Inh: n.Inh,
InFromCl: n.InFromCl,
SecurityQuals: convertSlice(n.SecurityQuals),
}
}
func convertRangeTblFunction(n *pg.RangeTblFunction) *ast.RangeTblFunction {
if n == nil {
return nil
}
return &ast.RangeTblFunction{
Funcexpr: convertNode(n.Funcexpr),
Funccolcount: int(n.Funccolcount),
Funccolnames: convertSlice(n.Funccolnames),
Funccoltypes: convertSlice(n.Funccoltypes),
Funccoltypmods: convertSlice(n.Funccoltypmods),
Funccolcollations: convertSlice(n.Funccolcollations),
Funcparams: makeUint32Slice(n.Funcparams),
}
}
func convertRangeTblRef(n *pg.RangeTblRef) *ast.RangeTblRef {
if n == nil {
return nil
}
return &ast.RangeTblRef{
Rtindex: int(n.Rtindex),
}
}
func convertRangeVar(n *pg.RangeVar) *ast.RangeVar {
if n == nil {
return nil
}
return &ast.RangeVar{
Catalogname: makeString(n.Catalogname),
Schemaname: makeString(n.Schemaname),
Relname: makeString(n.Relname),
Inh: n.Inh,
Relpersistence: makeByte(n.Relpersistence),
Alias: convertAlias(n.Alias),
Location: int(n.Location),
}
}
func convertRawStmt(n *pg.RawStmt) *ast.RawStmt {
if n == nil {
return nil
}
return &ast.RawStmt{
Stmt: convertNode(n.Stmt),
StmtLocation: int(n.StmtLocation),
StmtLen: int(n.StmtLen),
}
}
func convertReassignOwnedStmt(n *pg.ReassignOwnedStmt) *ast.ReassignOwnedStmt {
if n == nil {
return nil
}
return &ast.ReassignOwnedStmt{
Roles: convertSlice(n.Roles),
Newrole: convertRoleSpec(n.Newrole),
}
}
func convertRefreshMatViewStmt(n *pg.RefreshMatViewStmt) *ast.RefreshMatViewStmt {
if n == nil {
return nil
}
return &ast.RefreshMatViewStmt{
Concurrent: n.Concurrent,
SkipData: n.SkipData,
Relation: convertRangeVar(n.Relation),
}
}
func convertReindexStmt(n *pg.ReindexStmt) *ast.ReindexStmt {
if n == nil {
return nil
}
return &ast.ReindexStmt{
Kind: ast.ReindexObjectType(n.Kind),
Relation: convertRangeVar(n.Relation),
Name: makeString(n.Name),
// Options: int(n.Options), TODO: Support params
}
}
func convertRelabelType(n *pg.RelabelType) *ast.RelabelType {
if n == nil {
return nil
}
return &ast.RelabelType{
Xpr: convertNode(n.Xpr),
Arg: convertNode(n.Arg),
Resulttype: ast.Oid(n.Resulttype),
Resulttypmod: n.Resulttypmod,
Resultcollid: ast.Oid(n.Resultcollid),
Relabelformat: ast.CoercionForm(n.Relabelformat),
Location: int(n.Location),
}
}
func convertRenameStmt(n *pg.RenameStmt) *ast.RenameStmt {
if n == nil {
return nil
}
return &ast.RenameStmt{
RenameType: ast.ObjectType(n.RenameType),
RelationType: ast.ObjectType(n.RelationType),
Relation: convertRangeVar(n.Relation),
Object: convertNode(n.Object),
Subname: makeString(n.Subname),
Newname: makeString(n.Newname),
Behavior: ast.DropBehavior(n.Behavior),
MissingOk: n.MissingOk,
}
}
func convertReplicaIdentityStmt(n *pg.ReplicaIdentityStmt) *ast.ReplicaIdentityStmt {
if n == nil {
return nil
}
return &ast.ReplicaIdentityStmt{
IdentityType: makeByte(n.IdentityType),
Name: makeString(n.Name),
}
}
func convertResTarget(n *pg.ResTarget) *ast.ResTarget {
if n == nil {
return nil
}
return &ast.ResTarget{
Name: makeString(n.Name),
Indirection: convertSlice(n.Indirection),
Val: convertNode(n.Val),
Location: int(n.Location),
}
}
func convertRoleSpec(n *pg.RoleSpec) *ast.RoleSpec {
if n == nil {
return nil
}
return &ast.RoleSpec{
Roletype: ast.RoleSpecType(n.Roletype),
Rolename: makeString(n.Rolename),
Location: int(n.Location),
}
}
func convertRowCompareExpr(n *pg.RowCompareExpr) *ast.RowCompareExpr {
if n == nil {
return nil
}
return &ast.RowCompareExpr{
Xpr: convertNode(n.Xpr),
Rctype: ast.RowCompareType(n.Cmptype),
Opnos: convertSlice(n.Opnos),
Opfamilies: convertSlice(n.Opfamilies),
Inputcollids: convertSlice(n.Inputcollids),
Largs: convertSlice(n.Largs),
Rargs: convertSlice(n.Rargs),
}
}
func convertRowExpr(n *pg.RowExpr) *ast.RowExpr {
if n == nil {
return nil
}
return &ast.RowExpr{
Xpr: convertNode(n.Xpr),
Args: convertSlice(n.Args),
RowTypeid: ast.Oid(n.RowTypeid),
RowFormat: ast.CoercionForm(n.RowFormat),
Colnames: convertSlice(n.Colnames),
Location: int(n.Location),
}
}
func convertRowMarkClause(n *pg.RowMarkClause) *ast.RowMarkClause {
if n == nil {
return nil
}
return &ast.RowMarkClause{
Rti: ast.Index(n.Rti),
Strength: ast.LockClauseStrength(n.Strength),
WaitPolicy: ast.LockWaitPolicy(n.WaitPolicy),
PushedDown: n.PushedDown,
}
}
func convertRuleStmt(n *pg.RuleStmt) *ast.RuleStmt {
if n == nil {
return nil
}
return &ast.RuleStmt{
Relation: convertRangeVar(n.Relation),
Rulename: makeString(n.Rulename),
WhereClause: convertNode(n.WhereClause),
Event: ast.CmdType(n.Event),
Instead: n.Instead,
Actions: convertSlice(n.Actions),
Replace: n.Replace,
}
}
func convertSQLValueFunction(n *pg.SQLValueFunction) *ast.SQLValueFunction {
if n == nil {
return nil
}
return &ast.SQLValueFunction{
Xpr: convertNode(n.Xpr),
Op: ast.SQLValueFunctionOp(n.Op),
Type: ast.Oid(n.Type),
Typmod: n.Typmod,
Location: int(n.Location),
}
}
func convertScalarArrayOpExpr(n *pg.ScalarArrayOpExpr) *ast.ScalarArrayOpExpr {
if n == nil {
return nil
}
return &ast.ScalarArrayOpExpr{
Xpr: convertNode(n.Xpr),
Opno: ast.Oid(n.Opno),
UseOr: n.UseOr,
Inputcollid: ast.Oid(n.Inputcollid),
Args: convertSlice(n.Args),
Location: int(n.Location),
}
}
func convertSecLabelStmt(n *pg.SecLabelStmt) *ast.SecLabelStmt {
if n == nil {
return nil
}
return &ast.SecLabelStmt{
Objtype: ast.ObjectType(n.Objtype),
Object: convertNode(n.Object),
Provider: makeString(n.Provider),
Label: makeString(n.Label),
}
}
func convertSelectStmt(n *pg.SelectStmt) *ast.SelectStmt {
if n == nil {
return nil
}
op, err := convertSetOperation(n.Op)
if err != nil {
panic(err)
}
return &ast.SelectStmt{
DistinctClause: convertSlice(n.DistinctClause),
IntoClause: convertIntoClause(n.IntoClause),
TargetList: convertSlice(n.TargetList),
FromClause: convertSlice(n.FromClause),
WhereClause: convertNode(n.WhereClause),
GroupClause: convertSlice(n.GroupClause),
HavingClause: convertNode(n.HavingClause),
WindowClause: convertSlice(n.WindowClause),
ValuesLists: convertSlice(n.ValuesLists),
SortClause: convertSlice(n.SortClause),
LimitOffset: convertNode(n.LimitOffset),
LimitCount: convertNode(n.LimitCount),
LockingClause: convertSlice(n.LockingClause),
WithClause: convertWithClause(n.WithClause),
Op: op,
All: n.All,
Larg: convertSelectStmt(n.Larg),
Rarg: convertSelectStmt(n.Rarg),
}
}
func convertSetOperationStmt(n *pg.SetOperationStmt) *ast.SetOperationStmt {
if n == nil {
return nil
}
op, err := convertSetOperation(n.Op)
if err != nil {
panic(err)
}
return &ast.SetOperationStmt{
Op: op,
All: n.All,
Larg: convertNode(n.Larg),
Rarg: convertNode(n.Rarg),
ColTypes: convertSlice(n.ColTypes),
ColTypmods: convertSlice(n.ColTypmods),
ColCollations: convertSlice(n.ColCollations),
GroupClauses: convertSlice(n.GroupClauses),
}
}
func convertSetToDefault(n *pg.SetToDefault) *ast.SetToDefault {
if n == nil {
return nil
}
return &ast.SetToDefault{
Xpr: convertNode(n.Xpr),
TypeId: ast.Oid(n.TypeId),
TypeMod: n.TypeMod,
Collation: ast.Oid(n.Collation),
Location: int(n.Location),
}
}
func convertSortBy(n *pg.SortBy) *ast.SortBy {
if n == nil {
return nil
}
return &ast.SortBy{
Node: convertNode(n.Node),
SortbyDir: ast.SortByDir(n.SortbyDir),
SortbyNulls: ast.SortByNulls(n.SortbyNulls),
UseOp: convertSlice(n.UseOp),
Location: int(n.Location),
}
}
func convertSortGroupClause(n *pg.SortGroupClause) *ast.SortGroupClause {
if n == nil {
return nil
}
return &ast.SortGroupClause{
TleSortGroupRef: ast.Index(n.TleSortGroupRef),
Eqop: ast.Oid(n.Eqop),
Sortop: ast.Oid(n.Sortop),
NullsFirst: n.NullsFirst,
Hashable: n.Hashable,
}
}
func convertString(n *pg.String) *ast.String {
if n == nil {
return nil
}
return &ast.String{
Str: n.Sval,
}
}
func convertSubLink(n *pg.SubLink) *ast.SubLink {
if n == nil {
return nil
}
slt, err := convertSubLinkType(n.SubLinkType)
if err != nil {
panic(err)
}
return &ast.SubLink{
Xpr: convertNode(n.Xpr),
SubLinkType: slt,
SubLinkId: int(n.SubLinkId),
Testexpr: convertNode(n.Testexpr),
OperName: convertSlice(n.OperName),
Subselect: convertNode(n.Subselect),
Location: int(n.Location),
}
}
func convertSubPlan(n *pg.SubPlan) *ast.SubPlan {
if n == nil {
return nil
}
slt, err := convertSubLinkType(n.SubLinkType)
if err != nil {
panic(err)
}
return &ast.SubPlan{
Xpr: convertNode(n.Xpr),
SubLinkType: slt,
Testexpr: convertNode(n.Testexpr),
ParamIds: convertSlice(n.ParamIds),
PlanId: int(n.PlanId),
PlanName: makeString(n.PlanName),
FirstColType: ast.Oid(n.FirstColType),
FirstColTypmod: n.FirstColTypmod,
FirstColCollation: ast.Oid(n.FirstColCollation),
UseHashTable: n.UseHashTable,
UnknownEqFalse: n.UnknownEqFalse,
ParallelSafe: n.ParallelSafe,
SetParam: convertSlice(n.SetParam),
ParParam: convertSlice(n.ParParam),
Args: convertSlice(n.Args),
StartupCost: ast.Cost(n.StartupCost),
PerCallCost: ast.Cost(n.PerCallCost),
}
}
func convertTableFunc(n *pg.TableFunc) *ast.TableFunc {
if n == nil {
return nil
}
return &ast.TableFunc{
NsUris: convertSlice(n.NsUris),
NsNames: convertSlice(n.NsNames),
Docexpr: convertNode(n.Docexpr),
Rowexpr: convertNode(n.Rowexpr),
Colnames: convertSlice(n.Colnames),
Coltypes: convertSlice(n.Coltypes),
Coltypmods: convertSlice(n.Coltypmods),
Colcollations: convertSlice(n.Colcollations),
Colexprs: convertSlice(n.Colexprs),
Coldefexprs: convertSlice(n.Coldefexprs),
Notnulls: makeUint32Slice(n.Notnulls),
Ordinalitycol: int(n.Ordinalitycol),
Location: int(n.Location),
}
}
func convertTableLikeClause(n *pg.TableLikeClause) *ast.TableLikeClause {
if n == nil {
return nil
}
return &ast.TableLikeClause{
Relation: convertRangeVar(n.Relation),
Options: n.Options,
}
}
func convertTableSampleClause(n *pg.TableSampleClause) *ast.TableSampleClause {
if n == nil {
return nil
}
return &ast.TableSampleClause{
Tsmhandler: ast.Oid(n.Tsmhandler),
Args: convertSlice(n.Args),
Repeatable: convertNode(n.Repeatable),
}
}
func convertTargetEntry(n *pg.TargetEntry) *ast.TargetEntry {
if n == nil {
return nil
}
return &ast.TargetEntry{
Xpr: convertNode(n.Xpr),
Expr: convertNode(n.Expr),
Resno: ast.AttrNumber(n.Resno),
Resname: makeString(n.Resname),
Ressortgroupref: ast.Index(n.Ressortgroupref),
Resorigtbl: ast.Oid(n.Resorigtbl),
Resorigcol: ast.AttrNumber(n.Resorigcol),
Resjunk: n.Resjunk,
}
}
func convertTransactionStmt(n *pg.TransactionStmt) *ast.TransactionStmt {
if n == nil {
return nil
}
return &ast.TransactionStmt{
Kind: ast.TransactionStmtKind(n.Kind),
Options: convertSlice(n.Options),
Gid: makeString(n.Gid),
}
}
func convertTriggerTransition(n *pg.TriggerTransition) *ast.TriggerTransition {
if n == nil {
return nil
}
return &ast.TriggerTransition{
Name: makeString(n.Name),
IsNew: n.IsNew,
IsTable: n.IsTable,
}
}
func convertTruncateStmt(n *pg.TruncateStmt) *ast.TruncateStmt {
if n == nil {
return nil
}
return &ast.TruncateStmt{
Relations: convertSlice(n.Relations),
RestartSeqs: n.RestartSeqs,
Behavior: ast.DropBehavior(n.Behavior),
}
}
func convertTypeCast(n *pg.TypeCast) *ast.TypeCast {
if n == nil {
return nil
}
return &ast.TypeCast{
Arg: convertNode(n.Arg),
TypeName: convertTypeName(n.TypeName),
Location: int(n.Location),
}
}
func convertTypeName(n *pg.TypeName) *ast.TypeName {
if n == nil {
return nil
}
out := &ast.TypeName{
Names: convertSlice(n.Names),
TypeOid: ast.Oid(n.TypeOid),
Setof: n.Setof,
PctType: n.PctType,
Typmods: convertSlice(n.Typmods),
Typemod: n.Typemod,
ArrayBounds: convertSlice(n.ArrayBounds),
Location: int(n.Location),
}
decodeIntervalTypmods(out)
return out
}
// decodeIntervalTypmods turns the field mask an interval's first type
// modifier carries — what the parser reports for CAST(x AS interval day to
// second) — into the words format_type prints, as a column definition's
// type does; the full range is dropped.
func decodeIntervalTypmods(tn *ast.TypeName) {
if tn.Typmods == nil || len(tn.Typmods.Items) == 0 || len(tn.Names.Items) == 0 {
return
}
last, ok := tn.Names.Items[len(tn.Names.Items)-1].(*ast.String)
if !ok || last.Str != "interval" {
return
}
c, ok := tn.Typmods.Items[0].(*ast.A_Const)
if !ok {
return
}
mask, ok := c.Val.(*ast.Integer)
if !ok {
return
}
fields, ok := intervalFields[int32(mask.Ival)]
if !ok {
return
}
rest := tn.Typmods.Items[1:]
if fields != "" {
rest = append([]ast.Node{&ast.String{Str: fields}}, rest...)
}
if len(rest) == 0 {
tn.Typmods = nil
return
}
tn.Typmods = &ast.List{Items: rest}
}
func convertUnlistenStmt(n *pg.UnlistenStmt) *ast.UnlistenStmt {
if n == nil {
return nil
}
return &ast.UnlistenStmt{
Conditionname: makeString(n.Conditionname),
}
}
func convertUpdateStmt(n *pg.UpdateStmt) *ast.UpdateStmt {
if n == nil {
return nil
}
oldAlias, newAlias := convertReturningOptions(n.ReturningClause)
return &ast.UpdateStmt{
Relations: &ast.List{
Items: []ast.Node{convertRangeVar(n.Relation)},
},
TargetList: convertSlice(n.TargetList),
WhereClause: convertNode(n.WhereClause),
FromClause: convertSlice(n.FromClause),
ReturningList: convertSlice(n.ReturningClause.GetExprs()),
ReturningOldAlias: oldAlias,
ReturningNewAlias: newAlias,
WithClause: convertWithClause(n.WithClause),
}
}
func convertVacuumStmt(n *pg.VacuumStmt) *ast.VacuumStmt {
if n == nil {
return nil
}
return &ast.VacuumStmt{
// FIXME: The VacuumStmt node has changed quite a bit
// Options: n.Options
// Relation: convertRangeVar(n.Relation),
// VaCols: convertSlice(n.VaCols),
}
}
func convertVar(n *pg.Var) *ast.Var {
if n == nil {
return nil
}
return &ast.Var{
Xpr: convertNode(n.Xpr),
Varno: ast.Index(n.Varno),
Varattno: ast.AttrNumber(n.Varattno),
Vartype: ast.Oid(n.Vartype),
Vartypmod: n.Vartypmod,
Varcollid: ast.Oid(n.Varcollid),
Varlevelsup: ast.Index(n.Varlevelsup),
Location: int(n.Location),
}
}
func convertVariableSetStmt(n *pg.VariableSetStmt) *ast.VariableSetStmt {
if n == nil {
return nil
}
return &ast.VariableSetStmt{
Kind: ast.VariableSetKind(n.Kind),
Name: makeString(n.Name),
Args: convertSlice(n.Args),
IsLocal: n.IsLocal,
}
}
func convertVariableShowStmt(n *pg.VariableShowStmt) *ast.VariableShowStmt {
if n == nil {
return nil
}
return &ast.VariableShowStmt{
Name: makeString(n.Name),
}
}
func convertViewStmt(n *pg.ViewStmt) *ast.ViewStmt {
if n == nil {
return nil
}
return &ast.ViewStmt{
View: convertRangeVar(n.View),
Aliases: convertSlice(n.Aliases),
Query: convertNode(n.Query),
Replace: n.Replace,
Options: convertSlice(n.Options),
WithCheckOption: ast.ViewCheckOption(n.WithCheckOption),
}
}
func convertWindowClause(n *pg.WindowClause) *ast.WindowClause {
if n == nil {
return nil
}
return &ast.WindowClause{
Name: makeString(n.Name),
Refname: makeString(n.Refname),
PartitionClause: convertSlice(n.PartitionClause),
OrderClause: convertSlice(n.OrderClause),
FrameOptions: int(n.FrameOptions),
StartOffset: convertNode(n.StartOffset),
EndOffset: convertNode(n.EndOffset),
Winref: ast.Index(n.Winref),
CopiedOrder: n.CopiedOrder,
}
}
func convertWindowDef(n *pg.WindowDef) *ast.WindowDef {
if n == nil {
return nil
}
return &ast.WindowDef{
Name: makeString(n.Name),
Refname: makeString(n.Refname),
PartitionClause: convertSlice(n.PartitionClause),
OrderClause: convertSlice(n.OrderClause),
FrameOptions: int(n.FrameOptions),
StartOffset: convertNode(n.StartOffset),
EndOffset: convertNode(n.EndOffset),
Location: int(n.Location),
}
}
func convertWindowFunc(n *pg.WindowFunc) *ast.WindowFunc {
if n == nil {
return nil
}
return &ast.WindowFunc{
Xpr: convertNode(n.Xpr),
Winfnoid: ast.Oid(n.Winfnoid),
Wintype: ast.Oid(n.Wintype),
Wincollid: ast.Oid(n.Wincollid),
Inputcollid: ast.Oid(n.Inputcollid),
Args: convertSlice(n.Args),
Aggfilter: convertNode(n.Aggfilter),
Winref: ast.Index(n.Winref),
Winstar: n.Winstar,
Winagg: n.Winagg,
Location: int(n.Location),
}
}
func convertWithCheckOption(n *pg.WithCheckOption) *ast.WithCheckOption {
if n == nil {
return nil
}
return &ast.WithCheckOption{
Kind: ast.WCOKind(n.Kind),
Relname: makeString(n.Relname),
Polname: makeString(n.Polname),
Qual: convertNode(n.Qual),
Cascaded: n.Cascaded,
}
}
func convertWithClause(n *pg.WithClause) *ast.WithClause {
if n == nil {
return nil
}
return &ast.WithClause{
Ctes: convertSlice(n.Ctes),
Recursive: n.Recursive,
Location: int(n.Location),
}
}
func convertXmlExpr(n *pg.XmlExpr) *ast.XmlExpr {
if n == nil {
return nil
}
return &ast.XmlExpr{
Xpr: convertNode(n.Xpr),
Op: ast.XmlExprOp(n.Op),
Name: makeString(n.Name),
NamedArgs: convertSlice(n.NamedArgs),
ArgNames: convertSlice(n.ArgNames),
Args: convertSlice(n.Args),
Xmloption: ast.XmlOptionType(n.Xmloption),
Type: ast.Oid(n.Type),
Typmod: n.Typmod,
Location: int(n.Location),
}
}
func convertXmlSerialize(n *pg.XmlSerialize) *ast.XmlSerialize {
if n == nil {
return nil
}
return &ast.XmlSerialize{
Xmloption: ast.XmlOptionType(n.Xmloption),
Expr: convertNode(n.Expr),
TypeName: convertTypeName(n.TypeName),
Location: int(n.Location),
}
}
func convertNode(node *pg.Node) ast.Node {
if node == nil || node.Node == nil {
return &ast.TODO{}
}
switch n := node.Node.(type) {
case *pg.Node_AArrayExpr:
return convertA_ArrayExpr(n.AArrayExpr)
case *pg.Node_AConst:
return convertA_Const(n.AConst)
case *pg.Node_AExpr:
return convertA_Expr(n.AExpr)
case *pg.Node_AIndices:
return convertA_Indices(n.AIndices)
case *pg.Node_AIndirection:
return convertA_Indirection(n.AIndirection)
case *pg.Node_AStar:
return convertA_Star(n.AStar)
case *pg.Node_AccessPriv:
return convertAccessPriv(n.AccessPriv)
case *pg.Node_Aggref:
return convertAggref(n.Aggref)
case *pg.Node_Alias:
return convertAlias(n.Alias)
case *pg.Node_AlterCollationStmt:
return convertAlterCollationStmt(n.AlterCollationStmt)
case *pg.Node_AlterDatabaseSetStmt:
return convertAlterDatabaseSetStmt(n.AlterDatabaseSetStmt)
case *pg.Node_AlterDatabaseStmt:
return convertAlterDatabaseStmt(n.AlterDatabaseStmt)
case *pg.Node_AlterDefaultPrivilegesStmt:
return convertAlterDefaultPrivilegesStmt(n.AlterDefaultPrivilegesStmt)
case *pg.Node_AlterDomainStmt:
return convertAlterDomainStmt(n.AlterDomainStmt)
case *pg.Node_AlterEnumStmt:
return convertAlterEnumStmt(n.AlterEnumStmt)
case *pg.Node_AlterEventTrigStmt:
return convertAlterEventTrigStmt(n.AlterEventTrigStmt)
case *pg.Node_AlterExtensionContentsStmt:
return convertAlterExtensionContentsStmt(n.AlterExtensionContentsStmt)
case *pg.Node_AlterExtensionStmt:
return convertAlterExtensionStmt(n.AlterExtensionStmt)
case *pg.Node_AlterFdwStmt:
return convertAlterFdwStmt(n.AlterFdwStmt)
case *pg.Node_AlterForeignServerStmt:
return convertAlterForeignServerStmt(n.AlterForeignServerStmt)
case *pg.Node_AlterFunctionStmt:
return convertAlterFunctionStmt(n.AlterFunctionStmt)
case *pg.Node_AlterObjectDependsStmt:
return convertAlterObjectDependsStmt(n.AlterObjectDependsStmt)
case *pg.Node_AlterObjectSchemaStmt:
return convertAlterObjectSchemaStmt(n.AlterObjectSchemaStmt)
case *pg.Node_AlterOpFamilyStmt:
return convertAlterOpFamilyStmt(n.AlterOpFamilyStmt)
case *pg.Node_AlterOperatorStmt:
return convertAlterOperatorStmt(n.AlterOperatorStmt)
case *pg.Node_AlterOwnerStmt:
return convertAlterOwnerStmt(n.AlterOwnerStmt)
case *pg.Node_AlterPolicyStmt:
return convertAlterPolicyStmt(n.AlterPolicyStmt)
case *pg.Node_AlterPublicationStmt:
return convertAlterPublicationStmt(n.AlterPublicationStmt)
case *pg.Node_AlterRoleSetStmt:
return convertAlterRoleSetStmt(n.AlterRoleSetStmt)
case *pg.Node_AlterRoleStmt:
return convertAlterRoleStmt(n.AlterRoleStmt)
case *pg.Node_AlterSeqStmt:
return convertAlterSeqStmt(n.AlterSeqStmt)
case *pg.Node_AlterSubscriptionStmt:
return convertAlterSubscriptionStmt(n.AlterSubscriptionStmt)
case *pg.Node_AlterSystemStmt:
return convertAlterSystemStmt(n.AlterSystemStmt)
case *pg.Node_AlterTsconfigurationStmt:
return convertAlterTSConfigurationStmt(n.AlterTsconfigurationStmt)
case *pg.Node_AlterTsdictionaryStmt:
return convertAlterTSDictionaryStmt(n.AlterTsdictionaryStmt)
case *pg.Node_AlterTableCmd:
return convertAlterTableCmd(n.AlterTableCmd)
case *pg.Node_AlterTableMoveAllStmt:
return convertAlterTableMoveAllStmt(n.AlterTableMoveAllStmt)
case *pg.Node_AlterTableSpaceOptionsStmt:
return convertAlterTableSpaceOptionsStmt(n.AlterTableSpaceOptionsStmt)
case *pg.Node_AlterTableStmt:
return convertAlterTableStmt(n.AlterTableStmt)
case *pg.Node_AlterUserMappingStmt:
return convertAlterUserMappingStmt(n.AlterUserMappingStmt)
case *pg.Node_AlternativeSubPlan:
return convertAlternativeSubPlan(n.AlternativeSubPlan)
case *pg.Node_ArrayCoerceExpr:
return convertArrayCoerceExpr(n.ArrayCoerceExpr)
case *pg.Node_ArrayExpr:
return convertArrayExpr(n.ArrayExpr)
case *pg.Node_BitString:
return convertBitString(n.BitString)
case *pg.Node_BoolExpr:
return convertBoolExpr(n.BoolExpr)
case *pg.Node_Boolean:
return convertBoolean(n.Boolean)
case *pg.Node_BooleanTest:
return convertBooleanTest(n.BooleanTest)
case *pg.Node_CallStmt:
return convertCallStmt(n.CallStmt)
case *pg.Node_CaseExpr:
return convertCaseExpr(n.CaseExpr)
case *pg.Node_CaseTestExpr:
return convertCaseTestExpr(n.CaseTestExpr)
case *pg.Node_CaseWhen:
return convertCaseWhen(n.CaseWhen)
case *pg.Node_CheckPointStmt:
return convertCheckPointStmt(n.CheckPointStmt)
case *pg.Node_ClosePortalStmt:
return convertClosePortalStmt(n.ClosePortalStmt)
case *pg.Node_ClusterStmt:
return convertClusterStmt(n.ClusterStmt)
case *pg.Node_CoalesceExpr:
return convertCoalesceExpr(n.CoalesceExpr)
case *pg.Node_CoerceToDomain:
return convertCoerceToDomain(n.CoerceToDomain)
case *pg.Node_CoerceToDomainValue:
return convertCoerceToDomainValue(n.CoerceToDomainValue)
case *pg.Node_CoerceViaIo:
return convertCoerceViaIO(n.CoerceViaIo)
case *pg.Node_CollateClause:
return convertCollateClause(n.CollateClause)
case *pg.Node_CollateExpr:
return convertCollateExpr(n.CollateExpr)
case *pg.Node_ColumnDef:
return convertColumnDef(n.ColumnDef)
case *pg.Node_ColumnRef:
return convertColumnRef(n.ColumnRef)
case *pg.Node_CommentStmt:
return convertCommentStmt(n.CommentStmt)
case *pg.Node_CommonTableExpr:
return convertCommonTableExpr(n.CommonTableExpr)
case *pg.Node_CompositeTypeStmt:
return convertCompositeTypeStmt(n.CompositeTypeStmt)
case *pg.Node_Constraint:
return convertConstraint(n.Constraint)
case *pg.Node_ConstraintsSetStmt:
return convertConstraintsSetStmt(n.ConstraintsSetStmt)
case *pg.Node_ConvertRowtypeExpr:
return convertConvertRowtypeExpr(n.ConvertRowtypeExpr)
case *pg.Node_CopyStmt:
return convertCopyStmt(n.CopyStmt)
case *pg.Node_CreateAmStmt:
return convertCreateAmStmt(n.CreateAmStmt)
case *pg.Node_CreateCastStmt:
return convertCreateCastStmt(n.CreateCastStmt)
case *pg.Node_CreateConversionStmt:
return convertCreateConversionStmt(n.CreateConversionStmt)
case *pg.Node_CreateDomainStmt:
return convertCreateDomainStmt(n.CreateDomainStmt)
case *pg.Node_CreateEnumStmt:
return convertCreateEnumStmt(n.CreateEnumStmt)
case *pg.Node_CreateEventTrigStmt:
return convertCreateEventTrigStmt(n.CreateEventTrigStmt)
case *pg.Node_CreateExtensionStmt:
return convertCreateExtensionStmt(n.CreateExtensionStmt)
case *pg.Node_CreateFdwStmt:
return convertCreateFdwStmt(n.CreateFdwStmt)
case *pg.Node_CreateForeignServerStmt:
return convertCreateForeignServerStmt(n.CreateForeignServerStmt)
case *pg.Node_CreateForeignTableStmt:
return convertCreateForeignTableStmt(n.CreateForeignTableStmt)
case *pg.Node_CreateFunctionStmt:
return convertCreateFunctionStmt(n.CreateFunctionStmt)
case *pg.Node_CreateOpClassItem:
return convertCreateOpClassItem(n.CreateOpClassItem)
case *pg.Node_CreateOpClassStmt:
return convertCreateOpClassStmt(n.CreateOpClassStmt)
case *pg.Node_CreateOpFamilyStmt:
return convertCreateOpFamilyStmt(n.CreateOpFamilyStmt)
case *pg.Node_CreatePlangStmt:
return convertCreatePLangStmt(n.CreatePlangStmt)
case *pg.Node_CreatePolicyStmt:
return convertCreatePolicyStmt(n.CreatePolicyStmt)
case *pg.Node_CreatePublicationStmt:
return convertCreatePublicationStmt(n.CreatePublicationStmt)
case *pg.Node_CreateRangeStmt:
return convertCreateRangeStmt(n.CreateRangeStmt)
case *pg.Node_CreateRoleStmt:
return convertCreateRoleStmt(n.CreateRoleStmt)
case *pg.Node_CreateSchemaStmt:
return convertCreateSchemaStmt(n.CreateSchemaStmt)
case *pg.Node_CreateSeqStmt:
return convertCreateSeqStmt(n.CreateSeqStmt)
case *pg.Node_CreateStatsStmt:
return convertCreateStatsStmt(n.CreateStatsStmt)
case *pg.Node_CreateStmt:
return convertCreateStmt(n.CreateStmt)
case *pg.Node_CreateSubscriptionStmt:
return convertCreateSubscriptionStmt(n.CreateSubscriptionStmt)
case *pg.Node_CreateTableAsStmt:
return convertCreateTableAsStmt(n.CreateTableAsStmt)
case *pg.Node_CreateTableSpaceStmt:
return convertCreateTableSpaceStmt(n.CreateTableSpaceStmt)
case *pg.Node_CreateTransformStmt:
return convertCreateTransformStmt(n.CreateTransformStmt)
case *pg.Node_CreateTrigStmt:
return convertCreateTrigStmt(n.CreateTrigStmt)
case *pg.Node_CreateUserMappingStmt:
return convertCreateUserMappingStmt(n.CreateUserMappingStmt)
case *pg.Node_CreatedbStmt:
return convertCreatedbStmt(n.CreatedbStmt)
case *pg.Node_CurrentOfExpr:
return convertCurrentOfExpr(n.CurrentOfExpr)
case *pg.Node_DeallocateStmt:
return convertDeallocateStmt(n.DeallocateStmt)
case *pg.Node_DeclareCursorStmt:
return convertDeclareCursorStmt(n.DeclareCursorStmt)
case *pg.Node_DefElem:
return convertDefElem(n.DefElem)
case *pg.Node_DefineStmt:
return convertDefineStmt(n.DefineStmt)
case *pg.Node_DeleteStmt:
return convertDeleteStmt(n.DeleteStmt)
case *pg.Node_DiscardStmt:
return convertDiscardStmt(n.DiscardStmt)
case *pg.Node_DoStmt:
return convertDoStmt(n.DoStmt)
case *pg.Node_DropOwnedStmt:
return convertDropOwnedStmt(n.DropOwnedStmt)
case *pg.Node_DropRoleStmt:
return convertDropRoleStmt(n.DropRoleStmt)
case *pg.Node_DropStmt:
return convertDropStmt(n.DropStmt)
case *pg.Node_DropSubscriptionStmt:
return convertDropSubscriptionStmt(n.DropSubscriptionStmt)
case *pg.Node_DropTableSpaceStmt:
return convertDropTableSpaceStmt(n.DropTableSpaceStmt)
case *pg.Node_DropUserMappingStmt:
return convertDropUserMappingStmt(n.DropUserMappingStmt)
case *pg.Node_DropdbStmt:
return convertDropdbStmt(n.DropdbStmt)
case *pg.Node_ExecuteStmt:
return convertExecuteStmt(n.ExecuteStmt)
case *pg.Node_ExplainStmt:
return convertExplainStmt(n.ExplainStmt)
case *pg.Node_FetchStmt:
return convertFetchStmt(n.FetchStmt)
case *pg.Node_FieldSelect:
return convertFieldSelect(n.FieldSelect)
case *pg.Node_FieldStore:
return convertFieldStore(n.FieldStore)
case *pg.Node_Float:
return convertFloat(n.Float)
case *pg.Node_FromExpr:
return convertFromExpr(n.FromExpr)
case *pg.Node_FuncCall:
return convertFuncCall(n.FuncCall)
case *pg.Node_FuncExpr:
return convertFuncExpr(n.FuncExpr)
case *pg.Node_FunctionParameter:
return convertFunctionParameter(n.FunctionParameter)
case *pg.Node_GrantRoleStmt:
return convertGrantRoleStmt(n.GrantRoleStmt)
case *pg.Node_GrantStmt:
return convertGrantStmt(n.GrantStmt)
case *pg.Node_GroupingFunc:
return convertGroupingFunc(n.GroupingFunc)
case *pg.Node_GroupingSet:
return convertGroupingSet(n.GroupingSet)
case *pg.Node_ImportForeignSchemaStmt:
return convertImportForeignSchemaStmt(n.ImportForeignSchemaStmt)
case *pg.Node_IndexElem:
return convertIndexElem(n.IndexElem)
case *pg.Node_IndexStmt:
return convertIndexStmt(n.IndexStmt)
case *pg.Node_InferClause:
return convertInferClause(n.InferClause)
case *pg.Node_InferenceElem:
return convertInferenceElem(n.InferenceElem)
case *pg.Node_InlineCodeBlock:
return convertInlineCodeBlock(n.InlineCodeBlock)
case *pg.Node_InsertStmt:
return convertInsertStmt(n.InsertStmt)
case *pg.Node_Integer:
return convertInteger(n.Integer)
case *pg.Node_IntoClause:
return convertIntoClause(n.IntoClause)
case *pg.Node_JoinExpr:
return convertJoinExpr(n.JoinExpr)
case *pg.Node_List:
return convertList(n.List)
case *pg.Node_ListenStmt:
return convertListenStmt(n.ListenStmt)
case *pg.Node_LoadStmt:
return convertLoadStmt(n.LoadStmt)
case *pg.Node_LockStmt:
return convertLockStmt(n.LockStmt)
case *pg.Node_LockingClause:
return convertLockingClause(n.LockingClause)
case *pg.Node_MinMaxExpr:
return convertMinMaxExpr(n.MinMaxExpr)
case *pg.Node_MultiAssignRef:
return convertMultiAssignRef(n.MultiAssignRef)
case *pg.Node_NamedArgExpr:
return convertNamedArgExpr(n.NamedArgExpr)
case *pg.Node_NextValueExpr:
return convertNextValueExpr(n.NextValueExpr)
case *pg.Node_NotifyStmt:
return convertNotifyStmt(n.NotifyStmt)
case *pg.Node_NullTest:
return convertNullTest(n.NullTest)
case *pg.Node_NullIfExpr:
return convertNullIfExpr(n.NullIfExpr)
case *pg.Node_ObjectWithArgs:
return convertObjectWithArgs(n.ObjectWithArgs)
case *pg.Node_OnConflictClause:
return convertOnConflictClause(n.OnConflictClause)
case *pg.Node_OnConflictExpr:
return convertOnConflictExpr(n.OnConflictExpr)
case *pg.Node_OpExpr:
return convertOpExpr(n.OpExpr)
case *pg.Node_Param:
return convertParam(n.Param)
case *pg.Node_ParamRef:
return convertParamRef(n.ParamRef)
case *pg.Node_PartitionBoundSpec:
return convertPartitionBoundSpec(n.PartitionBoundSpec)
case *pg.Node_PartitionCmd:
return convertPartitionCmd(n.PartitionCmd)
case *pg.Node_PartitionElem:
return convertPartitionElem(n.PartitionElem)
case *pg.Node_PartitionRangeDatum:
return convertPartitionRangeDatum(n.PartitionRangeDatum)
case *pg.Node_PartitionSpec:
return convertPartitionSpec(n.PartitionSpec)
case *pg.Node_PrepareStmt:
return convertPrepareStmt(n.PrepareStmt)
case *pg.Node_Query:
return convertQuery(n.Query)
case *pg.Node_RangeFunction:
return convertRangeFunction(n.RangeFunction)
case *pg.Node_RangeSubselect:
return convertRangeSubselect(n.RangeSubselect)
case *pg.Node_RangeTableFunc:
return convertRangeTableFunc(n.RangeTableFunc)
case *pg.Node_RangeTableFuncCol:
return convertRangeTableFuncCol(n.RangeTableFuncCol)
case *pg.Node_RangeTableSample:
return convertRangeTableSample(n.RangeTableSample)
case *pg.Node_RangeTblEntry:
return convertRangeTblEntry(n.RangeTblEntry)
case *pg.Node_RangeTblFunction:
return convertRangeTblFunction(n.RangeTblFunction)
case *pg.Node_RangeTblRef:
return convertRangeTblRef(n.RangeTblRef)
case *pg.Node_RangeVar:
return convertRangeVar(n.RangeVar)
case *pg.Node_RawStmt:
return convertRawStmt(n.RawStmt)
case *pg.Node_ReassignOwnedStmt:
return convertReassignOwnedStmt(n.ReassignOwnedStmt)
case *pg.Node_RefreshMatViewStmt:
return convertRefreshMatViewStmt(n.RefreshMatViewStmt)
case *pg.Node_ReindexStmt:
return convertReindexStmt(n.ReindexStmt)
case *pg.Node_RelabelType:
return convertRelabelType(n.RelabelType)
case *pg.Node_RenameStmt:
return convertRenameStmt(n.RenameStmt)
case *pg.Node_ReplicaIdentityStmt:
return convertReplicaIdentityStmt(n.ReplicaIdentityStmt)
case *pg.Node_ResTarget:
return convertResTarget(n.ResTarget)
case *pg.Node_RoleSpec:
return convertRoleSpec(n.RoleSpec)
case *pg.Node_RowCompareExpr:
return convertRowCompareExpr(n.RowCompareExpr)
case *pg.Node_RowExpr:
return convertRowExpr(n.RowExpr)
case *pg.Node_RowMarkClause:
return convertRowMarkClause(n.RowMarkClause)
case *pg.Node_RuleStmt:
return convertRuleStmt(n.RuleStmt)
case *pg.Node_SqlvalueFunction:
return convertSQLValueFunction(n.SqlvalueFunction)
case *pg.Node_ScalarArrayOpExpr:
return convertScalarArrayOpExpr(n.ScalarArrayOpExpr)
case *pg.Node_SecLabelStmt:
return convertSecLabelStmt(n.SecLabelStmt)
case *pg.Node_SelectStmt:
return convertSelectStmt(n.SelectStmt)
case *pg.Node_SetOperationStmt:
return convertSetOperationStmt(n.SetOperationStmt)
case *pg.Node_SetToDefault:
return convertSetToDefault(n.SetToDefault)
case *pg.Node_SortBy:
return convertSortBy(n.SortBy)
case *pg.Node_SortGroupClause:
return convertSortGroupClause(n.SortGroupClause)
case *pg.Node_String_:
return convertString(n.String_)
case *pg.Node_SubLink:
return convertSubLink(n.SubLink)
case *pg.Node_SubPlan:
return convertSubPlan(n.SubPlan)
case *pg.Node_TableFunc:
return convertTableFunc(n.TableFunc)
case *pg.Node_TableLikeClause:
return convertTableLikeClause(n.TableLikeClause)
case *pg.Node_TableSampleClause:
return convertTableSampleClause(n.TableSampleClause)
case *pg.Node_TargetEntry:
return convertTargetEntry(n.TargetEntry)
case *pg.Node_TransactionStmt:
return convertTransactionStmt(n.TransactionStmt)
case *pg.Node_TriggerTransition:
return convertTriggerTransition(n.TriggerTransition)
case *pg.Node_TruncateStmt:
return convertTruncateStmt(n.TruncateStmt)
case *pg.Node_TypeCast:
return convertTypeCast(n.TypeCast)
case *pg.Node_TypeName:
return convertTypeName(n.TypeName)
case *pg.Node_UnlistenStmt:
return convertUnlistenStmt(n.UnlistenStmt)
case *pg.Node_UpdateStmt:
return convertUpdateStmt(n.UpdateStmt)
case *pg.Node_VacuumStmt:
return convertVacuumStmt(n.VacuumStmt)
case *pg.Node_Var:
return convertVar(n.Var)
case *pg.Node_VariableSetStmt:
return convertVariableSetStmt(n.VariableSetStmt)
case *pg.Node_VariableShowStmt:
return convertVariableShowStmt(n.VariableShowStmt)
case *pg.Node_ViewStmt:
return convertViewStmt(n.ViewStmt)
case *pg.Node_WindowClause:
return convertWindowClause(n.WindowClause)
case *pg.Node_WindowDef:
return convertWindowDef(n.WindowDef)
case *pg.Node_WindowFunc:
return convertWindowFunc(n.WindowFunc)
case *pg.Node_WithCheckOption:
return convertWithCheckOption(n.WithCheckOption)
case *pg.Node_WithClause:
return convertWithClause(n.WithClause)
case *pg.Node_XmlExpr:
return convertXmlExpr(n.XmlExpr)
case *pg.Node_XmlSerialize:
return convertXmlSerialize(n.XmlSerialize)
default:
return &ast.TODO{}
}
}