diff options
Diffstat (limited to 'contrib/tablefunc/tablefunc.c')
-rw-r--r-- | contrib/tablefunc/tablefunc.c | 145 |
1 files changed, 69 insertions, 76 deletions
diff --git a/contrib/tablefunc/tablefunc.c b/contrib/tablefunc/tablefunc.c index 97163c81a40..7f67f37b00c 100644 --- a/contrib/tablefunc/tablefunc.c +++ b/contrib/tablefunc/tablefunc.c @@ -184,8 +184,7 @@ normal_rand(PG_FUNCTION_ARGS) funcctx = SRF_FIRSTCALL_INIT(); /* - * switch to memory context appropriate for multiple function - * calls + * switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); @@ -196,10 +195,10 @@ normal_rand(PG_FUNCTION_ARGS) fctx = (normal_rand_fctx *) palloc(sizeof(normal_rand_fctx)); /* - * Use fctx to keep track of upper and lower bounds from call to - * call. It will also be used to carry over the spare value we get - * from the Box-Muller algorithm so that we only actually - * calculate a new value every other call. + * Use fctx to keep track of upper and lower bounds from call to call. + * It will also be used to carry over the spare value we get from the + * Box-Muller algorithm so that we only actually calculate a new value + * every other call. */ fctx->mean = PG_GETARG_FLOAT8(1); fctx->stddev = PG_GETARG_FLOAT8(2); @@ -254,7 +253,7 @@ normal_rand(PG_FUNCTION_ARGS) SRF_RETURN_NEXT(funcctx, Float8GetDatum(result)); } else - /* do when there is no more left */ + /* do when there is no more left */ SRF_RETURN_DONE(funcctx); } @@ -331,8 +330,8 @@ get_normal_pair(float8 *x1, float8 *x2) * 1. SQL result must be ordered by 1,2. * 2. The number of values columns depends on the tuple description * of the function's declared return type. The return type's columns - * must match the datatypes of the SQL query's result. The datatype - * of the category column can be anything, however. + * must match the datatypes of the SQL query's result. The datatype + * of the category column can be anything, however. * 3. Missing values (i.e. not enough adjacent rows of same rowid to * fill the number of result values columns) are filled in with nulls. * 4. Extra values (i.e. too many adjacent rows of same rowid to fill @@ -368,8 +367,7 @@ crosstab(PG_FUNCTION_ARGS) funcctx = SRF_FIRSTCALL_INIT(); /* - * switch to memory context appropriate for multiple function - * calls + * switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); @@ -394,7 +392,7 @@ crosstab(PG_FUNCTION_ARGS) * 1. rowname * the label or identifier for each row in the final result * 2. category - * the label or identifier for each column in the final result + * the label or identifier for each column in the final result * 3. values * the value for each column in the final result *---------- @@ -404,7 +402,7 @@ crosstab(PG_FUNCTION_ARGS) (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid source data SQL statement"), errdetail("The provided SQL must return 3 " - "columns: rowid, category, and values."))); + "columns: rowid, category, and values."))); } else { @@ -439,8 +437,8 @@ crosstab(PG_FUNCTION_ARGS) tupdesc = CreateTupleDescCopy(tupdesc); /* - * Check that return tupdesc is compatible with the data we got - * from SPI, at least based on number and type of attributes + * Check that return tupdesc is compatible with the data we got from + * SPI, at least based on number and type of attributes */ if (!compatCrosstabTupleDescs(tupdesc, spi_tupdesc)) ereport(ERROR, @@ -449,8 +447,8 @@ crosstab(PG_FUNCTION_ARGS) "incompatible"))); /* - * Generate attribute metadata needed later to produce tuples from - * raw C strings + * Generate attribute metadata needed later to produce tuples from raw + * C strings */ attinmeta = TupleDescGetAttInMetadata(tupdesc); funcctx->attinmeta = attinmeta; @@ -530,11 +528,10 @@ crosstab(PG_FUNCTION_ARGS) rowid = SPI_getvalue(spi_tuple, spi_tupdesc, 1); /* - * If this is the first pass through the values for this - * rowid set it, otherwise make sure it hasn't changed on - * us. Also check to see if the rowid is the same as that - * of the last tuple sent -- if so, skip this tuple - * entirely + * If this is the first pass through the values for this rowid + * set it, otherwise make sure it hasn't changed on us. Also + * check to see if the rowid is the same as that of the last + * tuple sent -- if so, skip this tuple entirely */ if (i == 0) values[0] = pstrdup(rowid); @@ -550,16 +547,15 @@ crosstab(PG_FUNCTION_ARGS) * Get the next category item value, which is alway * attribute number three. * - * Be careful to sssign the value to the array index - * based on which category we are presently - * processing. + * Be careful to sssign the value to the array index based on + * which category we are presently processing. */ values[1 + i] = SPI_getvalue(spi_tuple, spi_tupdesc, 3); /* - * increment the counter since we consume a row for - * each category, but not for last pass because the - * API will do that for us + * increment the counter since we consume a row for each + * category, but not for last pass because the API will do + * that for us */ if (i < (num_categories - 1)) call_cntr = ++funcctx->call_cntr; @@ -567,9 +563,9 @@ crosstab(PG_FUNCTION_ARGS) else { /* - * We'll fill in NULLs for the missing values, but we - * need to decrement the counter since this sql result - * row doesn't belong to the current output tuple. + * We'll fill in NULLs for the missing values, but we need + * to decrement the counter since this sql result row + * doesn't belong to the current output tuple. */ call_cntr = --funcctx->call_cntr; break; @@ -584,8 +580,8 @@ crosstab(PG_FUNCTION_ARGS) if (values[0] != NULL) { /* - * switch to memory context appropriate for multiple - * function calls + * switch to memory context appropriate for multiple function + * calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); @@ -612,8 +608,8 @@ crosstab(PG_FUNCTION_ARGS) else { /* - * Skipping this tuple entirely, but we need to advance - * the counter like the API would if we had returned one. + * Skipping this tuple entirely, but we need to advance the + * counter like the API would if we had returned one. */ call_cntr = ++funcctx->call_cntr; @@ -631,7 +627,7 @@ crosstab(PG_FUNCTION_ARGS) } } else - /* do when there is no more left */ + /* do when there is no more left */ { /* release SPI related resources */ SPI_finish(); @@ -730,10 +726,10 @@ crosstab_hash(PG_FUNCTION_ARGS) /* * SFRM_Materialize mode expects us to return a NULL Datum. The actual - * tuples are in our tuplestore and passed back through - * rsinfo->setResult. rsinfo->setDesc is set to the tuple description - * that we actually used to build our tuples with, so the caller can - * verify we did what it was expecting. + * tuples are in our tuplestore and passed back through rsinfo->setResult. + * rsinfo->setDesc is set to the tuple description that we actually used + * to build our tuples with, so the caller can verify we did what it was + * expecting. */ rsinfo->setDesc = tupdesc; MemoryContextSwitchTo(oldcontext); @@ -758,8 +754,8 @@ load_categories_hash(char *cats_sql, MemoryContext per_query_ctx) ctl.entrysize = sizeof(crosstab_HashEnt); /* - * use INIT_CATS, defined above as a guess of how many hash table - * entries to create, initially + * use INIT_CATS, defined above as a guess of how many hash table entries + * to create, initially */ crosstab_HashTable = hash_create("crosstab hash", INIT_CATS, &ctl, HASH_ELEM); @@ -780,8 +776,8 @@ load_categories_hash(char *cats_sql, MemoryContext per_query_ctx) int i; /* - * The provided categories SQL query must always return one - * column: category - the label or identifier for each column + * The provided categories SQL query must always return one column: + * category - the label or identifier for each column */ if (spi_tupdesc->natts != 1) ereport(ERROR, @@ -872,26 +868,24 @@ get_crosstab_tuplestore(char *sql, } /* - * The provided SQL query must always return at least three - * columns: + * The provided SQL query must always return at least three columns: * - * 1. rowname the label for each row - column 1 in the final result - * 2. category the label for each value-column in the final - * result 3. value the values used to populate the - * value-columns + * 1. rowname the label for each row - column 1 in the final result 2. + * category the label for each value-column in the final result 3. + * value the values used to populate the value-columns * * If there are more than three columns, the last two are taken as - * "category" and "values". The first column is taken as - * "rowname". Additional columns (2 thru N-2) are assumed the same - * for the same "rowname", and are copied into the result tuple - * from the first time we encounter a particular rowname. + * "category" and "values". The first column is taken as "rowname". + * Additional columns (2 thru N-2) are assumed the same for the same + * "rowname", and are copied into the result tuple from the first time + * we encounter a particular rowname. */ if (ncols < 3) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid source data SQL statement"), errdetail("The provided SQL must return 3 " \ - " columns; rowid, category, and values."))); + " columns; rowid, category, and values."))); result_ncols = (ncols - 2) + num_categories; @@ -902,7 +896,7 @@ get_crosstab_tuplestore(char *sql, errmsg("invalid return type"), errdetail("query-specified return " \ "tuple has %d columns but crosstab " \ - "returns %d", tupdesc->natts, result_ncols))); + "returns %d", tupdesc->natts, result_ncols))); /* allocate space */ values = (char **) palloc(result_ncols * sizeof(char *)); @@ -933,14 +927,13 @@ get_crosstab_tuplestore(char *sql, if ((lastrowid == NULL) || (strcmp(rowid, lastrowid) != 0)) { /* - * a new row means we need to flush the old one first, - * unless we're on the very first row + * a new row means we need to flush the old one first, unless + * we're on the very first row */ if (lastrowid != NULL) { /* - * switch to appropriate context while storing the - * tuple + * switch to appropriate context while storing the tuple */ SPIcontext = MemoryContextSwitchTo(per_query_ctx); @@ -1103,10 +1096,10 @@ connectby_text(PG_FUNCTION_ARGS) /* * SFRM_Materialize mode expects us to return a NULL Datum. The actual - * tuples are in our tuplestore and passed back through - * rsinfo->setResult. rsinfo->setDesc is set to the tuple description - * that we actually used to build our tuples with, so the caller can - * verify we did what it was expecting. + * tuples are in our tuplestore and passed back through rsinfo->setResult. + * rsinfo->setDesc is set to the tuple description that we actually used + * to build our tuples with, so the caller can verify we did what it was + * expecting. */ return (Datum) 0; } @@ -1182,10 +1175,10 @@ connectby_text_serial(PG_FUNCTION_ARGS) /* * SFRM_Materialize mode expects us to return a NULL Datum. The actual - * tuples are in our tuplestore and passed back through - * rsinfo->setResult. rsinfo->setDesc is set to the tuple description - * that we actually used to build our tuples with, so the caller can - * verify we did what it was expecting. + * tuples are in our tuplestore and passed back through rsinfo->setResult. + * rsinfo->setDesc is set to the tuple description that we actually used + * to build our tuples with, so the caller can verify we did what it was + * expecting. */ return (Datum) 0; } @@ -1382,16 +1375,16 @@ build_tuplestore_recursively(char *key_fld, { /* * Check that return tupdesc is compatible with the one we got - * from the query, but only at level 0 -- no need to check - * more than once + * from the query, but only at level 0 -- no need to check more + * than once */ if (!compatConnectbyTupleDescs(tupdesc, spi_tupdesc)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("invalid return type"), - errdetail("Return and SQL tuple descriptions are " \ - "incompatible."))); + errdetail("Return and SQL tuple descriptions are " \ + "incompatible."))); } for (i = 0; i < proc; i++) @@ -1576,7 +1569,7 @@ compatConnectbyTupleDescs(TupleDesc ret_tupdesc, TupleDesc sql_tupdesc) (errcode(ERRCODE_SYNTAX_ERROR), errmsg("invalid return type"), errdetail("SQL parent key field datatype does " \ - "not match return parent key field datatype."))); + "not match return parent key field datatype."))); /* OK, the two tupdescs are compatible for our purposes */ return true; @@ -1605,9 +1598,9 @@ compatCrosstabTupleDescs(TupleDesc ret_tupdesc, TupleDesc sql_tupdesc) "return rowid datatype."))); /* - * - attribute [1] of the sql tuple is the category; no need to check - * it - attribute [2] of the sql tuple should match attributes [1] to - * [natts] of the return tuple + * - attribute [1] of the sql tuple is the category; no need to check it - + * attribute [2] of the sql tuple should match attributes [1] to [natts] + * of the return tuple */ sql_attr = sql_tupdesc->attrs[2]; for (i = 1; i < ret_tupdesc->natts; i++) |