Index: doc/src/sgml/ref/insert.sgml =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/doc/src/sgml/ref/insert.sgml,v retrieving revision 1.14 diff -c -r1.14 insert.sgml *** doc/src/sgml/ref/insert.sgml 2001/05/27 09:59:28 1.14 --- doc/src/sgml/ref/insert.sgml 2001/08/22 14:55:30 *************** *** 22,28 **** INSERT INTO table [ ( column [, ...] ) ] ! { DEFAULT VALUES | VALUES ( expression [, ...] ) | SELECT query } --- 22,30 ---- INSERT INTO table [ ( column [, ...] ) ] ! { DEFAULT VALUES | ! VALUES ( expression [, ...] ), [ ( expression [, ...] ), ... ] | ! SELECT query } *************** *** 126,135 **** ! INSERT allows one to insert new rows into a ! table. One can insert ! a single row at a time or several rows as a result of a query. ! The columns in the target list may be listed in any order. --- 128,137 ---- ! INSERT allows one to insert new rows into a table. One can ! insert either a single row or several rows. The rows to be inserted may be ! the result of a query. The columns in the target list may be listed in any ! order. *************** *** 182,187 **** --- 184,197 ---- INSERT INTO distributors (name) VALUES ('British Lion'); + + + + + Same as above except insert multiple rows into the table: + + + INSERT INTO distributors (name) VALUES ('Paramount'), ('MGM'), ('Alliance'); Index: src/backend/executor/nodeResult.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/executor/nodeResult.c,v retrieving revision 1.19 diff -c -r1.19 nodeResult.c *** src/backend/executor/nodeResult.c 2001/03/22 06:16:13 1.19 --- src/backend/executor/nodeResult.c 2001/08/22 14:55:30 *************** *** 148,157 **** { /* ! * if we don't have an outer plan, then we are just generating ! * the results from a constant target list. Do it only once. */ ! resstate->rs_done = true; } /* --- 148,168 ---- { /* ! * if we don't have an outer plan, then we are just ! * generating the results from a constant list of target ! * lists. Do it only while the list has elements in it. ! * An item in the list is placed in the pi_targetlist of ! * resstate->cstate.cs_ProjInfo for processing. */ ! if (node->valueslist == NIL) ! resstate->rs_done = true; ! else ! { ! if (length(node->valueslist) == 1) ! resstate->rs_done = true; ! resstate->cstate.cs_ProjInfo->pi_targetlist = lfirst(node->valueslist); ! node->valueslist = lnext(node->valueslist); ! } } /* Index: src/backend/nodes/copyfuncs.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v retrieving revision 1.154 diff -c -r1.154 copyfuncs.c *** src/backend/nodes/copyfuncs.c 2001/08/21 16:36:02 1.154 --- src/backend/nodes/copyfuncs.c 2001/08/22 14:55:30 *************** *** 140,145 **** --- 140,146 ---- * copy remainder of node */ Node_Copy(from, newnode, resconstantqual); + Node_Copy(from, newnode, valueslist); /* * We must add subplans in resconstantqual to the new plan's subPlan *************** *** 1795,1801 **** if (from->relname) newnode->relname = pstrdup(from->relname); Node_Copy(from, newnode, cols); ! Node_Copy(from, newnode, targetList); Node_Copy(from, newnode, selectStmt); return newnode; --- 1796,1802 ---- if (from->relname) newnode->relname = pstrdup(from->relname); Node_Copy(from, newnode, cols); ! Node_Copy(from, newnode, values); Node_Copy(from, newnode, selectStmt); return newnode; *************** *** 2490,2496 **** return newnode; } - /* **************************************************************** * pg_list.h copy functions --- 2491,2496 ---- Index: src/backend/nodes/equalfuncs.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v retrieving revision 1.102 diff -c -r1.102 equalfuncs.c *** src/backend/nodes/equalfuncs.c 2001/08/21 16:36:02 1.102 --- src/backend/nodes/equalfuncs.c 2001/08/22 14:55:30 *************** *** 636,642 **** return false; if (!equal(a->cols, b->cols)) return false; ! if (!equal(a->targetList, b->targetList)) return false; if (!equal(a->selectStmt, b->selectStmt)) return false; --- 636,642 ---- return false; if (!equal(a->cols, b->cols)) return false; ! if (!equal(a->values, b->values)) return false; if (!equal(a->selectStmt, b->selectStmt)) return false; Index: src/backend/nodes/outfuncs.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/nodes/outfuncs.c,v retrieving revision 1.145 diff -c -r1.145 outfuncs.c *** src/backend/nodes/outfuncs.c 2001/08/21 16:36:02 1.145 --- src/backend/nodes/outfuncs.c 2001/08/22 14:55:30 *************** *** 274,279 **** --- 274,282 ---- appendStringInfo(str, " :targetList "); _outNode(str, node->targetList); + appendStringInfo(str, " :valuesList "); + _outNode(str, node->valuesList); + appendStringInfo(str, " :groupClause "); _outNode(str, node->groupClause); *************** *** 379,387 **** appendStringInfo(str, " RESULT "); _outPlanInfo(str, (Plan *) node); appendStringInfo(str, " :resconstantqual "); _outNode(str, node->resconstantqual); - } /* --- 382,392 ---- appendStringInfo(str, " RESULT "); _outPlanInfo(str, (Plan *) node); + appendStringInfo(str, " :valueslist "); + _outNode(str, node->valueslist); + appendStringInfo(str, " :resconstantqual "); _outNode(str, node->resconstantqual); } /* Index: src/backend/nodes/readfuncs.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/nodes/readfuncs.c,v retrieving revision 1.112 diff -c -r1.112 readfuncs.c *** src/backend/nodes/readfuncs.c 2001/07/03 16:52:48 1.112 --- src/backend/nodes/readfuncs.c 2001/08/22 14:55:30 *************** *** 181,186 **** --- 181,189 ---- token = pg_strtok(&length); /* skip :targetlist */ local_node->targetList = nodeRead(true); + token = pg_strtok(&length); /* skip :valueslist */ + local_node->valuesList = nodeRead(true); + token = pg_strtok(&length); /* skip :groupClause */ local_node->groupClause = nodeRead(true); *************** *** 366,371 **** --- 369,377 ---- local_node = makeNode(Result); _getPlan((Plan *) local_node); + + token = pg_strtok(&length); /* eat :valueslist */ + local_node->valueslist = nodeRead(true); /* now read it */ token = pg_strtok(&length); /* eat :resconstantqual */ local_node->resconstantqual = nodeRead(true); /* now read it */ Index: src/backend/optimizer/plan/createplan.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v retrieving revision 1.108 diff -c -r1.108 createplan.c *** src/backend/optimizer/plan/createplan.c 2001/08/21 16:36:03 1.108 --- src/backend/optimizer/plan/createplan.c 2001/08/22 14:55:31 *************** *** 1818,1823 **** --- 1818,1824 ---- Result * make_result(List *tlist, + List *vlist, Node *resconstantqual, Plan *subplan) { *************** *** 1835,1840 **** --- 1836,1842 ---- plan->righttree = NULL; node->resconstantqual = resconstantqual; node->resstate = NULL; + node->valueslist = vlist; return node; } Index: src/backend/optimizer/plan/planmain.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v retrieving revision 1.66 diff -c -r1.66 planmain.c *** src/backend/optimizer/plan/planmain.c 2001/06/05 05:26:04 1.66 --- src/backend/optimizer/plan/planmain.c 2001/08/22 14:55:31 *************** *** 89,95 **** root->query_pathkeys = NIL; /* signal unordered result */ /* Make childless Result node to evaluate given tlist. */ ! return (Plan *) make_result(tlist, root->jointree->quals, (Plan *) NULL); } --- 89,95 ---- root->query_pathkeys = NIL; /* signal unordered result */ /* Make childless Result node to evaluate given tlist. */ ! return (Plan *) make_result(tlist, root->valuesList, root->jointree->quals, (Plan *) NULL); } *************** *** 143,148 **** --- 143,149 ---- * originally requested tlist. */ subplan = (Plan *) make_result(tlist, + NIL, (Node *) constant_quals, subplan); } Index: src/backend/optimizer/plan/planner.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v retrieving revision 1.108 diff -c -r1.108 planner.c *** src/backend/optimizer/plan/planner.c 2001/06/05 05:26:04 1.108 --- src/backend/optimizer/plan/planner.c 2001/08/22 14:55:31 *************** *** 820,825 **** --- 820,843 ---- { List *sub_tlist; + /* Process valuesList if it is not NIL */ + if (parse->valuesList != NIL) + { + List *newlist = NIL, *elem, *tl; + foreach(elem, parse->valuesList) + { + tl = preprocess_targetlist(lfirst(elem), + parse->commandType, + parse->resultRelation, + parse->rtable); + if (newlist == NIL) + newlist = makeList1(tl); + else + lappend(newlist, tl); + } + parse->valuesList = newlist; + } + /* Preprocess targetlist in case we are inside an INSERT/UPDATE. */ tlist = preprocess_targetlist(tlist, parse->commandType, Index: src/backend/optimizer/prep/prepunion.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v retrieving revision 1.66 diff -c -r1.66 prepunion.c *** src/backend/optimizer/prep/prepunion.c 2001/08/14 17:12:57 1.66 --- src/backend/optimizer/prep/prepunion.c 2001/08/22 14:55:31 *************** *** 183,188 **** --- 183,189 ---- make_result(generate_setop_tlist(colTypes, flag, false, plan->targetlist, refnames_tlist), + NIL, NULL, plan); } Index: src/backend/parser/analyze.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/analyze.c,v retrieving revision 1.196 diff -c -r1.196 analyze.c *** src/backend/parser/analyze.c 2001/08/21 16:36:03 1.196 --- src/backend/parser/analyze.c 2001/08/22 14:55:31 *************** *** 66,71 **** --- 66,73 ---- static void release_pstate_resources(ParseState *pstate); static FromExpr *makeFromExpr(List *fromlist, Node *quals); + static List *prepareInsertTargetList(ParseState *pstate, InsertStmt *stmt, List *list); + /* kluge to return extra info from transformCreateStmt() */ static List *extras_before; static List *extras_after; *************** *** 307,318 **** Query *qry = makeNode(Query); List *sub_rtable; List *sub_namespace; - List *icolumns; - List *attrnos; - List *attnos; - int numuseratts; List *tl; ! TupleDesc rd_att; qry->commandType = CMD_INSERT; pstate->p_is_insert = true; --- 309,316 ---- Query *qry = makeNode(Query); List *sub_rtable; List *sub_namespace; List *tl; ! List *list; qry->commandType = CMD_INSERT; pstate->p_is_insert = true; *************** *** 431,442 **** } else { ! /* ! * For INSERT ... VALUES, transform the given list of values to ! * form a targetlist for the INSERT. */ ! qry->targetList = transformTargetList(pstate, stmt->targetList); } /* --- 429,450 ---- } else { ! /* ! * No select, so we have a VALUES clause. Transform all lists ! * in values to create qry->valuesList. targetList assignment ! * is done below. */ ! List *list; ! ! foreach(list, stmt->values) ! { ! List *tl = (List *) lfirst(list); ! if (qry->valuesList == NIL) ! qry->valuesList = makeList1(transformTargetList(pstate, tl)); ! else ! lappend(qry->valuesList, transformTargetList(pstate, tl)); ! } } /* *************** *** 448,453 **** --- 456,493 ---- if (pstate->p_last_resno <= pstate->p_target_relation->rd_rel->relnatts) pstate->p_last_resno = pstate->p_target_relation->rd_rel->relnatts + 1; + /* Prepare qry->targetList and possibly qry->valuesList */ + if (qry->valuesList == NIL) + qry->targetList = prepareInsertTargetList(pstate, stmt, qry->targetList); + else + { + foreach(list, qry->valuesList) + { + List *tl = (List *) lfirst(list); + tl = prepareInsertTargetList(pstate, stmt, tl); + } + qry->targetList = lfirst(qry->valuesList); + } + + /* done building the range table and jointree */ + qry->rtable = pstate->p_rtable; + qry->jointree = makeFromExpr(pstate->p_joinlist, NULL); + + qry->hasSubLinks = pstate->p_hasSubLinks; + qry->hasAggs = pstate->p_hasAggs; + if (pstate->p_hasAggs) + parseCheckAggregates(pstate, qry, NULL); + + return qry; + } + + static List * + prepareInsertTargetList(ParseState *pstate, InsertStmt *stmt, List *list) + { + List *attrnos, *attnos, *tl, *icolumns; + int numuseratts; + TupleDesc rd_att; + /* Validate stmt->cols list, or build default list if no list given */ icolumns = checkInsertTargets(pstate, stmt->cols, &attrnos); *************** *** 456,462 **** */ numuseratts = 0; attnos = attrnos; ! foreach(tl, qry->targetList) { TargetEntry *tle = (TargetEntry *) lfirst(tl); Ident *id; --- 496,502 ---- */ numuseratts = 0; attnos = attrnos; ! foreach(tl, list) { TargetEntry *tle = (TargetEntry *) lfirst(tl); Ident *id; *************** *** 511,523 **** * expr and correct data for the target column. */ te = makeTargetEntry( ! makeResdom(attrno, ! thisatt->atttypid, ! thisatt->atttypmod, ! pstrdup(NameStr(thisatt->attname)), ! false), ! stringToNode(defval[ndef].adbin)); ! qry->targetList = lappend(qry->targetList, te); /* * Make sure the value is coerced to the target column type --- 551,563 ---- * expr and correct data for the target column. */ te = makeTargetEntry( ! makeResdom(attrno, ! thisatt->atttypid, ! thisatt->atttypmod, ! pstrdup(NameStr(thisatt->attname)), ! false), ! stringToNode(defval[ndef].adbin)); ! list = lappend(list, te); /* * Make sure the value is coerced to the target column type *************** *** 527,543 **** NIL); } } - - /* done building the range table and jointree */ - qry->rtable = pstate->p_rtable; - qry->jointree = makeFromExpr(pstate->p_joinlist, NULL); ! qry->hasSubLinks = pstate->p_hasSubLinks; ! qry->hasAggs = pstate->p_hasAggs; ! if (pstate->p_hasAggs) ! parseCheckAggregates(pstate, qry, NULL); ! ! return qry; } /* --- 567,574 ---- NIL); } } ! return list; } /* Index: src/backend/parser/gram.y =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/gram.y,v retrieving revision 2.247 diff -c -r2.247 gram.y *** src/backend/parser/gram.y 2001/08/21 16:36:03 2.247 --- src/backend/parser/gram.y 2001/08/22 14:55:33 *************** *** 195,201 **** from_clause, from_list, opt_array_bounds, expr_list, attrs, target_list, update_target_list, def_list, opt_indirection, group_clause, TriggerFuncArgs, ! select_limit, opt_select_limit %type func_arg, func_return, func_type, aggr_argtype --- 195,201 ---- from_clause, from_list, opt_array_bounds, expr_list, attrs, target_list, update_target_list, def_list, opt_indirection, group_clause, TriggerFuncArgs, ! select_limit, opt_select_limit, values_list %type func_arg, func_return, func_type, aggr_argtype *************** *** 3212,3253 **** } ; ! insert_rest: VALUES '(' target_list ')' { $$ = makeNode(InsertStmt); $$->cols = NIL; ! $$->targetList = $3; $$->selectStmt = NULL; } | DEFAULT VALUES { $$ = makeNode(InsertStmt); $$->cols = NIL; ! $$->targetList = NIL; $$->selectStmt = NULL; } | SelectStmt { $$ = makeNode(InsertStmt); $$->cols = NIL; ! $$->targetList = NIL; $$->selectStmt = $1; } ! | '(' columnList ')' VALUES '(' target_list ')' { $$ = makeNode(InsertStmt); $$->cols = $2; ! $$->targetList = $6; $$->selectStmt = NULL; } | '(' columnList ')' SelectStmt { $$ = makeNode(InsertStmt); $$->cols = $2; ! $$->targetList = NIL; $$->selectStmt = $4; } ; opt_column_list: '(' columnList ')' { $$ = $2; } | /*EMPTY*/ { $$ = NIL; } --- 3212,3259 ---- } ; ! insert_rest: VALUES values_list { $$ = makeNode(InsertStmt); $$->cols = NIL; ! $$->values = $2; $$->selectStmt = NULL; } | DEFAULT VALUES { $$ = makeNode(InsertStmt); $$->cols = NIL; ! $$->values = NIL; $$->selectStmt = NULL; } | SelectStmt { $$ = makeNode(InsertStmt); $$->cols = NIL; ! $$->values = NIL; $$->selectStmt = $1; } ! | '(' columnList ')' VALUES values_list { $$ = makeNode(InsertStmt); $$->cols = $2; ! $$->values = $5; $$->selectStmt = NULL; } | '(' columnList ')' SelectStmt { $$ = makeNode(InsertStmt); $$->cols = $2; ! $$->values = NIL; $$->selectStmt = $4; } ; + + values_list: values_list ',' '(' target_list ')' + { $$ = lappend($1, $4); } + | '(' target_list ')' + { $$ = makeList1($2); } + ; opt_column_list: '(' columnList ')' { $$ = $2; } | /*EMPTY*/ { $$ = NIL; } Index: src/include/nodes/parsenodes.h =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/nodes/parsenodes.h,v retrieving revision 1.142 diff -c -r1.142 parsenodes.h *** src/include/nodes/parsenodes.h 2001/08/21 16:36:06 1.142 --- src/include/nodes/parsenodes.h 2001/08/22 14:55:33 *************** *** 57,62 **** --- 57,65 ---- List *targetList; /* target list (of TargetEntry) */ + List *valuesList; /* list of lists of TargetEntries + * (VALUES clauses) */ + List *groupClause; /* a list of GroupClause's */ Node *havingQual; /* qualifications applied to groups */ *************** *** 805,815 **** List *cols; /* optional: names of the target columns */ /* ! * An INSERT statement has *either* VALUES or SELECT, never both. If ! * VALUES, a targetList is supplied (empty for DEFAULT VALUES). If ! * SELECT, a complete SelectStmt (or set-operation tree) is supplied. */ ! List *targetList; /* the target list (of ResTarget) */ Node *selectStmt; /* the source SELECT */ } InsertStmt; --- 808,819 ---- List *cols; /* optional: names of the target columns */ /* ! * An INSERT statement has *either* VALUES or SELECT, never ! * both. If VALUES, a list of lists of ResTarget's is supplied ! * (empty for DEFAULT VALUES). If SELECT, a complete SelectStmt ! * (or set-operation tree) is supplied. */ ! List *values; /* the values to insert */ Node *selectStmt; /* the source SELECT */ } InsertStmt; Index: src/include/nodes/plannodes.h =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/nodes/plannodes.h,v retrieving revision 1.49 diff -c -r1.49 plannodes.h *** src/include/nodes/plannodes.h 2001/03/22 04:00:52 1.49 --- src/include/nodes/plannodes.h 2001/08/22 14:55:33 *************** *** 143,148 **** --- 143,149 ---- typedef struct Result { Plan plan; + List *valueslist; Node *resconstantqual; ResultState *resstate; } Result; Index: src/include/optimizer/planmain.h =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/optimizer/planmain.h,v retrieving revision 1.51 diff -c -r1.51 planmain.h *** src/include/optimizer/planmain.h 2001/06/05 05:26:05 1.51 --- src/include/optimizer/planmain.h 2001/08/22 14:55:33 *************** *** 42,48 **** Node *limitOffset, Node *limitCount); extern SetOp *make_setop(SetOpCmd cmd, List *tlist, Plan *lefttree, List *distinctList, AttrNumber flagColIdx); ! extern Result *make_result(List *tlist, Node *resconstantqual, Plan *subplan); /* * prototypes for plan/initsplan.c --- 42,48 ---- Node *limitOffset, Node *limitCount); extern SetOp *make_setop(SetOpCmd cmd, List *tlist, Plan *lefttree, List *distinctList, AttrNumber flagColIdx); ! extern Result *make_result(List *tlist, List *vlist, Node *resconstantqual, Plan *subplan); /* * prototypes for plan/initsplan.c Index: src/interfaces/ecpg/preproc/preproc.y =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/ecpg/preproc/preproc.y,v retrieving revision 1.152 diff -c -r1.152 preproc.y *** src/interfaces/ecpg/preproc/preproc.y 2001/08/19 09:21:44 1.152 --- src/interfaces/ecpg/preproc/preproc.y 2001/08/22 14:55:34 *************** *** 340,345 **** --- 340,346 ---- %type opt_force key_update CreateSchemaStmt PosIntStringConst %type IntConst PosIntConst grantee_list func_type %type select_limit opt_for_update_clause CheckPointStmt + %type values_list %type ECPGWhenever ECPGConnect connection_target ECPGOpen %type indicator ECPGExecute ECPGPrepare ecpg_using *************** *** 2371,2379 **** } ; ! insert_rest: VALUES '(' target_list ')' { ! $$ = cat_str(3, make_str("values("), $3, make_str(")")); } | DEFAULT VALUES { --- 2372,2380 ---- } ; ! insert_rest: VALUES values_list { ! $$ = cat_str(2, make_str("values "), $2); } | DEFAULT VALUES { *************** *** 2383,2397 **** { $$ = $1; } ! | '(' columnList ')' VALUES '(' target_list ')' { ! $$ = cat_str(5, make_str("("), $2, make_str(") values ("), $6, make_str(")")); } | '(' columnList ')' SelectStmt { $$ = cat_str(4, make_str("("), $2, make_str(")"), $4); } ; opt_column_list: '(' columnList ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); } | /*EMPTY*/ { $$ = EMPTY; } --- 2384,2404 ---- { $$ = $1; } ! | '(' columnList ')' VALUES values_list { ! $$ = cat_str(4, make_str("("), $2, make_str(") values "), $5); } | '(' columnList ')' SelectStmt { $$ = cat_str(4, make_str("("), $2, make_str(")"), $4); } ; + + values_list: values_list ',' '(' target_list ')' + { $$ = cat_str(4, $1, make_str(", ("), $4, make_str(")")); } + | '(' target_list ')' + { $$ = cat_str(3, make_str("("), $2, make_str(")")); } + ; opt_column_list: '(' columnList ')' { $$ = cat_str(3, make_str("("), $2, make_str(")")); } | /*EMPTY*/ { $$ = EMPTY; } Index: src/test/regress/parallel_schedule =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/test/regress/parallel_schedule,v retrieving revision 1.5 diff -c -r1.5 parallel_schedule *** src/test/regress/parallel_schedule 2001/06/12 16:34:27 1.5 --- src/test/regress/parallel_schedule 2001/08/22 14:55:34 *************** *** 37,43 **** # ---------- # The third group of parallel test # ---------- ! test: constraints triggers create_misc create_aggregate create_operator create_index inherit # Depends on the above test: create_view --- 37,43 ---- # ---------- # The third group of parallel test # ---------- ! test: constraints triggers create_misc create_aggregate create_operator create_index inherit insert # Depends on the above test: create_view Index: src/test/regress/serial_schedule =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/test/regress/serial_schedule,v retrieving revision 1.6 diff -c -r1.6 serial_schedule *** src/test/regress/serial_schedule 2001/06/12 16:34:27 1.6 --- src/test/regress/serial_schedule 2001/08/22 14:55:34 *************** *** 47,52 **** --- 47,53 ---- test: create_operator test: create_index test: inherit + test: insert test: create_view test: sanity_check test: errors