| /*------------------------------------------------------------------------- |
| * |
| * readfuncs_common.c |
| * Common de-serialization functions for Postgres tree nodes. |
| * |
| * Portions Copyright (c) 2005-2010, Greenplum inc |
| * Portions Copyright (c) 2012-Present VMware, Inc. or its affiliates. |
| * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group |
| * |
| * |
| * NOTES |
| * This file contains all common de-serialization functions for both |
| * binary and text representations, and de-serialization functions |
| * that are Cloudberry-specific for text representation. |
| * |
| * All text-representation only functions are guarded by the macro |
| * `COMPILING_BINARY_FUNCS`, they appear first in this file. |
| * |
| * This C source file SHOULD not be compiled alone, it MUST be |
| * only be included by readfuncs.c, so we intended to not complete |
| * the header files. |
| * |
| * When you consider adding new de-serialization functions, you should |
| * folow these rules: |
| * 1. Do not add any functions(Cloudberry-specific) to readfuncs.c |
| * 2. Add functions to readfuncs_common.c that can be used for both |
| * binary and text representations. |
| * 3. Add functions to readfast.c if these functions can only be used |
| * for binary representation. |
| * 4. Add functions to readfuncs_common.c if these functions can only |
| * be used for text representation. |
| * |
| *------------------------------------------------------------------------- |
| */ |
| |
| static void unwrapStringList(List *list); |
| |
| /* functions only used for text representation */ |
| #ifndef COMPILING_BINARY_FUNCS |
| |
| static A_Const * |
| _readAConst(void) |
| { |
| READ_LOCALS(A_Const); |
| |
| /* skip " :val " */ |
| token = pg_strtok(&length); |
| if (length != 4 || token[0] != ':' || token[1] != 'v') |
| elog(ERROR,"Unable to understand A_CONST node \"%.30s\"", token); |
| |
| token = pg_strtok(&length); |
| token = debackslash(token,length); |
| local_node->val.type = T_String; |
| |
| if (token[0] == '"') |
| { |
| local_node->val.val.str = palloc(length - 1); |
| strncpy(local_node->val.val.str , token+1, strlen(token)-2); |
| local_node->val.val.str[strlen(token)-2] = '\0'; |
| } |
| else if (length > 2 && (token[0] == 'b'|| token[0] == 'B') && (token[1] == '\'' || token[1] == '"')) |
| { |
| local_node->val.type = T_BitString; |
| local_node->val.val.str = palloc(length+1); |
| strncpy(local_node->val.val.str , token, length); |
| local_node->val.val.str[length] = '\0'; |
| } |
| else |
| { |
| bool isInt = true; |
| bool isFloat = true; |
| int i = 0; |
| if (token[i] == ' ') |
| i++; |
| if (token[i] == '-' || token[i] == '+') |
| i++; |
| for (; i < length; i++) |
| if (token[i] < '0' || token[i] > '9') |
| { |
| isInt = false; |
| if (token[i] != '.' && token[i] != 'e' && token[i] != 'E' && token[i] != '+' && token[i] != '-') |
| isFloat = false; |
| } |
| if (isInt) |
| { |
| local_node->val.type = T_Integer; |
| local_node->val.val.ival = atol(token); |
| } |
| else if (isFloat) |
| { |
| local_node->val.type = T_Float; |
| local_node->val.val.str = palloc(length + 1); |
| strcpy(local_node->val.val.str , token); |
| } |
| else |
| { |
| elog(ERROR,"Deserialization problem: A_Const not string, bitstring, float, or int"); |
| local_node->val.val.str = palloc(length + 1); |
| strcpy(local_node->val.val.str , token); |
| } |
| } |
| |
| /* CDB: 'location' field is not serialized */ |
| local_node->location = -1; |
| |
| READ_DONE(); |
| } |
| |
| static A_Expr * |
| _readAExpr(void) |
| { |
| READ_LOCALS(A_Expr); |
| |
| token = pg_strtok(&length); |
| |
| if (strncmp(token,"OPER",length)==0) |
| { |
| local_node->kind = AEXPR_OP; |
| READ_NODE_FIELD(name); |
| } |
| else if (strncmp(token,"ANY",length)==0) |
| { |
| local_node->kind = AEXPR_OP_ANY; |
| READ_NODE_FIELD(name); |
| } |
| else if (strncmp(token,"ALL",length)==0) |
| { |
| local_node->kind = AEXPR_OP_ALL; |
| READ_NODE_FIELD(name); |
| } |
| else if (strncmp(token,"DISTINCT",length)==0) |
| { |
| local_node->kind = AEXPR_DISTINCT; |
| READ_NODE_FIELD(name); |
| } |
| else if (strncmp(token,"NOT_DISTINCT",length)==0) |
| { |
| local_node->kind = AEXPR_NOT_DISTINCT; |
| READ_NODE_FIELD(name); |
| } |
| else if (strncmp(token,"NULLIF",length)==0) |
| { |
| local_node->kind = AEXPR_NULLIF; |
| READ_NODE_FIELD(name); |
| } |
| else if (strncmp(token,"IN",length)==0) |
| { |
| local_node->kind = AEXPR_IN; |
| READ_NODE_FIELD(name); |
| } |
| else if (strncmp(token,"LIKE",length)==0) |
| { |
| local_node->kind = AEXPR_LIKE; |
| READ_NODE_FIELD(name); |
| } |
| else if (strncmp(token,"ILIKE",length)==0) |
| { |
| local_node->kind = AEXPR_ILIKE; |
| READ_NODE_FIELD(name); |
| } |
| else if (strncmp(token,"SIMILAR",length)==0) |
| { |
| local_node->kind = AEXPR_SIMILAR; |
| READ_NODE_FIELD(name); |
| } |
| else if (strncmp(token,"BETWEEN",length)==0) |
| { |
| local_node->kind = AEXPR_BETWEEN; |
| READ_NODE_FIELD(name); |
| } |
| else if (strncmp(token,"NOT_BETWEEN",length)==0) |
| { |
| local_node->kind = AEXPR_NOT_BETWEEN; |
| READ_NODE_FIELD(name); |
| } |
| else if (strncmp(token,"BETWEEN_SYM",length)==0) |
| { |
| local_node->kind = AEXPR_BETWEEN_SYM; |
| READ_NODE_FIELD(name); |
| } |
| else if (strncmp(token,"NOT_BETWEEN_SYM",length)==0) |
| { |
| local_node->kind = AEXPR_NOT_BETWEEN_SYM; |
| READ_NODE_FIELD(name); |
| } |
| else |
| { |
| elog(ERROR,"Unable to understand A_Expr node %.30s",token); |
| } |
| |
| READ_NODE_FIELD(lexpr); |
| READ_NODE_FIELD(rexpr); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| #endif |
| |
| /* common functions for both formats */ |
| |
| static GpPartDefElem * |
| _readGpPartDefElem(void) |
| { |
| READ_LOCALS(GpPartDefElem); |
| |
| READ_STRING_FIELD(partName); |
| READ_NODE_FIELD(boundSpec); |
| READ_NODE_FIELD(subSpec); |
| READ_BOOL_FIELD(isDefault); |
| READ_NODE_FIELD(options); |
| READ_STRING_FIELD(accessMethod); |
| READ_STRING_FIELD(tablespacename); |
| READ_NODE_FIELD(colencs); |
| |
| READ_DONE(); |
| } |
| |
| static GpPartitionRangeItem * |
| _readGpPartitionRangeItem(void) |
| { |
| READ_LOCALS(GpPartitionRangeItem); |
| |
| READ_NODE_FIELD(val); |
| READ_ENUM_FIELD(edge, GpPartitionEdgeBounding); |
| |
| READ_DONE(); |
| } |
| |
| static GpPartitionRangeSpec * |
| _readGpPartitionRangeSpec(void) |
| { |
| READ_LOCALS(GpPartitionRangeSpec); |
| |
| READ_NODE_FIELD(partStart); |
| READ_NODE_FIELD(partEnd); |
| READ_NODE_FIELD(partEvery); |
| |
| READ_DONE(); |
| } |
| |
| static GpPartitionListSpec * |
| _readGpPartitionListSpec(void) |
| { |
| READ_LOCALS(GpPartitionListSpec); |
| |
| READ_NODE_FIELD(partValues); |
| |
| READ_DONE(); |
| } |
| |
| static GpPartitionDefinition * |
| _readGpPartitionDefinition(void) |
| { |
| READ_LOCALS(GpPartitionDefinition); |
| |
| READ_NODE_FIELD(partDefElems); |
| READ_NODE_FIELD(encClauses); |
| READ_BOOL_FIELD(isTemplate); |
| |
| READ_DONE(); |
| } |
| |
| /* |
| * _readA_ArrayExpr |
| */ |
| static A_ArrayExpr * |
| _readA_ArrayExpr(void) |
| { |
| READ_LOCALS(A_ArrayExpr); |
| |
| READ_NODE_FIELD(elements); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| static AlterDomainStmt * |
| _readAlterDomainStmt(void) |
| { |
| READ_LOCALS(AlterDomainStmt); |
| |
| READ_CHAR_FIELD(subtype); |
| READ_NODE_FIELD(typeName); |
| READ_STRING_FIELD(name); |
| READ_NODE_FIELD(def); |
| READ_ENUM_FIELD(behavior, DropBehavior); |
| Assert(local_node->behavior <= DROP_CASCADE); |
| |
| READ_BOOL_FIELD(missing_ok); |
| |
| READ_DONE(); |
| } |
| |
| static AlterFunctionStmt * |
| _readAlterFunctionStmt(void) |
| { |
| READ_LOCALS(AlterFunctionStmt); |
| READ_ENUM_FIELD(objtype,ObjectType); |
| READ_NODE_FIELD(func); |
| READ_NODE_FIELD(actions); |
| |
| READ_DONE(); |
| } |
| |
| static AlterObjectSchemaStmt * |
| _readAlterObjectSchemaStmt(void) |
| { |
| READ_LOCALS(AlterObjectSchemaStmt); |
| |
| READ_NODE_FIELD(relation); |
| READ_NODE_FIELD(object); |
| READ_STRING_FIELD(newschema); |
| READ_BOOL_FIELD(missing_ok); |
| READ_ENUM_FIELD(objectType,ObjectType); |
| |
| READ_DONE(); |
| } |
| |
| static AlterOpFamilyStmt * |
| _readAlterOpFamilyStmt(void) |
| { |
| READ_LOCALS(AlterOpFamilyStmt); |
| READ_NODE_FIELD(opfamilyname); |
| READ_STRING_FIELD(amname); |
| READ_BOOL_FIELD(isDrop); |
| READ_NODE_FIELD(items); |
| |
| READ_DONE(); |
| } |
| |
| static AlterOwnerStmt * |
| _readAlterOwnerStmt(void) |
| { |
| READ_LOCALS(AlterOwnerStmt); |
| |
| READ_ENUM_FIELD(objectType,ObjectType); |
| READ_NODE_FIELD(relation); |
| READ_NODE_FIELD(object); |
| READ_NODE_FIELD(newowner); |
| |
| READ_DONE(); |
| } |
| |
| static AlterPolicyStmt * |
| _readAlterPolicyStmt() |
| { |
| READ_LOCALS(AlterPolicyStmt); |
| |
| READ_STRING_FIELD(policy_name); |
| READ_NODE_FIELD(table); |
| READ_NODE_FIELD(roles); |
| READ_NODE_FIELD(qual); |
| READ_NODE_FIELD(with_check); |
| |
| READ_DONE(); |
| } |
| |
| static AlterPublicationStmt * |
| _readAlterPublicationStmt() |
| { |
| READ_LOCALS(AlterPublicationStmt); |
| |
| READ_STRING_FIELD(pubname); |
| READ_NODE_FIELD(options); |
| READ_NODE_FIELD(tables); |
| READ_BOOL_FIELD(for_all_tables); |
| READ_ENUM_FIELD(tableAction, DefElemAction); |
| |
| READ_DONE(); |
| } |
| |
| static AlterRoleSetStmt * |
| _readAlterRoleSetStmt(void) |
| { |
| READ_LOCALS(AlterRoleSetStmt); |
| |
| READ_NODE_FIELD(role); |
| READ_NODE_FIELD(setstmt); |
| |
| READ_DONE(); |
| } |
| |
| static AlterRoleStmt * |
| _readAlterRoleStmt(void) |
| { |
| READ_LOCALS(AlterRoleStmt); |
| |
| READ_NODE_FIELD(role); |
| READ_NODE_FIELD(options); |
| READ_INT_FIELD(action); |
| READ_NODE_FIELD(tags); |
| READ_BOOL_FIELD(unsettag); |
| |
| READ_DONE(); |
| } |
| |
| static AlterProfileStmt * |
| _readAlterProfileStmt(void) |
| { |
| READ_LOCALS(AlterProfileStmt); |
| |
| READ_STRING_FIELD(profile_name); |
| READ_NODE_FIELD(options); |
| |
| READ_DONE(); |
| } |
| |
| static AlterSeqStmt * |
| _readAlterSeqStmt(void) |
| { |
| READ_LOCALS(AlterSeqStmt); |
| |
| READ_NODE_FIELD(sequence); |
| READ_NODE_FIELD(options); |
| READ_BOOL_FIELD(for_identity); |
| READ_BOOL_FIELD(missing_ok); |
| |
| READ_DONE(); |
| } |
| |
| static AlterSubscriptionStmt * |
| _readAlterSubscriptionStmt() |
| { |
| READ_LOCALS(AlterSubscriptionStmt); |
| |
| READ_ENUM_FIELD(kind, AlterSubscriptionType); |
| READ_STRING_FIELD(subname); |
| READ_STRING_FIELD(conninfo); |
| READ_NODE_FIELD(publication); |
| READ_NODE_FIELD(options); |
| |
| READ_DONE(); |
| } |
| |
| static AlterSystemStmt * |
| _readAlterSystemStmt(void) |
| { |
| READ_LOCALS(AlterSystemStmt); |
| |
| READ_NODE_FIELD(setstmt); |
| |
| READ_DONE(); |
| } |
| |
| static AlterTableCmd * |
| _readAlterTableCmd(void) |
| { |
| READ_LOCALS(AlterTableCmd); |
| |
| READ_ENUM_FIELD(subtype, AlterTableType); |
| READ_STRING_FIELD(name); |
| READ_INT_FIELD(num); |
| READ_NODE_FIELD(newowner); |
| READ_NODE_FIELD(def); |
| READ_NODE_FIELD(transform); |
| READ_ENUM_FIELD(behavior, DropBehavior); |
| READ_BOOL_FIELD(missing_ok); |
| |
| READ_INT_FIELD(backendId); |
| READ_NODE_FIELD(policy); |
| READ_NODE_FIELD(tags); |
| READ_BOOL_FIELD(unsettag); |
| |
| READ_DONE(); |
| } |
| |
| static AlterTableStmt * |
| _readAlterTableStmt(void) |
| { |
| READ_LOCALS(AlterTableStmt); |
| |
| READ_NODE_FIELD(relation); |
| READ_NODE_FIELD(cmds); |
| READ_ENUM_FIELD(objtype, ObjectType); |
| READ_INT_FIELD(lockmode); |
| READ_NODE_FIELD(wqueue); |
| |
| READ_DONE(); |
| } |
| |
| static AlterTypeStmt * |
| _readAlterTypeStmt(void) |
| { |
| READ_LOCALS(AlterTypeStmt); |
| |
| READ_NODE_FIELD(typeName); |
| READ_NODE_FIELD(options); |
| |
| READ_DONE(); |
| } |
| |
| static AlteredTableInfo * |
| _readAlteredTableInfo(void) |
| { |
| READ_LOCALS(AlteredTableInfo); |
| |
| READ_OID_FIELD(relid); |
| READ_CHAR_FIELD(relkind); |
| /* oldDesc is omitted */ |
| |
| for (int i = 0; i < AT_NUM_PASSES; i++) |
| { |
| READ_NODE_FIELD(subcmds[i]); |
| } |
| |
| READ_NODE_FIELD(constraints); |
| READ_NODE_FIELD(newvals); |
| READ_NODE_FIELD(afterStmts); |
| READ_BOOL_FIELD(verify_new_notnull); |
| READ_INT_FIELD(rewrite); |
| READ_OID_FIELD(newAccessMethod); |
| READ_BOOL_FIELD(dist_opfamily_changed); |
| READ_OID_FIELD(new_opclass); |
| READ_BOOL_FIELD(chgPersistence); |
| READ_CHAR_FIELD(newrelpersistence); |
| READ_NODE_FIELD(partition_constraint); |
| READ_BOOL_FIELD(validate_default); |
| READ_NODE_FIELD(changedConstraintOids); |
| READ_NODE_FIELD(changedConstraintDefs); |
| /* The QD sends changedConstraintDefs wrapped in Values. Unwrap them. */ |
| unwrapStringList(local_node->changedConstraintDefs); |
| READ_NODE_FIELD(changedIndexOids); |
| READ_NODE_FIELD(changedIndexDefs); |
| unwrapStringList(local_node->changedIndexDefs); |
| READ_NODE_FIELD(beforeStmtLists); |
| READ_NODE_FIELD(constraintLists); |
| |
| READ_DONE(); |
| } |
| |
| static CdbProcess * |
| _readCdbProcess(void) |
| { |
| READ_LOCALS(CdbProcess); |
| |
| READ_STRING_FIELD(listenerAddr); |
| READ_INT_FIELD(listenerPort); |
| READ_INT_FIELD(pid); |
| READ_INT_FIELD(contentid); |
| READ_INT_FIELD(dbid); |
| |
| READ_DONE(); |
| } |
| |
| static ColumnDef * |
| _readColumnDef(void) |
| { |
| READ_LOCALS(ColumnDef); |
| |
| READ_STRING_FIELD(colname); |
| READ_NODE_FIELD(typeName); |
| READ_STRING_FIELD(compression); |
| READ_INT_FIELD(inhcount); |
| READ_BOOL_FIELD(is_local); |
| READ_BOOL_FIELD(is_not_null); |
| READ_BOOL_FIELD(is_from_type); |
| READ_INT_FIELD(attnum); |
| READ_INT_FIELD(storage); |
| READ_NODE_FIELD(raw_default); |
| READ_NODE_FIELD(cooked_default); |
| |
| READ_BOOL_FIELD(hasCookedMissingVal); |
| READ_BOOL_FIELD(missingIsNull); |
| if (local_node->hasCookedMissingVal && !local_node->missingIsNull) |
| local_node->missingVal = readDatum(false); |
| |
| READ_CHAR_FIELD(identity); |
| READ_NODE_FIELD(identitySequence); |
| READ_CHAR_FIELD(generated); |
| READ_NODE_FIELD(collClause); |
| READ_OID_FIELD(collOid); |
| READ_NODE_FIELD(constraints); |
| READ_NODE_FIELD(encoding); |
| READ_NODE_FIELD(fdwoptions); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| static ColumnRef * |
| _readColumnRef(void) |
| { |
| READ_LOCALS(ColumnRef); |
| |
| READ_NODE_FIELD(fields); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| static ParamRef * |
| _readParamRef(void) |
| { |
| READ_LOCALS(ParamRef); |
| |
| READ_INT_FIELD(number); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| static ClusterStmt * |
| _readClusterStmt(void) |
| { |
| READ_LOCALS(ClusterStmt); |
| |
| READ_NODE_FIELD(relation); |
| READ_STRING_FIELD(indexname); |
| |
| READ_DONE(); |
| } |
| |
| |
| static ColumnReferenceStorageDirective * |
| _readColumnReferenceStorageDirective(void) |
| { |
| READ_LOCALS(ColumnReferenceStorageDirective); |
| |
| READ_STRING_FIELD(column); |
| READ_BOOL_FIELD(deflt); |
| READ_NODE_FIELD(encoding); |
| |
| READ_DONE(); |
| } |
| |
| static CompositeTypeStmt * |
| _readCompositeTypeStmt(void) |
| { |
| READ_LOCALS(CompositeTypeStmt); |
| |
| READ_NODE_FIELD(typevar); |
| READ_NODE_FIELD(coldeflist); |
| |
| READ_DONE(); |
| } |
| |
| /* |
| * _readConstraint |
| */ |
| static Constraint * |
| _readConstraint(void) |
| { |
| READ_LOCALS(Constraint); |
| |
| READ_ENUM_FIELD(contype, ConstrType); |
| READ_STRING_FIELD(conname); /* name, or NULL if unnamed */ |
| READ_BOOL_FIELD(deferrable); |
| READ_BOOL_FIELD(initdeferred); |
| READ_LOCATION_FIELD(location); |
| |
| READ_BOOL_FIELD(is_no_inherit); |
| READ_NODE_FIELD(raw_expr); |
| READ_STRING_FIELD(cooked_expr); |
| READ_CHAR_FIELD(generated_when); |
| |
| READ_NODE_FIELD(keys); |
| READ_NODE_FIELD(including); |
| |
| READ_NODE_FIELD(exclusions); |
| |
| READ_NODE_FIELD(options); |
| READ_STRING_FIELD(indexname); |
| READ_STRING_FIELD(indexspace); |
| READ_BOOL_FIELD(reset_default_tblspc); |
| |
| READ_STRING_FIELD(access_method); |
| READ_NODE_FIELD(where_clause); |
| |
| READ_NODE_FIELD(pktable); |
| READ_NODE_FIELD(fk_attrs); |
| READ_NODE_FIELD(pk_attrs); |
| READ_CHAR_FIELD(fk_matchtype); |
| READ_CHAR_FIELD(fk_upd_action); |
| READ_CHAR_FIELD(fk_del_action); |
| READ_NODE_FIELD(old_conpfeqop); |
| READ_OID_FIELD(old_pktable_oid); |
| |
| READ_BOOL_FIELD(skip_validation); |
| READ_BOOL_FIELD(initially_valid); |
| |
| READ_DONE(); |
| } |
| |
| static ConstraintsSetStmt * |
| _readConstraintsSetStmt(void) |
| { |
| READ_LOCALS(ConstraintsSetStmt); |
| |
| READ_NODE_FIELD(constraints); |
| READ_BOOL_FIELD(deferred); |
| |
| READ_DONE(); |
| } |
| |
| static CopyIntoClause * |
| _readCopyIntoClause(void) |
| { |
| READ_LOCALS(CopyIntoClause); |
| |
| READ_NODE_FIELD(attlist); |
| READ_BOOL_FIELD(is_program); |
| READ_STRING_FIELD(filename); |
| READ_NODE_FIELD(options); |
| |
| READ_DONE(); |
| } |
| |
| static CreateCastStmt * |
| _readCreateCastStmt(void) |
| { |
| READ_LOCALS(CreateCastStmt); |
| |
| READ_NODE_FIELD(sourcetype); |
| READ_NODE_FIELD(targettype); |
| READ_NODE_FIELD(func); |
| READ_ENUM_FIELD(context, CoercionContext); |
| READ_BOOL_FIELD(inout); |
| |
| READ_DONE(); |
| } |
| |
| static CreateConversionStmt * |
| _readCreateConversionStmt(void) |
| { |
| READ_LOCALS(CreateConversionStmt); |
| |
| READ_NODE_FIELD(conversion_name); |
| READ_STRING_FIELD(for_encoding_name); |
| READ_STRING_FIELD(to_encoding_name); |
| READ_NODE_FIELD(func_name); |
| READ_BOOL_FIELD(def); |
| |
| READ_DONE(); |
| } |
| |
| static CreateDomainStmt * |
| _readCreateDomainStmt(void) |
| { |
| READ_LOCALS(CreateDomainStmt); |
| |
| READ_NODE_FIELD(domainname); |
| READ_NODE_FIELD(typeName); |
| READ_NODE_FIELD(collClause); |
| READ_NODE_FIELD(constraints); |
| |
| READ_DONE(); |
| } |
| |
| static void |
| _readDropStmt_common(DropStmt *local_node) |
| { |
| READ_TEMP_LOCALS(); |
| |
| READ_NODE_FIELD(objects); |
| READ_ENUM_FIELD(removeType,ObjectType); |
| READ_ENUM_FIELD(behavior,DropBehavior); |
| READ_BOOL_FIELD(missing_ok); |
| READ_BOOL_FIELD(concurrent); |
| READ_BOOL_FIELD(isdynamic); |
| |
| /* Force 'missing_ok' in QEs */ |
| #ifdef COMPILING_BINARY_FUNCS |
| local_node->missing_ok=true; |
| #endif /* COMPILING_BINARY_FUNCS */ |
| } |
| |
| static DropDirectoryTableStmt * |
| _readDropDirectoryTableStmt(void) |
| { |
| READ_LOCALS(DropDirectoryTableStmt); |
| |
| _readDropStmt_common(&local_node->base); |
| |
| READ_BOOL_FIELD(with_content); |
| |
| READ_DONE(); |
| } |
| |
| static CreateEnumStmt * |
| _readCreateEnumStmt(void) |
| { |
| READ_LOCALS(CreateEnumStmt); |
| |
| READ_NODE_FIELD(typeName); |
| READ_NODE_FIELD(vals); |
| |
| READ_DONE(); |
| } |
| |
| static CreateExternalStmt * |
| _readCreateExternalStmt(void) |
| { |
| READ_LOCALS(CreateExternalStmt); |
| |
| READ_NODE_FIELD(relation); |
| READ_NODE_FIELD(tableElts); |
| READ_NODE_FIELD(exttypedesc); |
| READ_STRING_FIELD(format); |
| READ_NODE_FIELD(formatOpts); |
| READ_BOOL_FIELD(isweb); |
| READ_BOOL_FIELD(iswritable); |
| READ_NODE_FIELD(sreh); |
| READ_NODE_FIELD(extOptions); |
| READ_NODE_FIELD(encoding); |
| READ_NODE_FIELD(distributedBy); |
| READ_NODE_FIELD(tags); |
| |
| READ_DONE(); |
| } |
| |
| static CreateFunctionStmt * |
| _readCreateFunctionStmt(void) |
| { |
| READ_LOCALS(CreateFunctionStmt); |
| |
| READ_BOOL_FIELD(is_procedure); |
| READ_BOOL_FIELD(replace); |
| READ_NODE_FIELD(funcname); |
| READ_NODE_FIELD(parameters); |
| READ_NODE_FIELD(returnType); |
| READ_NODE_FIELD(options); |
| READ_NODE_FIELD(sql_body); |
| |
| READ_DONE(); |
| } |
| |
| static CreateOpClassItem * |
| _readCreateOpClassItem(void) |
| { |
| READ_LOCALS(CreateOpClassItem); |
| READ_INT_FIELD(itemtype); |
| READ_NODE_FIELD(name); |
| READ_INT_FIELD(number); |
| READ_NODE_FIELD(order_family); |
| READ_NODE_FIELD(class_args); |
| READ_NODE_FIELD(storedtype); |
| |
| READ_DONE(); |
| } |
| |
| |
| static CreateOpClassStmt * |
| _readCreateOpClassStmt(void) |
| { |
| READ_LOCALS(CreateOpClassStmt); |
| |
| READ_NODE_FIELD(opclassname); |
| READ_NODE_FIELD(opfamilyname); |
| READ_STRING_FIELD(amname); |
| READ_NODE_FIELD(datatype); |
| READ_NODE_FIELD(items); |
| READ_BOOL_FIELD(isDefault); |
| |
| READ_DONE(); |
| } |
| |
| static CreateOpFamilyStmt * |
| _readCreateOpFamilyStmt(void) |
| { |
| READ_LOCALS(CreateOpFamilyStmt); |
| READ_NODE_FIELD(opfamilyname); |
| READ_STRING_FIELD(amname); |
| |
| READ_DONE(); |
| } |
| |
| static CreatePLangStmt * |
| _readCreatePLangStmt(void) |
| { |
| READ_LOCALS(CreatePLangStmt); |
| |
| READ_BOOL_FIELD(replace); |
| READ_STRING_FIELD(plname); |
| READ_NODE_FIELD(plhandler); |
| READ_NODE_FIELD(plinline); |
| READ_NODE_FIELD(plvalidator); |
| READ_BOOL_FIELD(pltrusted); |
| |
| READ_DONE(); |
| } |
| |
| static CreatePolicyStmt * |
| _readCreatePolicyStmt() |
| { |
| READ_LOCALS(CreatePolicyStmt); |
| |
| READ_STRING_FIELD(policy_name); |
| READ_NODE_FIELD(table); |
| READ_STRING_FIELD(cmd_name); |
| READ_BOOL_FIELD(permissive); |
| READ_NODE_FIELD(roles); |
| READ_NODE_FIELD(qual); |
| READ_NODE_FIELD(with_check); |
| |
| READ_DONE(); |
| } |
| |
| static CreatePublicationStmt * |
| _readCreatePublicationStmt() |
| { |
| READ_LOCALS(CreatePublicationStmt); |
| |
| READ_STRING_FIELD(pubname); |
| READ_NODE_FIELD(options); |
| READ_NODE_FIELD(tables); |
| READ_BOOL_FIELD(for_all_tables); |
| |
| READ_DONE(); |
| } |
| |
| static CreateRoleStmt * |
| _readCreateRoleStmt(void) |
| { |
| READ_LOCALS(CreateRoleStmt); |
| |
| READ_ENUM_FIELD(stmt_type, RoleStmtType); |
| READ_STRING_FIELD(role); |
| READ_NODE_FIELD(options); |
| READ_NODE_FIELD(tags); |
| |
| READ_DONE(); |
| } |
| |
| static CreateProfileStmt * |
| _readCreateProfileStmt(void) |
| { |
| READ_LOCALS(CreateProfileStmt); |
| |
| READ_STRING_FIELD(profile_name); |
| READ_NODE_FIELD(options); |
| |
| READ_DONE(); |
| } |
| |
| static CreateSchemaStmt * |
| _readCreateSchemaStmt(void) |
| { |
| READ_LOCALS(CreateSchemaStmt); |
| |
| READ_STRING_FIELD(schemaname); |
| READ_NODE_FIELD(authrole); |
| local_node->schemaElts = 0; |
| READ_BOOL_FIELD(istemp); |
| READ_BOOL_FIELD(pop_search_path); |
| READ_NODE_FIELD(tags); |
| |
| READ_DONE(); |
| } |
| |
| static AlterSchemaStmt * |
| _readAlterSchemaStmt(void) |
| { |
| READ_LOCALS(AlterSchemaStmt); |
| |
| READ_STRING_FIELD(schemaname); |
| READ_NODE_FIELD(tags); |
| READ_BOOL_FIELD(unsettag); |
| |
| READ_DONE(); |
| } |
| |
| static CreateTagStmt * |
| _readCreateTagStmt(void) |
| { |
| READ_LOCALS(CreateTagStmt); |
| |
| READ_STRING_FIELD(tag_name); |
| READ_BOOL_FIELD(missing_ok); |
| READ_NODE_FIELD(allowed_values); |
| |
| READ_DONE(); |
| } |
| |
| static AlterTagStmt * |
| _readAlterTagStmt(void) |
| { |
| READ_LOCALS(AlterTagStmt); |
| |
| READ_STRING_FIELD(tag_name); |
| READ_INT_FIELD(action); |
| READ_NODE_FIELD(tag_values); |
| READ_BOOL_FIELD(missing_ok); |
| READ_BOOL_FIELD(unset); |
| |
| READ_DONE(); |
| } |
| |
| static DropTagStmt * |
| _readDropTagStmt(void) |
| { |
| READ_LOCALS(DropTagStmt); |
| |
| READ_NODE_FIELD(tags); |
| READ_BOOL_FIELD(missing_ok); |
| |
| READ_DONE(); |
| } |
| |
| static CreateSeqStmt * |
| _readCreateSeqStmt(void) |
| { |
| READ_LOCALS(CreateSeqStmt); |
| READ_NODE_FIELD(sequence); |
| READ_NODE_FIELD(options); |
| READ_OID_FIELD(ownerId); |
| READ_BOOL_FIELD(for_identity); |
| READ_BOOL_FIELD(if_not_exists); |
| READ_NODE_FIELD(tags); |
| |
| READ_DONE(); |
| } |
| |
| static CreateSubscriptionStmt * |
| _readCreateSubscriptionStmt() |
| { |
| READ_LOCALS(CreateSubscriptionStmt); |
| |
| READ_STRING_FIELD(subname); |
| READ_STRING_FIELD(conninfo); |
| READ_NODE_FIELD(publication); |
| READ_NODE_FIELD(options); |
| |
| /* |
| * conninfo can be an empty string, but the serialization |
| * doesn't distinguish an empty string from NULL. The |
| * code that executes the command in't prepared for a NULL. |
| */ |
| if (local_node->conninfo == NULL) |
| local_node->conninfo = pstrdup(""); |
| |
| READ_DONE(); |
| } |
| |
| static CreateTransformStmt * |
| _readCreateTransformStmt() |
| { |
| READ_LOCALS(CreateTransformStmt); |
| |
| READ_BOOL_FIELD(replace); |
| READ_NODE_FIELD(type_name); |
| READ_STRING_FIELD(lang); |
| READ_NODE_FIELD(fromsql); |
| READ_NODE_FIELD(tosql); |
| |
| READ_DONE(); |
| } |
| |
| static CreatedbStmt * |
| _readCreatedbStmt(void) |
| { |
| READ_LOCALS(CreatedbStmt); |
| |
| READ_STRING_FIELD(dbname); |
| READ_NODE_FIELD(options); |
| READ_NODE_FIELD(tags); |
| |
| READ_DONE(); |
| } |
| |
| static CursorPosInfo * |
| _readCursorPosInfo(void) |
| { |
| READ_LOCALS(CursorPosInfo); |
| |
| READ_STRING_FIELD(cursor_name); |
| READ_INT_FIELD(gp_segment_id); |
| READ_UINT_FIELD(ctid.ip_blkid.bi_hi); |
| READ_UINT_FIELD(ctid.ip_blkid.bi_lo); |
| READ_UINT_FIELD(ctid.ip_posid); |
| READ_OID_FIELD(table_oid); |
| |
| READ_DONE(); |
| } |
| |
| static DQAExpr* |
| _readDQAExpr(void) |
| { |
| READ_LOCALS(DQAExpr); |
| |
| READ_INT_FIELD(agg_expr_id); |
| READ_BITMAPSET_FIELD(agg_args_id_bms); |
| READ_NODE_FIELD(agg_filter); |
| |
| READ_DONE(); |
| } |
| |
| static DefineStmt * |
| _readDefineStmt(void) |
| { |
| READ_LOCALS(DefineStmt); |
| READ_ENUM_FIELD(kind, ObjectType); |
| READ_BOOL_FIELD(oldstyle); |
| READ_NODE_FIELD(defnames); |
| READ_NODE_FIELD(args); |
| READ_NODE_FIELD(definition); |
| READ_BOOL_FIELD(if_not_exists); |
| READ_BOOL_FIELD(replace); |
| READ_BOOL_FIELD(trusted); /* CDB */ |
| |
| READ_DONE(); |
| } |
| |
| static DenyLoginInterval * |
| _readDenyLoginInterval(void) |
| { |
| READ_LOCALS(DenyLoginInterval); |
| |
| READ_NODE_FIELD(start); |
| READ_NODE_FIELD(end); |
| |
| READ_DONE(); |
| } |
| |
| static DenyLoginPoint * |
| _readDenyLoginPoint(void) |
| { |
| READ_LOCALS(DenyLoginPoint); |
| |
| READ_NODE_FIELD(day); |
| READ_NODE_FIELD(time); |
| |
| READ_DONE(); |
| } |
| |
| static DistributionKeyElem * |
| _readDistributionKeyElem(void) |
| { |
| READ_LOCALS(DistributionKeyElem); |
| |
| READ_STRING_FIELD(name); |
| READ_NODE_FIELD(opclass); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| static DropRoleStmt * |
| _readDropRoleStmt(void) |
| { |
| READ_LOCALS(DropRoleStmt); |
| |
| READ_NODE_FIELD(roles); |
| READ_BOOL_FIELD(missing_ok); |
| |
| READ_DONE(); |
| } |
| |
| static DropProfileStmt * |
| _readDropProfileStmt(void) |
| { |
| READ_LOCALS(DropProfileStmt); |
| |
| READ_NODE_FIELD(profiles); |
| READ_BOOL_FIELD(missing_ok); |
| |
| READ_DONE(); |
| } |
| |
| static DropStmt * |
| _readDropStmt(void) |
| { |
| READ_LOCALS(DropStmt); |
| |
| READ_NODE_FIELD(objects); |
| READ_ENUM_FIELD(removeType,ObjectType); |
| READ_ENUM_FIELD(behavior,DropBehavior); |
| READ_BOOL_FIELD(missing_ok); |
| READ_BOOL_FIELD(concurrent); |
| READ_BOOL_FIELD(isdynamic); |
| |
| /* Force 'missing_ok' in QEs */ |
| #ifdef COMPILING_BINARY_FUNCS |
| local_node->missing_ok=true; |
| #endif /* COMPILING_BINARY_FUNCS */ |
| |
| READ_DONE(); |
| } |
| |
| static DropSubscriptionStmt * |
| _readDropSubscriptionStmt() |
| { |
| READ_LOCALS(DropSubscriptionStmt); |
| |
| READ_STRING_FIELD(subname); |
| READ_BOOL_FIELD(missing_ok); |
| READ_ENUM_FIELD(behavior, DropBehavior); |
| |
| READ_DONE(); |
| } |
| |
| static DropdbStmt * |
| _readDropdbStmt(void) |
| { |
| READ_LOCALS(DropdbStmt); |
| |
| READ_STRING_FIELD(dbname); |
| READ_BOOL_FIELD(missing_ok); |
| |
| READ_DONE(); |
| } |
| |
| static ExtTableTypeDesc * |
| _readExtTableTypeDesc(void) |
| { |
| READ_LOCALS(ExtTableTypeDesc); |
| |
| READ_ENUM_FIELD(exttabletype, ExtTableType); |
| READ_NODE_FIELD(location_list); |
| READ_NODE_FIELD(on_clause); |
| READ_STRING_FIELD(command_string); |
| |
| READ_DONE(); |
| } |
| |
| /* |
| * _readFuncCall |
| * |
| * This parsenode is transformed during parse_analyze. |
| * It not stored in views = no upgrade implication for changes |
| */ |
| static FuncCall * |
| _readFuncCall(void) |
| { |
| READ_LOCALS(FuncCall); |
| |
| READ_NODE_FIELD(funcname); |
| READ_NODE_FIELD(args); |
| READ_NODE_FIELD(agg_order); |
| READ_NODE_FIELD(agg_filter); |
| READ_NODE_FIELD(over); |
| READ_BOOL_FIELD(agg_within_group); |
| READ_BOOL_FIELD(agg_star); |
| READ_BOOL_FIELD(agg_distinct); |
| READ_BOOL_FIELD(func_variadic); |
| READ_ENUM_FIELD(funcformat, CoercionForm); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| static FunctionParameter * |
| _readFunctionParameter(void) |
| { |
| READ_LOCALS(FunctionParameter); |
| |
| READ_STRING_FIELD(name); |
| READ_NODE_FIELD(argType); |
| READ_ENUM_FIELD(mode, FunctionParameterMode); |
| READ_NODE_FIELD(defexpr); |
| |
| READ_DONE(); |
| } |
| |
| static GrantRoleStmt * |
| _readGrantRoleStmt(void) |
| { |
| READ_LOCALS(GrantRoleStmt); |
| |
| READ_NODE_FIELD(granted_roles); |
| READ_NODE_FIELD(grantee_roles); |
| READ_BOOL_FIELD(is_grant); |
| READ_BOOL_FIELD(admin_opt); |
| READ_NODE_FIELD(grantor); |
| READ_ENUM_FIELD(behavior, DropBehavior); |
| Assert(local_node->behavior <= DROP_CASCADE); |
| |
| READ_DONE(); |
| } |
| |
| static GrantStmt * |
| _readGrantStmt(void) |
| { |
| READ_LOCALS(GrantStmt); |
| |
| READ_BOOL_FIELD(is_grant); |
| READ_ENUM_FIELD(targtype,GrantTargetType); |
| READ_ENUM_FIELD(objtype,ObjectType); |
| READ_NODE_FIELD(objects); |
| READ_NODE_FIELD(privileges); |
| READ_NODE_FIELD(grantees); |
| READ_BOOL_FIELD(grant_option); |
| READ_ENUM_FIELD(behavior, DropBehavior); |
| |
| READ_DONE(); |
| } |
| |
| /* |
| * _readGroupId |
| */ |
| static GroupId * |
| _readGroupId(void) |
| { |
| READ_LOCALS(GroupId); |
| |
| READ_INT_FIELD(agglevelsup); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| /* |
| * _readGroupingSetId |
| */ |
| static GroupingSetId * |
| _readGroupingSetId(void) |
| { |
| READ_LOCALS(GroupingSetId); |
| |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| static IndexElem * |
| _readIndexElem(void) |
| { |
| READ_LOCALS(IndexElem); |
| |
| READ_STRING_FIELD(name); |
| READ_NODE_FIELD(expr); |
| READ_STRING_FIELD(indexcolname); |
| READ_NODE_FIELD(collation); |
| READ_NODE_FIELD(opclass); |
| READ_NODE_FIELD(opclassopts); |
| READ_ENUM_FIELD(ordering, SortByDir); |
| READ_ENUM_FIELD(nulls_ordering, SortByNulls); |
| |
| READ_DONE(); |
| } |
| |
| static IndexStmt * |
| _readIndexStmt(void) |
| { |
| READ_LOCALS(IndexStmt); |
| |
| READ_STRING_FIELD(idxname); |
| READ_NODE_FIELD(relation); |
| READ_OID_FIELD(relationOid); |
| READ_STRING_FIELD(accessMethod); |
| READ_STRING_FIELD(tableSpace); |
| READ_NODE_FIELD(indexParams); |
| READ_NODE_FIELD(indexIncludingParams); |
| READ_NODE_FIELD(options); |
| READ_NODE_FIELD(whereClause); |
| READ_NODE_FIELD(excludeOpNames); |
| READ_STRING_FIELD(idxcomment); |
| READ_OID_FIELD(indexOid); |
| READ_OID_FIELD(oldNode); |
| READ_UINT_FIELD(oldCreateSubid); |
| READ_UINT_FIELD(oldFirstRelfilenodeSubid); |
| READ_BOOL_FIELD(unique); |
| READ_BOOL_FIELD(primary); |
| READ_BOOL_FIELD(isconstraint); |
| READ_BOOL_FIELD(deferrable); |
| READ_BOOL_FIELD(initdeferred); |
| READ_BOOL_FIELD(transformed); |
| READ_BOOL_FIELD(concurrent); |
| READ_BOOL_FIELD(if_not_exists); |
| READ_BOOL_FIELD(reset_default_tblspc); |
| READ_ENUM_FIELD(concurrentlyPhase,IndexConcurrentlyPhase); |
| READ_OID_FIELD(indexRelationOid); |
| READ_NODE_FIELD(tags); |
| |
| READ_DONE(); |
| } |
| |
| static LockStmt * |
| _readLockStmt(void) |
| { |
| READ_LOCALS(LockStmt); |
| |
| READ_NODE_FIELD(relations); |
| READ_INT_FIELD(mode); |
| READ_BOOL_FIELD(nowait); |
| |
| READ_DONE(); |
| } |
| |
| static NewColumnValue * |
| _readNewColumnValue(void) |
| { |
| READ_LOCALS(NewColumnValue); |
| |
| READ_INT_FIELD(attnum); |
| READ_NODE_FIELD(expr); |
| /* can't serialize exprstate */ |
| READ_BOOL_FIELD(is_generated); |
| |
| READ_DONE(); |
| } |
| |
| static NewConstraint * |
| _readNewConstraint(void) |
| { |
| READ_LOCALS(NewConstraint); |
| |
| READ_STRING_FIELD(name); |
| READ_ENUM_FIELD(contype, ConstrType); |
| READ_OID_FIELD(refrelid); |
| READ_OID_FIELD(refindid); |
| READ_OID_FIELD(conid); |
| READ_NODE_FIELD(qual); |
| /* can't serialize qualstate */ |
| |
| READ_DONE(); |
| } |
| |
| static ObjectWithArgs * |
| _readObjectWithArgs(void) |
| { |
| READ_LOCALS(ObjectWithArgs); |
| |
| READ_NODE_FIELD(objname); |
| READ_NODE_FIELD(objargs); |
| READ_BOOL_FIELD(args_unspecified); |
| |
| READ_DONE(); |
| } |
| |
| static PartitionCmd * |
| _readPartitionCmd(void) |
| { |
| READ_LOCALS(PartitionCmd); |
| |
| READ_NODE_FIELD(name); |
| READ_NODE_FIELD(bound); |
| |
| READ_DONE(); |
| } |
| |
| #ifdef COMPILING_BINARY_FUNCS |
| static GpAlterPartitionId * |
| _readGpAlterPartitionId(void) |
| { |
| READ_LOCALS(GpAlterPartitionId); |
| |
| READ_ENUM_FIELD(idtype, GpAlterPartitionIdType); |
| READ_NODE_FIELD(partiddef); |
| |
| READ_DONE(); |
| } |
| |
| static GpAlterPartitionCmd * |
| _readGpAlterPartitionCmd(void) |
| { |
| READ_LOCALS(GpAlterPartitionCmd); |
| |
| READ_NODE_FIELD(partid); |
| READ_NODE_FIELD(arg); |
| |
| READ_DONE(); |
| } |
| #endif |
| |
| static PartitionElem * |
| _readPartitionElem(void) |
| { |
| READ_LOCALS(PartitionElem); |
| |
| READ_STRING_FIELD(name); |
| READ_NODE_FIELD(expr); |
| READ_NODE_FIELD(collation); |
| READ_NODE_FIELD(opclass); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| static PartitionSpec * |
| _readPartitionSpec(void) |
| { |
| READ_LOCALS(PartitionSpec); |
| |
| READ_STRING_FIELD(strategy); |
| READ_NODE_FIELD(partParams); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| static RefreshClause * |
| _readRefreshClause(void) |
| { |
| READ_LOCALS(RefreshClause); |
| |
| READ_BOOL_FIELD(concurrent); |
| READ_BOOL_FIELD(skipData); |
| READ_NODE_FIELD(relation); |
| |
| READ_DONE(); |
| } |
| |
| static ReindexStmt * |
| _readReindexStmt(void) |
| { |
| READ_LOCALS(ReindexStmt); |
| |
| READ_ENUM_FIELD(kind,ReindexObjectType); |
| READ_NODE_FIELD(relation); |
| READ_STRING_FIELD(name); |
| READ_NODE_FIELD(params); |
| READ_OID_FIELD(relid); |
| READ_ENUM_FIELD(concurrentlyPhase,ReindexConcurrentlyPhase); |
| READ_NODE_FIELD(newIndexInfo); |
| READ_NODE_FIELD(oldIndexInfo); |
| |
| READ_DONE(); |
| } |
| |
| static ReindexIndexInfo * |
| _readReindexIndexInfo(void) |
| { |
| READ_LOCALS(ReindexIndexInfo); |
| |
| READ_OID_FIELD(indexId); |
| READ_OID_FIELD(tableId); |
| READ_OID_FIELD(amId); |
| READ_BOOL_FIELD(safe); |
| READ_STRING_FIELD(ccNewName); |
| READ_STRING_FIELD(ccOldName); |
| |
| READ_DONE(); |
| } |
| |
| static RenameStmt * |
| _readRenameStmt(void) |
| { |
| READ_LOCALS(RenameStmt); |
| |
| READ_ENUM_FIELD(renameType, ObjectType); |
| READ_ENUM_FIELD(relationType, ObjectType); |
| READ_NODE_FIELD(relation); |
| READ_OID_FIELD(objid); |
| READ_NODE_FIELD(object); |
| READ_STRING_FIELD(subname); |
| READ_STRING_FIELD(newname); |
| READ_ENUM_FIELD(behavior,DropBehavior); |
| |
| READ_BOOL_FIELD(missing_ok); |
| |
| READ_DONE(); |
| } |
| |
| static ReplicaIdentityStmt * |
| _readReplicaIdentityStmt(void) |
| { |
| READ_LOCALS(ReplicaIdentityStmt); |
| |
| READ_CHAR_FIELD(identity_type); |
| READ_STRING_FIELD(name); |
| |
| READ_DONE(); |
| } |
| |
| static RestrictInfo * |
| _readRestrictInfo(void) |
| { |
| READ_LOCALS(RestrictInfo); |
| |
| /* NB: this isn't a complete set of fields */ |
| READ_NODE_FIELD(clause); |
| READ_BOOL_FIELD(is_pushed_down); |
| READ_BOOL_FIELD(outerjoin_delayed); |
| READ_BOOL_FIELD(can_join); |
| READ_BOOL_FIELD(pseudoconstant); |
| READ_BOOL_FIELD(leakproof); |
| READ_ENUM_FIELD(has_volatile, VolatileFunctionStatus); |
| READ_UINT_FIELD(security_level); |
| READ_BOOL_FIELD(contain_outer_query_references); |
| READ_BITMAPSET_FIELD(clause_relids); |
| READ_BITMAPSET_FIELD(required_relids); |
| READ_BITMAPSET_FIELD(outer_relids); |
| READ_BITMAPSET_FIELD(nullable_relids); |
| READ_BITMAPSET_FIELD(left_relids); |
| READ_BITMAPSET_FIELD(right_relids); |
| READ_NODE_FIELD(orclause); |
| |
| READ_FLOAT_FIELD(norm_selec); |
| READ_FLOAT_FIELD(outer_selec); |
| READ_NODE_FIELD(mergeopfamilies); |
| |
| READ_NODE_FIELD(left_em); |
| READ_NODE_FIELD(right_em); |
| READ_BOOL_FIELD(outer_is_left); |
| READ_OID_FIELD(hashjoinoperator); |
| READ_OID_FIELD(hasheqoperator); |
| |
| READ_DONE(); |
| } |
| |
| static RuleStmt * |
| _readRuleStmt(void) |
| { |
| READ_LOCALS(RuleStmt); |
| |
| READ_NODE_FIELD(relation); |
| READ_STRING_FIELD(rulename); |
| READ_NODE_FIELD(whereClause); |
| READ_ENUM_FIELD(event,CmdType); |
| READ_BOOL_FIELD(instead); |
| READ_NODE_FIELD(actions); |
| READ_BOOL_FIELD(replace); |
| |
| READ_DONE(); |
| } |
| |
| static SegfileMapNode * |
| _readSegfileMapNode(void) |
| { |
| READ_LOCALS(SegfileMapNode); |
| |
| READ_OID_FIELD(relid); |
| READ_INT_FIELD(segno); |
| |
| READ_DONE(); |
| } |
| |
| /* |
| * _readSingleRowErrorDesc |
| */ |
| static SingleRowErrorDesc * |
| _readSingleRowErrorDesc(void) |
| { |
| READ_LOCALS(SingleRowErrorDesc); |
| |
| READ_INT_FIELD(rejectlimit); |
| READ_BOOL_FIELD(is_limit_in_rows); |
| READ_CHAR_FIELD(log_error_type); |
| |
| READ_DONE(); |
| } |
| |
| static SliceTable * |
| _readSliceTable(void) |
| { |
| READ_LOCALS(SliceTable); |
| |
| READ_INT_FIELD(localSlice); |
| READ_INT_FIELD(numSlices); |
| local_node->slices = palloc0(local_node->numSlices * sizeof(ExecSlice)); |
| for (int i = 0; i < local_node->numSlices; i++) |
| { |
| READ_INT_FIELD(slices[i].sliceIndex); |
| READ_INT_FIELD(slices[i].rootIndex); |
| READ_INT_FIELD(slices[i].parentIndex); |
| READ_INT_FIELD(slices[i].planNumSegments); |
| READ_NODE_FIELD(slices[i].children); /* List of int index */ |
| READ_ENUM_FIELD(slices[i].gangType, GangType); |
| READ_NODE_FIELD(slices[i].segments); /* List of int index */ |
| READ_BOOL_FIELD(slices[i].useMppParallelMode); |
| READ_INT_FIELD(slices[i].parallel_workers); |
| local_node->slices[i].primaryGang = NULL; |
| READ_NODE_FIELD(slices[i].primaryProcesses); /* List of (CDBProcess *) */ |
| READ_BITMAPSET_FIELD(slices[i].processesMap); |
| } |
| READ_BOOL_FIELD(hasMotions); |
| |
| READ_INT_FIELD(instrument_options); |
| READ_INT_FIELD(ic_instance_id); |
| |
| READ_DONE(); |
| } |
| |
| static SortBy * |
| _readSortBy(void) |
| { |
| READ_LOCALS(SortBy); |
| |
| READ_NODE_FIELD(node); |
| READ_ENUM_FIELD(sortby_dir, SortByDir); |
| READ_ENUM_FIELD(sortby_nulls, SortByNulls); |
| READ_NODE_FIELD(useOp); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| /* |
| * _readTableFunctionScan |
| */ |
| static TableFunctionScan * |
| _readTableFunctionScan(void) |
| { |
| READ_LOCALS(TableFunctionScan); |
| |
| ReadCommonScan(&local_node->scan); |
| |
| READ_NODE_FIELD(function); |
| |
| READ_DONE(); |
| } |
| |
| static TableValueExpr * |
| _readTableValueExpr(void) |
| { |
| READ_LOCALS(TableValueExpr); |
| |
| READ_NODE_FIELD(subquery); |
| |
| READ_DONE(); |
| } |
| |
| static TruncateStmt * |
| _readTruncateStmt(void) |
| { |
| READ_LOCALS(TruncateStmt); |
| |
| READ_NODE_FIELD(relations); |
| READ_ENUM_FIELD(behavior,DropBehavior); |
| |
| READ_DONE(); |
| } |
| |
| static TupleSplit * |
| _readTupleSplit(void) |
| { |
| READ_LOCALS(TupleSplit); |
| |
| ReadCommonPlan(&local_node->plan); |
| |
| READ_INT_FIELD(numCols); |
| READ_ATTRNUMBER_ARRAY(grpColIdx, local_node->numCols); |
| |
| READ_NODE_FIELD(dqa_expr_lst); |
| |
| READ_DONE(); |
| } |
| |
| static TypeCast * |
| _readTypeCast(void) |
| { |
| READ_LOCALS(TypeCast); |
| |
| READ_NODE_FIELD(arg); |
| READ_NODE_FIELD(typeName); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| static TypeName * |
| _readTypeName(void) |
| { |
| READ_LOCALS(TypeName); |
| |
| READ_NODE_FIELD(names); |
| READ_OID_FIELD(typeOid); |
| READ_BOOL_FIELD(setof); |
| READ_BOOL_FIELD(pct_type); |
| READ_NODE_FIELD(typmods); |
| READ_INT_FIELD(typemod); |
| READ_NODE_FIELD(arrayBounds); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| static VacuumRelation * |
| _readVacuumRelation(void) |
| { |
| READ_LOCALS(VacuumRelation); |
| |
| READ_NODE_FIELD(relation); |
| READ_OID_FIELD(oid); |
| READ_NODE_FIELD(va_cols); |
| |
| READ_DONE(); |
| } |
| |
| |
| /* |
| * _readVacuumStmt |
| */ |
| static VacuumStmt * |
| _readVacuumStmt(void) |
| { |
| READ_LOCALS(VacuumStmt); |
| |
| READ_NODE_FIELD(options); |
| READ_NODE_FIELD(rels); |
| READ_BOOL_FIELD(is_vacuumcmd); |
| |
| READ_DONE(); |
| } |
| |
| |
| static VariableSetStmt * |
| _readVariableSetStmt(void) |
| { |
| READ_LOCALS(VariableSetStmt); |
| |
| READ_STRING_FIELD(name); |
| READ_ENUM_FIELD(kind, VariableSetKind); |
| READ_NODE_FIELD(args); |
| READ_BOOL_FIELD(is_local); |
| |
| READ_DONE(); |
| } |
| |
| static ViewStmt * |
| _readViewStmt(void) |
| { |
| READ_LOCALS(ViewStmt); |
| |
| READ_NODE_FIELD(view); |
| READ_NODE_FIELD(aliases); |
| READ_NODE_FIELD(query); |
| READ_BOOL_FIELD(replace); |
| READ_NODE_FIELD(options); |
| READ_NODE_FIELD(tags); |
| |
| READ_DONE(); |
| } |
| |
| static WithClause * |
| _readWithClause(void) |
| { |
| READ_LOCALS(WithClause); |
| |
| READ_NODE_FIELD(ctes); |
| READ_BOOL_FIELD(recursive); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| static void |
| unwrapStringList(List *list) |
| { |
| ListCell *lc; |
| |
| foreach(lc, list) |
| { |
| Value *val = (Value *) lfirst(lc); |
| |
| lfirst(lc) = strVal(val); |
| pfree(val); |
| } |
| } |
| |
| /* |
| * _readMemoize |
| */ |
| static Memoize * |
| _readMemoize(void) |
| { |
| READ_LOCALS(Memoize); |
| |
| ReadCommonPlan(&local_node->plan); |
| |
| READ_INT_FIELD(numKeys); |
| READ_OID_ARRAY(hashOperators, local_node->numKeys); |
| READ_OID_ARRAY(collations, local_node->numKeys); |
| READ_NODE_FIELD(param_exprs); |
| READ_BOOL_FIELD(singlerow); |
| READ_BOOL_FIELD(binary_mode); |
| READ_UINT_FIELD(est_entries); |
| READ_BITMAPSET_FIELD(keyparamids); |
| |
| READ_DONE(); |
| } |
| |
| /* |
| * _readTidRangeScan |
| */ |
| static TidRangeScan * |
| _readTidRangeScan(void) |
| { |
| READ_LOCALS(TidRangeScan); |
| |
| ReadCommonScan(&local_node->scan); |
| |
| READ_NODE_FIELD(tidrangequals); |
| |
| READ_DONE(); |
| } |
| |
| /* |
| * _readCTESearchClause |
| */ |
| static CTESearchClause * |
| _readCTESearchClause(void) |
| { |
| READ_LOCALS(CTESearchClause); |
| |
| READ_NODE_FIELD(search_col_list); |
| READ_BOOL_FIELD(search_breadth_first); |
| READ_STRING_FIELD(search_seq_column); |
| READ_LOCATION_FIELD(location); |
| |
| READ_DONE(); |
| } |
| |
| /* |
| * _readCTECycleClause |
| */ |
| static CTECycleClause * |
| _readCTECycleClause(void) |
| { |
| READ_LOCALS(CTECycleClause); |
| |
| READ_NODE_FIELD(cycle_col_list); |
| READ_STRING_FIELD(cycle_mark_column); |
| READ_NODE_FIELD(cycle_mark_value); |
| READ_NODE_FIELD(cycle_mark_default); |
| READ_STRING_FIELD(cycle_path_column); |
| READ_LOCATION_FIELD(location); |
| READ_OID_FIELD(cycle_mark_type); |
| READ_INT_FIELD(cycle_mark_typmod); |
| READ_OID_FIELD(cycle_mark_collation); |
| READ_OID_FIELD(cycle_mark_neop); |
| |
| READ_DONE(); |
| } |
| |
| static ReturnStmt * |
| _readReturnStmt(void) |
| { |
| READ_LOCALS(ReturnStmt); |
| |
| READ_NODE_FIELD(returnval); |
| |
| READ_DONE(); |
| } |