|
37 | 37 | */ |
38 | 38 |
|
39 | 39 |
|
40 | | -/* |
41 | | - * CatalogIndexInsert is the copy of static prototype having the same name from |
42 | | - * src/backend/catalog/indexing.c |
43 | | - */ |
44 | | -#ifPG_VERSION_NUM >=100000 |
45 | | -#include"catalog/index.h" |
46 | | -void |
47 | | -CatalogIndexInsert(CatalogIndexStateindstate,HeapTupleheapTuple) |
48 | | -{ |
49 | | -inti; |
50 | | -intnumIndexes; |
51 | | -RelationPtrrelationDescs; |
52 | | -RelationheapRelation; |
53 | | -TupleTableSlot*slot; |
54 | | -IndexInfo**indexInfoArray; |
55 | | -Datumvalues[INDEX_MAX_KEYS]; |
56 | | -boolisnull[INDEX_MAX_KEYS]; |
57 | | - |
58 | | -/* HOT update does not require index inserts */ |
59 | | -if (HeapTupleIsHeapOnly(heapTuple)) |
60 | | -return; |
61 | | - |
62 | | -/* |
63 | | - * Get information from the state structure. Fall out if nothing to do. |
64 | | - */ |
65 | | -numIndexes=indstate->ri_NumIndices; |
66 | | -if (numIndexes==0) |
67 | | -return; |
68 | | -relationDescs=indstate->ri_IndexRelationDescs; |
69 | | -indexInfoArray=indstate->ri_IndexRelationInfo; |
70 | | -heapRelation=indstate->ri_RelationDesc; |
71 | | - |
72 | | -/* Need a slot to hold the tuple being examined */ |
73 | | -slot=MakeSingleTupleTableSlot(RelationGetDescr(heapRelation)); |
74 | | -ExecStoreTuple(heapTuple,slot,InvalidBuffer, false); |
75 | | - |
76 | | -/* |
77 | | - * for each index, form and insert the index tuple |
78 | | - */ |
79 | | -for (i=0;i<numIndexes;i++) |
80 | | -{ |
81 | | -IndexInfo*indexInfo; |
82 | | - |
83 | | -indexInfo=indexInfoArray[i]; |
84 | | - |
85 | | -/* If the index is marked as read-only, ignore it */ |
86 | | -if (!indexInfo->ii_ReadyForInserts) |
87 | | -continue; |
88 | | - |
89 | | -/* |
90 | | - * Expressional and partial indexes on system catalogs are not |
91 | | - * supported, nor exclusion constraints, nor deferred uniqueness |
92 | | - */ |
93 | | -Assert(indexInfo->ii_Expressions==NIL); |
94 | | -Assert(indexInfo->ii_Predicate==NIL); |
95 | | -Assert(indexInfo->ii_ExclusionOps==NULL); |
96 | | -Assert(relationDescs[i]->rd_index->indimmediate); |
97 | | - |
98 | | -/* |
99 | | - * FormIndexDatum fills in its values and isnull parameters with the |
100 | | - * appropriate values for the column(s) of the index. |
101 | | - */ |
102 | | -FormIndexDatum(indexInfo, |
103 | | -slot, |
104 | | -NULL,/* no expression eval to do */ |
105 | | -values, |
106 | | -isnull); |
107 | | - |
108 | | -/* |
109 | | - * The index AM does the rest. |
110 | | - */ |
111 | | -index_insert(relationDescs[i],/* index relation */ |
112 | | -values,/* array of index Datums */ |
113 | | -isnull,/* is-null flags */ |
114 | | -&(heapTuple->t_self),/* tid of heap tuple */ |
115 | | -heapRelation, |
116 | | -relationDescs[i]->rd_index->indisunique ? |
117 | | -UNIQUE_CHECK_YES :UNIQUE_CHECK_NO, |
118 | | -indexInfo); |
119 | | -} |
120 | | - |
121 | | -ExecDropSingleTupleTableSlot(slot); |
122 | | -} |
123 | | -#endif |
124 | | - |
125 | | - |
126 | 40 | /* |
127 | 41 | * create_plain_partial_paths |
128 | 42 | * Build partial access paths for parallel scan of a plain relation |
@@ -790,48 +704,3 @@ set_append_rel_size_compat(PlannerInfo *root, RelOptInfo *rel, Index rti) |
790 | 704 |
|
791 | 705 | rel->tuples=parent_rows; |
792 | 706 | } |
793 | | - |
794 | | -/* |
795 | | - * Construct the sequence of utility statements to create a new partition |
796 | | - */ |
797 | | -List* |
798 | | -init_createstmts_for_partition(RangeVar*parent_rv, |
799 | | -RangeVar*partition_rv, |
800 | | -char*tablespace) |
801 | | -{ |
802 | | -TableLikeClauselike_clause; |
803 | | -CreateStmtcreate_stmt; |
804 | | -List*result; |
805 | | - |
806 | | -/* Initialize TableLikeClause structure */ |
807 | | -NodeSetTag(&like_clause,T_TableLikeClause); |
808 | | -like_clause.relation=copyObject(parent_rv); |
809 | | -like_clause.options=CREATE_TABLE_LIKE_DEFAULTS | |
810 | | -CREATE_TABLE_LIKE_INDEXES | |
811 | | -CREATE_TABLE_LIKE_STORAGE; |
812 | | - |
813 | | -/* Initialize CreateStmt structure */ |
814 | | -NodeSetTag(&create_stmt,T_CreateStmt); |
815 | | -create_stmt.relation=copyObject(partition_rv); |
816 | | -create_stmt.tableElts=list_make1(copyObject(&like_clause)); |
817 | | -create_stmt.inhRelations=list_make1(copyObject(parent_rv)); |
818 | | -create_stmt.ofTypename=NULL; |
819 | | -create_stmt.constraints=NIL; |
820 | | -create_stmt.options=NIL; |
821 | | -create_stmt.oncommit=ONCOMMIT_NOOP; |
822 | | -create_stmt.tablespacename=tablespace; |
823 | | -create_stmt.if_not_exists= false; |
824 | | - |
825 | | -#if defined(PGPRO_EE)&&PG_VERSION_NUM >=90600 |
826 | | -create_stmt.partition_info=NULL; |
827 | | -#endif |
828 | | - |
829 | | -#ifPG_VERSION_NUM >=100000 |
830 | | -create_stmt.partbound=NULL; |
831 | | -create_stmt.partspec=NULL; |
832 | | -#endif |
833 | | - |
834 | | -result=transformCreateStmt(&create_stmt,NULL); |
835 | | - |
836 | | -returnresult; |
837 | | -} |