You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by es...@apache.org on 2016/09/24 05:02:36 UTC
[2/5] incubator-hawq git commit: HAWQ-1073. Remove unused
src/backend/libgppc project
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/dbf32e99/src/backend/libgppc/test/gppc_test.c
----------------------------------------------------------------------
diff --git a/src/backend/libgppc/test/gppc_test.c b/src/backend/libgppc/test/gppc_test.c
deleted file mode 100644
index b79a6a2..0000000
--- a/src/backend/libgppc/test/gppc_test.c
+++ /dev/null
@@ -1,909 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*-------------------------------------------------------------------------
- *
- * gppc_client.c
- * libgppc client program
- *
- *-------------------------------------------------------------------------
- */
-#include <stdio.h>
-#include <string.h>
-#include "gppc.h"
-
-GPPC_FUNCTION_INFO(oidcheckfunc);
-GppcDatum oidcheckfunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum oidcheckfunc(GPPC_FUNCTION_ARGS)
-{
- char *arg = GppcTextGetCString(GPPC_GETARG_TEXT(0));
-
- /*
- * We use INT4 as the result type, because RETURN_OID macros are not prepared.
- */
- if (strcmp("bool", arg) == 0)
- GPPC_RETURN_INT4(GppcOidBool);
- else if (strcmp("char", arg) == 0)
- GPPC_RETURN_INT4(GppcOidChar);
- else if (strcmp("int2", arg) == 0)
- GPPC_RETURN_INT4(GppcOidInt2);
- else if (strcmp("int4", arg) == 0)
- GPPC_RETURN_INT4(GppcOidInt4);
- else if (strcmp("int8", arg) == 0)
- GPPC_RETURN_INT4(GppcOidInt8);
- else if (strcmp("float4", arg) == 0)
- GPPC_RETURN_INT4(GppcOidFloat4);
- else if (strcmp("float8", arg) == 0)
- GPPC_RETURN_INT4(GppcOidFloat8);
- else if (strcmp("text", arg) == 0)
- GPPC_RETURN_INT4(GppcOidText);
- else if (strcmp("varchar", arg) == 0)
- GPPC_RETURN_INT4(GppcOidVarChar);
- else if (strcmp("bpchar", arg) == 0)
- GPPC_RETURN_INT4(GppcOidBpChar);
- else if (strcmp("bytea", arg) == 0)
- GPPC_RETURN_INT4(GppcOidBytea);
- else if (strcmp("numeric", arg) == 0)
- GPPC_RETURN_INT4(GppcOidNumeric);
- else if (strcmp("date", arg) == 0)
- GPPC_RETURN_INT4(GppcOidDate);
- else if (strcmp("time", arg) == 0)
- GPPC_RETURN_INT4(GppcOidTime);
- else if (strcmp("timetz", arg) == 0)
- GPPC_RETURN_INT4(GppcOidTimeTz);
- else if (strcmp("timestamp", arg) == 0)
- GPPC_RETURN_INT4(GppcOidTimestamp);
- else if (strcmp("timestamptz", arg) == 0)
- GPPC_RETURN_INT4(GppcOidTimestampTz);
-
- GPPC_RETURN_NULL();
-}
-
-GPPC_FUNCTION_INFO(boolfunc);
-GppcDatum boolfunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum boolfunc(GPPC_FUNCTION_ARGS)
-{
- GppcBool arg1 = GPPC_GETARG_BOOL(0);
-
- GPPC_RETURN_BOOL(arg1);
-}
-
-GPPC_FUNCTION_INFO(charfunc);
-GppcDatum charfunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum charfunc(GPPC_FUNCTION_ARGS)
-{
- GppcChar arg1 = GPPC_GETARG_CHAR(0);
-
- GPPC_RETURN_CHAR(arg1);
-}
-
-GPPC_FUNCTION_INFO(int2mulfunc);
-GppcDatum int2mulfunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum int2mulfunc(GPPC_FUNCTION_ARGS)
-{
- GppcInt2 arg1 = GPPC_GETARG_INT2(0);
- GppcInt2 arg2 = GPPC_GETARG_INT2(1);
-
- GPPC_RETURN_INT2(arg1 * arg2);
-}
-
-GPPC_FUNCTION_INFO(int4func1);
-GppcDatum int4func1(GPPC_FUNCTION_ARGS);
-
-GppcDatum int4func1(GPPC_FUNCTION_ARGS)
-{
- int nargs = GPPC_NARGS();
- GppcInt4 arg1;
-
- if (nargs < 1)
- arg1 = 0;
- else
- arg1 = GPPC_GETARG_INT4(0);
-
- GPPC_RETURN_INT4(arg1);
-}
-
-GPPC_FUNCTION_INFO(int8plusfunc);
-GppcDatum int8plusfunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum int8plusfunc(GPPC_FUNCTION_ARGS)
-{
- GppcInt8 arg1 = GPPC_GETARG_INT8(0);
- GppcInt8 arg2 = GPPC_GETARG_INT8(1);
-
- GPPC_RETURN_INT8(arg1 + arg2);
-}
-
-GPPC_FUNCTION_INFO(float4func1);
-GppcDatum float4func1(GPPC_FUNCTION_ARGS);
-
-GppcDatum float4func1(GPPC_FUNCTION_ARGS)
-{
- GppcFloat4 arg1 = GPPC_GETARG_FLOAT4(0);
-
- GPPC_RETURN_FLOAT4(arg1 + 1.5);
-}
-
-GPPC_FUNCTION_INFO(float8func1);
-GppcDatum float8func1(GPPC_FUNCTION_ARGS);
-
-GppcDatum float8func1(GPPC_FUNCTION_ARGS)
-{
- GppcFloat8 arg1 = GPPC_GETARG_FLOAT8(0);
-
- GPPC_RETURN_FLOAT8(arg1 / 2.0);
-}
-
-GPPC_FUNCTION_INFO(textdoublefunc);
-GppcDatum textdoublefunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum textdoublefunc(GPPC_FUNCTION_ARGS)
-{
- GppcText arg1 = GPPC_GETARG_TEXT(0);
- size_t clen = GppcGetTextLength(arg1);
- GppcText result;
-
- result = GppcAllocText(clen * 2);
- memcpy(GppcGetTextPointer(result), GppcGetTextPointer(arg1), clen);
- memcpy(GppcGetTextPointer(result) + clen, GppcGetTextPointer(arg1), clen);
-
- GPPC_RETURN_TEXT(result);
-}
-
-GPPC_FUNCTION_INFO(textgenfunc);
-GppcDatum textgenfunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum textgenfunc(GPPC_FUNCTION_ARGS)
-{
- GppcText result = GppcCStringGetText("cstring result");
-
- GPPC_RETURN_TEXT(result);
-}
-
-GPPC_FUNCTION_INFO(textcopyfunc);
-GppcDatum textcopyfunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum textcopyfunc(GPPC_FUNCTION_ARGS)
-{
- GppcText copy = GPPC_GETARG_TEXT_COPY(0);
- GppcText arg = GPPC_GETARG_TEXT(0);
- GppcBool needcopy = GPPC_GETARG_BOOL(1);
-
- *(GppcGetTextPointer(copy)) = '!';
-
- GPPC_RETURN_TEXT(needcopy ? copy : arg);
-}
-
-GPPC_FUNCTION_INFO(varchardoublefunc);
-GppcDatum varchardoublefunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum varchardoublefunc(GPPC_FUNCTION_ARGS)
-{
- GppcVarChar arg1 = GPPC_GETARG_VARCHAR(0);
- size_t clen = GppcGetVarCharLength(arg1);
- GppcVarChar result;
-
- result = GppcAllocVarChar(clen * 2);
- memcpy(GppcGetVarCharPointer(result), GppcGetVarCharPointer(arg1), clen);
- memcpy(GppcGetVarCharPointer(result) + clen, GppcGetVarCharPointer(arg1), clen);
-
- GPPC_RETURN_VARCHAR(result);
-}
-
-GPPC_FUNCTION_INFO(varchargenfunc);
-GppcDatum varchargenfunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum varchargenfunc(GPPC_FUNCTION_ARGS)
-{
- GppcVarChar result = GppcCStringGetVarChar("cstring result");
-
- GPPC_RETURN_VARCHAR(result);
-}
-
-GPPC_FUNCTION_INFO(varcharcopyfunc);
-GppcDatum varcharcopyfunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum varcharcopyfunc(GPPC_FUNCTION_ARGS)
-{
- GppcVarChar copy = GPPC_GETARG_VARCHAR_COPY(0);
- GppcVarChar arg = GPPC_GETARG_VARCHAR(0);
- GppcBool needcopy = GPPC_GETARG_BOOL(1);
-
- *(GppcGetVarCharPointer(copy)) = '!';
-
- GPPC_RETURN_VARCHAR(needcopy ? copy : arg);
-}
-
-GPPC_FUNCTION_INFO(bpchardoublefunc);
-GppcDatum bpchardoublefunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum bpchardoublefunc(GPPC_FUNCTION_ARGS)
-{
- GppcBpChar arg1 = GPPC_GETARG_BPCHAR(0);
- size_t clen = GppcGetBpCharLength(arg1);
- GppcBpChar result;
-
- result = GppcAllocBpChar(clen * 2);
- memcpy(GppcGetBpCharPointer(result), GppcGetBpCharPointer(arg1), clen);
- memcpy(GppcGetBpCharPointer(result) + clen, GppcGetBpCharPointer(arg1), clen);
-
- GPPC_RETURN_BPCHAR(result);
-}
-
-GPPC_FUNCTION_INFO(bpchargenfunc);
-GppcDatum bpchargenfunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum bpchargenfunc(GPPC_FUNCTION_ARGS)
-{
- GppcBpChar result = GppcCStringGetBpChar("cstring result");
-
- GPPC_RETURN_BPCHAR(result);
-}
-
-GPPC_FUNCTION_INFO(bpcharcopyfunc);
-GppcDatum bpcharcopyfunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum bpcharcopyfunc(GPPC_FUNCTION_ARGS)
-{
- GppcBpChar copy = GPPC_GETARG_BPCHAR_COPY(0);
- GppcBpChar arg = GPPC_GETARG_BPCHAR(0);
- GppcBool needcopy = GPPC_GETARG_BOOL(1);
-
- *(GppcGetBpCharPointer(copy)) = '!';
-
- GPPC_RETURN_BPCHAR(needcopy ? copy : arg);
-}
-
-GPPC_FUNCTION_INFO(errfunc1);
-GppcDatum errfunc1(GPPC_FUNCTION_ARGS);
-
-GppcDatum errfunc1(GPPC_FUNCTION_ARGS)
-{
- GppcText arg1 = GPPC_GETARG_TEXT(0);
- char *cstr;
-
- cstr = GppcTextGetCString(arg1);
- GppcReport(GPPC_NOTICE, "%s", cstr);
-
- GPPC_RETURN_NULL();
-}
-
-GPPC_FUNCTION_INFO(argisnullfunc);
-GppcDatum argisnullfunc(GPPC_FUNCTION_ARGS);
-
-GppcDatum argisnullfunc(GPPC_FUNCTION_ARGS)
-{
- if (GPPC_ARGISNULL(0))
- GPPC_RETURN_BOOL(true);
- else
- GPPC_RETURN_BOOL(false);
-}
-
-GPPC_FUNCTION_INFO(byteafunc1);
-GppcDatum byteafunc1(GPPC_FUNCTION_ARGS);
-
-GppcDatum byteafunc1(GPPC_FUNCTION_ARGS)
-{
- GppcBytea bytea = GPPC_GETARG_BYTEA_COPY(0);
- char *mem = GppcGetByteaPointer(bytea);
-
- mem[0]++;
-
- GPPC_RETURN_BYTEA(bytea);
-}
-
-GPPC_FUNCTION_INFO(numericfunc1);
-GppcDatum numericfunc1(GPPC_FUNCTION_ARGS);
-
-GppcDatum numericfunc1(GPPC_FUNCTION_ARGS)
-{
- GppcNumeric numeric = GPPC_GETARG_NUMERIC(0);
- char *str;
-
- str = GppcNumericGetCString(numeric);
- if (strlen(str) > 0 && ('0' <= str[0] && str[0] <= '8'))
- str[0]++;
-
- GPPC_RETURN_NUMERIC(GppcCStringGetNumeric(str));
-}
-
-GPPC_FUNCTION_INFO(numericfunc2);
-GppcDatum numericfunc2(GPPC_FUNCTION_ARGS);
-
-GppcDatum numericfunc2(GPPC_FUNCTION_ARGS)
-{
- GppcNumeric numeric = GPPC_GETARG_NUMERIC(0);
-
- GPPC_RETURN_FLOAT8(GppcNumericGetFloat8(numeric));
-}
-
-GPPC_FUNCTION_INFO(numericfunc3);
-GppcDatum numericfunc3(GPPC_FUNCTION_ARGS);
-
-GppcDatum numericfunc3(GPPC_FUNCTION_ARGS)
-{
- GppcFloat8 flt = GPPC_GETARG_FLOAT8(0);
-
- GPPC_RETURN_NUMERIC(GppcFloat8GetNumeric(flt));
-}
-
-GPPC_FUNCTION_INFO(numericdef1);
-GppcDatum numericdef1(GPPC_FUNCTION_ARGS);
-
-GppcDatum numericdef1(GPPC_FUNCTION_ARGS)
-{
- GppcInt4 typmod = GPPC_GETARG_INT4(0);
- int16_t precision, scale;
- char buf[255];
-
- if (GppcGetNumericDef(typmod, &precision, &scale))
- snprintf(buf, 255, "NUMERIC(%d, %d)", precision, scale);
- else
- snprintf(buf, 255, "NUMERIC()");
-
- GPPC_RETURN_TEXT(GppcCStringGetText(buf));
-}
-
-GPPC_FUNCTION_INFO(datefunc1);
-GppcDatum datefunc1(GPPC_FUNCTION_ARGS);
-
-GppcDatum datefunc1(GPPC_FUNCTION_ARGS)
-{
- GppcDate arg = GPPC_GETARG_DATE(0);
- GppcTm tm;
-
- GppcDateGetTm(arg, &tm);
- tm.tm_year += 1;
- tm.tm_mon += 1;
- tm.tm_mday += 1;
-
- GPPC_RETURN_DATE(GppcTmGetDate(&tm));
-}
-
-GPPC_FUNCTION_INFO(timefunc1);
-GppcDatum timefunc1(GPPC_FUNCTION_ARGS);
-
-GppcDatum timefunc1(GPPC_FUNCTION_ARGS)
-{
- GppcTime arg = GPPC_GETARG_TIME(0);
- GppcTm tm;
-
- GppcTimeGetTm(arg, &tm);
- tm.tm_hour += 1;
- tm.tm_min += 1;
- tm.tm_sec += 1;
-
- GPPC_RETURN_TIME(GppcTmGetTime(&tm));
-}
-
-GPPC_FUNCTION_INFO(timetzfunc1);
-GppcDatum timetzfunc1(GPPC_FUNCTION_ARGS);
-
-GppcDatum timetzfunc1(GPPC_FUNCTION_ARGS)
-{
- GppcTimeTz arg = GPPC_GETARG_TIMETZ(0);
- GppcTm tm;
-
- GppcTimeTzGetTm(arg, &tm);
- tm.tm_hour += 1;
- tm.tm_min += 1;
- tm.tm_sec += 1;
-
- GPPC_RETURN_TIMETZ(GppcTmGetTimeTz(&tm));
-}
-
-GPPC_FUNCTION_INFO(timestampfunc1);
-GppcDatum timestampfunc1(GPPC_FUNCTION_ARGS);
-
-GppcDatum timestampfunc1(GPPC_FUNCTION_ARGS)
-{
- GppcTimestamp arg = GPPC_GETARG_TIMESTAMP(0);
- GppcTm tm;
-
- GppcTimestampGetTm(arg, &tm);
- tm.tm_year += 1;
- tm.tm_mon += 1;
- tm.tm_mday += 1;
- tm.tm_hour += 1;
- tm.tm_min += 1;
- tm.tm_sec += 1;
-
- GPPC_RETURN_TIMESTAMP(GppcTmGetTimestamp(&tm));
-}
-
-GPPC_FUNCTION_INFO(timestamptzfunc1);
-GppcDatum timestamptzfunc1(GPPC_FUNCTION_ARGS);
-
-GppcDatum timestamptzfunc1(GPPC_FUNCTION_ARGS)
-{
- GppcTimestampTz arg = GPPC_GETARG_TIMESTAMPTZ(0);
- GppcTm tm;
-
- GppcTimestampTzGetTm(arg, &tm);
- tm.tm_year += 1;
- tm.tm_mon += 1;
- tm.tm_mday += 1;
- tm.tm_hour += 1;
- tm.tm_min += 1;
- tm.tm_sec += 1;
-
- GPPC_RETURN_TIMESTAMPTZ(GppcTmGetTimestampTz(&tm));
-}
-
-/*
- * SPI test 1: run query, get the attribute by number at the final row as string
- */
-GPPC_FUNCTION_INFO(spifunc1);
-GppcDatum spifunc1(GPPC_FUNCTION_ARGS);
-
-GppcDatum spifunc1(GPPC_FUNCTION_ARGS)
-{
- char *query = GppcTextGetCString(GPPC_GETARG_TEXT(0));
- GppcInt4 attno = GPPC_GETARG_INT4(1);
- GppcSPIResult result;
- char *val = NULL;
-
- if (GppcSPIConnect() < 0)
- GppcReport(GPPC_ERROR, "connect error");
-
- result = GppcSPIExec(query, 0);
- while (result->current < result->processed)
- {
- val = GppcSPIGetValue(result, attno, true);
- result->current++;
- }
-
- GppcSPIFinish();
-
- if (val)
- GPPC_RETURN_TEXT(GppcCStringGetText(val));
- else
- GPPC_RETURN_NULL();
-}
-
-/*
- * SPI test 2: run query, get the attribute by name at the final row as string
- */
-GPPC_FUNCTION_INFO(spifunc2);
-GppcDatum spifunc2(GPPC_FUNCTION_ARGS);
-
-GppcDatum spifunc2(GPPC_FUNCTION_ARGS)
-{
- char *query = GppcTextGetCString(GPPC_GETARG_TEXT(0));
- char *attname = GppcTextGetCString(GPPC_GETARG_TEXT(1));
- GppcSPIResult result;
- char *val = NULL;
-
- if (GppcSPIConnect() < 0)
- GppcReport(GPPC_ERROR, "connect error");
-
- result = GppcSPIExec(query, 0);
- while (result->current < result->processed)
- {
- val = GppcSPIGetValueByName(result, attname, true);
- result->current++;
- }
-
- GppcSPIFinish();
-
- if (val)
- GPPC_RETURN_TEXT(GppcCStringGetText(val));
- else
- GPPC_RETURN_NULL();
-}
-
-/*
- * SPI test 3: run query, get the attribute by number at the final row as datum
- */
-GPPC_FUNCTION_INFO(spifunc3);
-GppcDatum spifunc3(GPPC_FUNCTION_ARGS);
-
-GppcDatum spifunc3(GPPC_FUNCTION_ARGS)
-{
- char *query = GppcTextGetCString(GPPC_GETARG_TEXT(0));
- GppcInt4 attno = GPPC_GETARG_INT4(1);
- GppcSPIResult result;
- GppcDatum datum;
- bool isnull = true;
-
- if (GppcSPIConnect() < 0)
- GppcReport(GPPC_ERROR, "connect error");
-
- result = GppcSPIExec(query, 0);
- while (result->current < result->processed)
- {
- datum = GppcSPIGetDatum(result, attno, &isnull, true);
- result->current++;
- }
-
- GppcSPIFinish();
-
- if (!isnull)
- GPPC_RETURN_TEXT(GppcDatumGetText(datum));
- else
- GPPC_RETURN_NULL();
-}
-
-/*
- * SPI test 4: run query, get the attribute by name at the final row as datum
- */
-GPPC_FUNCTION_INFO(spifunc4);
-GppcDatum spifunc4(GPPC_FUNCTION_ARGS);
-
-GppcDatum spifunc4(GPPC_FUNCTION_ARGS)
-{
- char *query = GppcTextGetCString(GPPC_GETARG_TEXT(0));
- char *attname = GppcTextGetCString(GPPC_GETARG_TEXT(1));
- GppcSPIResult result;
- GppcDatum datum;
- bool isnull = true;
-
- if (GppcSPIConnect() < 0)
- GppcReport(GPPC_ERROR, "connect error");
-
- result = GppcSPIExec(query, 0);
- while (result->current < result->processed)
- {
- datum = GppcSPIGetDatumByName(result, attname, &isnull, true);
- result->current++;
- }
-
- GppcSPIFinish();
-
- if (!isnull)
- GPPC_RETURN_TEXT(GppcDatumGetText(datum));
- else
- GPPC_RETURN_NULL();
-}
-
-/*
- * The error handler. We can call GppcReport with INFO when ERROR, since it's not
- * infinite recursion. For test purpose, set 'x' to message when WARNING.
- */
-static void
-errorcallback(GppcReportInfo info, void *arg)
-{
- GppcReportLevel elevel = GppcGetReportLevel(info);
-
- if (elevel == GPPC_WARNING && arg)
- memset(GppcGetTextPointer(arg), 'x', GppcGetTextLength(arg));
- else if (elevel == GPPC_ERROR && arg)
- GppcReport(GPPC_INFO, "inside callback: %s", GppcTextGetCString(arg));
-}
-
-GPPC_FUNCTION_INFO(errorcallbackfunc1);
-GppcDatum errorcallbackfunc1(GPPC_FUNCTION_ARGS);
-
-GppcDatum
-errorcallbackfunc1(GPPC_FUNCTION_ARGS)
-{
- GppcText arg = GPPC_GETARG_TEXT_COPY(0);
- char *carg = GppcTextGetCString(arg);
- GppcReportCallbackState cbinfo;
-
- cbinfo = GppcInstallReportCallback(errorcallback, arg);
-
- if (strcmp(carg, "info") == 0)
- GppcReport(GPPC_INFO, "info emit");
- else if (strcmp(carg, "warning") == 0)
- GppcReport(GPPC_WARNING, "warning emit");
- else if (strcmp(carg, "error") == 0)
- GppcReport(GPPC_ERROR, "error emit");
-
- GppcUninstallReportCallback(cbinfo);
-
- GPPC_RETURN_TEXT(arg);
-}
-
-#if GP_VERSION_NUM >= 40200
-GPPC_FUNCTION_INFO(tablefunc_describe);
-GppcDatum tablefunc_describe(GPPC_FUNCTION_ARGS);
-
-GppcDatum
-tablefunc_describe(GPPC_FUNCTION_ARGS)
-{
- GppcTupleDesc tdesc;
- GppcInt4 avalue;
- bool isnull, iserror;
- GppcTupleDesc odesc;
- GppcReportCallbackState cbstate;
-
- /* For a test purpose to make sure it's working in the describe func */
- cbstate = GppcInstallReportCallback(errorcallback, NULL);
-
- /* Fetch and validate input */
- if (GPPC_NARGS() != 1 || GPPC_ARGISNULL(0))
- GppcReport(GPPC_ERROR, "invalid invocation of describe");
-
- /* Now get the tuple descriptor for the ANYTABLE we received */
- tdesc = GPPC_TF_INPUT_DESC(0, &iserror);
-
- if (iserror)
- GppcReport(GPPC_ERROR, "cannot build tuple descriptor");
-
- avalue = GPPC_TF_GETARG_INT4(1, &isnull, &iserror);
- if (iserror)
- GppcReport(GPPC_ERROR, "function is mal-declared");
- if (isnull)
- GppcReport(GPPC_ERROR, "the second argument should not be NULL");
-
- if (avalue < 1 || avalue > GppcTupleDescNattrs(tdesc))
- GppcReport(GPPC_ERROR, "invalid column position %d", avalue);
-
- /* Print out the attlen -- just an excuse to use GppcTupleDescAttrLen() */
- GppcReport(GPPC_INFO, "attlen is %d", GppcTupleDescAttrLen(tdesc, avalue - 1));
-
- /* Build an output tuple a single column based on the column number above */
- odesc = GppcCreateTemplateTupleDesc(1);
- GppcTupleDescInitEntry(odesc, 1,
- GppcTupleDescAttrName(tdesc, avalue - 1),
- GppcTupleDescAttrType(tdesc, avalue - 1),
- GppcTupleDescAttrTypmod(tdesc, avalue - 1));
-
- GppcUninstallReportCallback(cbstate);
-
- /* Finally return that tupdesc */
- GPPC_RETURN_TUPLEDESC(odesc);
-}
-
-GPPC_FUNCTION_INFO(tablefunc_project);
-GppcDatum tablefunc_project(GPPC_FUNCTION_ARGS);
-
-GppcDatum
-tablefunc_project(GPPC_FUNCTION_ARGS)
-{
- GppcFuncCallContext fctx;
- GppcAnyTable scan;
- GppcTupleDesc out_tupdesc, in_tupdesc;
- GppcHeapTuple tuple;
- int position;
- GppcDatum values[1];
- bool nulls[1];
- GppcDatum result;
-
- /*
- * Sanity checking, shouldn't occur if our CREATE FUNCTION in SQL is done
- * correctly.
- */
- if (GPPC_NARGS() != 2 || GPPC_ARGISNULL(0) || GPPC_ARGISNULL(1))
- GppcReport(GPPC_ERROR, "invalid invocation of project");
- scan = GPPC_GETARG_ANYTABLE(0);
- position = GPPC_GETARG_INT4(1);
-
- /* Basic set-returning function (SRF) protocol, setup the context */
- if (GPPC_SRF_IS_FIRSTCALL())
- {
- fctx = GPPC_SRF_FIRSTCALL_INIT();
- }
- fctx = GPPC_SRF_PERCALL_SETUP();
-
- /* Get the next value from the input scan */
- out_tupdesc = GPPC_SRF_RESULT_DESC();
- in_tupdesc = GppcAnyTableGetTupleDesc(scan);
- tuple = GppcAnyTableGetNextTuple(scan);
-
- /* Based on what the describe callback should have setup */
- if (position < 1 || position > GppcTupleDescNattrs(in_tupdesc))
- GppcReport(GPPC_ERROR, "invalid column position(%d)", position);
- if (GppcTupleDescNattrs(out_tupdesc) != 1)
- GppcReport(GPPC_ERROR, "invalid column length in out_tupdesc");
- if (GppcTupleDescAttrType(out_tupdesc, 0) !=
- GppcTupleDescAttrType(in_tupdesc, 0))
- GppcReport(GPPC_ERROR, "type mismatch");
-
- /* check for end of scan */
- if (tuple == NULL)
- GPPC_SRF_RETURN_DONE(fctx);
-
- /* Construct the output tuple and convert to a datum */
- values[0] = GppcGetAttributeByNum(tuple, position, &nulls[0]);
- result = GppcBuildHeapTupleDatum(out_tupdesc, values, nulls);
-
- /* Return the next result */
- GPPC_SRF_RETURN_NEXT(fctx, result);
-}
-
-GPPC_FUNCTION_INFO(describe_spi);
-GppcDatum describe_spi(GPPC_FUNCTION_ARGS);
-
-GppcDatum describe_spi(GPPC_FUNCTION_ARGS)
-{
- GppcTupleDesc tdesc, odesc;
- GppcSPIResult result;
- bool isnull, iserror;
- char *query;
- char *colname = NULL;
- GppcDatum d_colname;
-
- tdesc = GPPC_TF_INPUT_DESC(0, &iserror);
-
- if (GppcSPIConnect() < 0)
- GppcReport(GPPC_ERROR, "unable to connect to SPI");
-
- /* Get query string */
- query = GppcTextGetCString(GPPC_TF_GETARG_TEXT(1, &isnull, &iserror));
- if (isnull || iserror)
- GppcReport(GPPC_ERROR, "invalid invocation of describe_spi");
-
- result = GppcSPIExec(query, 0);
- if (result->processed > 0)
- colname = GppcSPIGetValue(result, 1, true);
- if (colname == NULL)
- colname = "?column?";
- GppcSPIFinish();
-
- /* Build tuple desc */
- odesc = GppcCreateTemplateTupleDesc(1);
- GppcTupleDescInitEntry(odesc, 1,
- colname, GppcOidText, -1);
-
- d_colname = GppcTextGetDatum(GppcCStringGetText(colname));
- /* Pass the query to project */
- GPPC_TF_SET_USERDATA(GppcDatumGetByteaCopy(d_colname));
-
- GPPC_RETURN_TUPLEDESC(odesc);
-}
-
-GPPC_FUNCTION_INFO(project_spi);
-GppcDatum project_spi(GPPC_FUNCTION_ARGS);
-
-GppcDatum project_spi(GPPC_FUNCTION_ARGS)
-{
- GppcFuncCallContext fctx;
- GppcAnyTable scan;
- GppcTupleDesc odesc, idesc;
- GppcHeapTuple tuple;
- char colname[255];
- GppcDatum values[1];
- bool isnull[1];
- GppcDatum result;
-
- scan = GPPC_GETARG_ANYTABLE(0);
- /* Get the user context from the describe function */
- strcpy(colname,
- GppcTextGetCString(GppcDatumGetText(GppcByteaGetDatum(GPPC_TF_GET_USERDATA()))));
-
- if (GPPC_SRF_IS_FIRSTCALL())
- {
- fctx = GPPC_SRF_FIRSTCALL_INIT();
- }
- fctx = GPPC_SRF_PERCALL_SETUP();
-
- /* Get the next value from the input scan */
- odesc = GPPC_SRF_RESULT_DESC();
- idesc = GppcAnyTableGetTupleDesc(scan);
- tuple = GppcAnyTableGetNextTuple(scan);
-
- if (tuple == NULL)
- GPPC_SRF_RETURN_DONE(fctx);
-
- values[0] = GppcGetAttributeByNum(tuple, 1, &isnull[0]);
- if (!isnull[0])
- values[0] = GppcTextGetDatum(GppcCStringGetText(
- strcat(colname, GppcTextGetCString(GppcDatumGetText(values[0])))));
-
- result = GppcBuildHeapTupleDatum(odesc, values, isnull);
- GPPC_SRF_RETURN_NEXT(fctx, result);
-}
-
-typedef struct MySession
-{
- GppcReportCallbackState cbstate;
- char *message;
-} MySession;
-
-static void
-tfcallback(GppcReportInfo info, void *arg)
-{
- GppcReportLevel elevel = GppcGetReportLevel(info);
-
- if (elevel == GPPC_ERROR)
- {
- MySession *sess;
-
- sess = (MySession *) arg;
- GppcReport(GPPC_INFO, "message: %s", sess->message);
- GppcFree(sess);
- }
-}
-
-GPPC_FUNCTION_INFO(project_errorcallback);
-GppcDatum project_errorcallback(GPPC_FUNCTION_ARGS);
-
-GppcDatum project_errorcallback(GPPC_FUNCTION_ARGS)
-{
- GppcFuncCallContext fctx;
- GppcAnyTable scan;
- GppcTupleDesc odesc, idesc;
- GppcHeapTuple tuple;
- GppcDatum *values;
- bool *isnull;
- int i, attnum;
- GppcDatum result;
-
- scan = GPPC_GETARG_ANYTABLE(0);
-
- if (GPPC_SRF_IS_FIRSTCALL())
- {
- MySession *sess;
-
- fctx = GPPC_SRF_FIRSTCALL_INIT();
- sess = (MySession *) GppcSRFAlloc(fctx, sizeof(MySession));
- sess->cbstate = GppcInstallReportCallback(tfcallback, sess);
- sess->message = GppcSRFAlloc(fctx, 255);
- strcpy(sess->message, "Hello, world!");
-
- /* Save session in the SRF context */
- GppcSRFSave(fctx, sess);
- }
- fctx = GPPC_SRF_PERCALL_SETUP();
-
- /*
- * Return the input tuple as is, but it seems
- * TableFunction doesn't accept tuples with <idesc>, so copy
- * everything to a new tuple.
- */
- odesc = GPPC_SRF_RESULT_DESC();
- idesc = GppcAnyTableGetTupleDesc(scan);
- tuple = GppcAnyTableGetNextTuple(scan);
-
- if (tuple == NULL)
- {
- /* End of the input scan */
- MySession *sess;
-
- sess = (MySession *) GppcSRFRestore(fctx);
- GppcUninstallReportCallback(sess->cbstate);
- GppcFree(sess);
- GPPC_SRF_RETURN_DONE(fctx);
- }
-
- attnum = GppcTupleDescNattrs(idesc);
- values = GppcAlloc(sizeof(GppcDatum) * attnum);
- isnull = GppcAlloc(sizeof(bool) * attnum);
- for (i = 0; i < attnum; i++)
- {
- values[i] = GppcGetAttributeByNum(tuple, 1, &isnull[i]);
- if (i == 0 && isnull[0])
- GppcReport(GPPC_ERROR, "first attribute is NULL");
- }
-
- result = GppcBuildHeapTupleDatum(odesc, values, isnull);
- GPPC_SRF_RETURN_NEXT(fctx, result);
-}
-#endif /* GP_VERSION_NUM >= 40200 */
-
-GPPC_FUNCTION_INFO(test_encoding_name);
-GppcDatum test_encoding_name(GPPC_FUNCTION_ARGS);
-
-GppcDatum
-test_encoding_name(GPPC_FUNCTION_ARGS)
-{
- GppcText res;
- const char *str = GppcDatabaseEncodingName(GPPC_UTF8);
- size_t len = strlen(str);
-
- res = GppcAllocText(len);
- memcpy(GppcGetTextPointer(res), str, len);
-
- GPPC_RETURN_TEXT(res);
-}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/dbf32e99/src/backend/libgppc/test/sql/gppc_basic.sql
----------------------------------------------------------------------
diff --git a/src/backend/libgppc/test/sql/gppc_basic.sql b/src/backend/libgppc/test/sql/gppc_basic.sql
deleted file mode 100644
index f40b1ab..0000000
--- a/src/backend/libgppc/test/sql/gppc_basic.sql
+++ /dev/null
@@ -1,94 +0,0 @@
-CREATE FUNCTION oidcheckfunc(text) RETURNS int4 AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION boolfunc(bool) RETURNS bool AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION charfunc("char") RETURNS "char" AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION int2mulfunc(int2, int2) RETURNS int2 AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION int4func1(int) RETURNS int AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION int8plusfunc(int8, int8) RETURNS int8 AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION float4func1(float4) RETURNS float4 AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION float8func1(float8) RETURNS float8 AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION textdoublefunc(text) RETURNS text AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION textgenfunc() RETURNS text AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION textcopyfunc(text, bool) RETURNS text AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION varchardoublefunc(varchar) RETURNS varchar AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION varchargenfunc() RETURNS varchar AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION varcharcopyfunc(text, bool) RETURNS text AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION bpchardoublefunc(char) RETURNS char AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION bpchargenfunc() RETURNS char AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION bpcharcopyfunc(text, bool) RETURNS text AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION errfunc1(text) RETURNS text AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION argisnullfunc(int) RETURNS bool AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE;
-CREATE FUNCTION byteafunc1(bytea) RETURNS bytea AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION numericfunc1(numeric) RETURNS numeric AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION numericfunc2(numeric) RETURNS float8 AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION numericfunc3(float8) RETURNS numeric AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION numericdef1(int4) RETURNS text AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION datefunc1(date) RETURNS date AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION timefunc1(time) RETURNS time AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION timetzfunc1(timetz) RETURNS timetz AS '$libdir/gppc_test' LANGUAGE c STABLE STRICT;
-CREATE FUNCTION timestampfunc1(timestamp) RETURNS timestamp AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE STRICT;
-CREATE FUNCTION timestamptzfunc1(timestamptz) RETURNS timestamptz AS '$libdir/gppc_test' LANGUAGE c STABLE STRICT;
-CREATE FUNCTION spifunc1(text, int) RETURNS text AS '$libdir/gppc_test' LANGUAGE c STRICT;
-CREATE FUNCTION spifunc2(text, text) RETURNS text AS '$libdir/gppc_test' LANGUAGE c STRICT;
-CREATE FUNCTION spifunc3(text, int) RETURNS text AS '$libdir/gppc_test' LANGUAGE c STRICT;
-CREATE FUNCTION spifunc4(text, text) RETURNS text AS '$libdir/gppc_test' LANGUAGE c STRICT;
-CREATE FUNCTION errorcallbackfunc1(text) RETURNS text AS '$libdir/gppc_test' LANGUAGE c STRICT;
-CREATE FUNCTION test_encoding_name() RETURNS text AS '$libdir/gppc_test' LANGUAGE c IMMUTABLE;
-
-CREATE TABLE numerictable(
- a numeric(5, 2),
- b numeric(3),
- c numeric
-);
-
-SELECT oidcheckfunc('bool'),
- oidcheckfunc('char'),
- oidcheckfunc('int2'),
- oidcheckfunc('int4'),
- oidcheckfunc('int8'),
- oidcheckfunc('float4'),
- oidcheckfunc('float8'),
- oidcheckfunc('text'),
- oidcheckfunc('varchar'),
- oidcheckfunc('bpchar'),
- oidcheckfunc('bytea'),
- oidcheckfunc('numeric'),
- oidcheckfunc('time'),
- oidcheckfunc('timetz'),
- oidcheckfunc('timestamp'),
- oidcheckfunc('timestamptz');
-SELECT boolfunc(true and true);
-SELECT charfunc('a');
-SELECT int2mulfunc(2::int2, 3::int2);
-SELECT int4func1(10);
-SELECT int8plusfunc(10000000000, 1);
-SELECT float4func1(4.2);
-SELECT float8func1(0.0000001);
-SELECT textdoublefunc('bla');
-SELECT textgenfunc();
-SELECT textcopyfunc('white', true), textcopyfunc('white', false);
-SELECT varchardoublefunc('bla');
-SELECT varchargenfunc();
-SELECT varcharcopyfunc('white', true), varcharcopyfunc('white', false);
-SELECT bpchardoublefunc('bla');
-SELECT bpchargenfunc();
-SELECT bpcharcopyfunc('white', true), bpcharcopyfunc('white', false);
-SELECT errfunc1('The quick brown fox jumps over the lazy dog');
-SELECT argisnullfunc(0), argisnullfunc(NULL);
-SELECT byteafunc1(E'\\244\\233abc');
-SELECT numericfunc1(1000);
-SELECT numericfunc2(1000.00001);
-SELECT numericfunc3(1000.00001);
-SELECT attname, numericdef1(atttypmod) FROM pg_attribute
- WHERE attrelid = 'numerictable'::regclass and atttypid = 'numeric'::regtype;
-SELECT datefunc1('2011-02-24');
-SELECT timefunc1('15:00:01');
-SELECT timetzfunc1('15:00:01 UTC');
-SELECT timestampfunc1('2011-02-24 15:00:01');
-SELECT timestamptzfunc1('2011-02-24 15:00:01 UTC');
-SELECT spifunc1($$select i, i * 2 from generate_series(1, 10)i order by 1$$, 2);
-SELECT spifunc2($$select i, i * 2 as val from generate_series(1, 10)i order by 1$$, 'val');
-SELECT spifunc3($$select i, 'foo' || i as val from generate_series(1, 10)i order by 1$$, 2);
-SELECT spifunc4($$select i, 'foo' || i as val from generate_series(1, 10)i order by 1$$, 'val');
-SELECT errorcallbackfunc1('warning');
-SELECT errorcallbackfunc1('error');
-SELECT test_encoding_name();
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/dbf32e99/src/backend/libgppc/test/sql/tablefunc.sql
----------------------------------------------------------------------
diff --git a/src/backend/libgppc/test/sql/tablefunc.sql b/src/backend/libgppc/test/sql/tablefunc.sql
deleted file mode 100644
index 5d3e08e..0000000
--- a/src/backend/libgppc/test/sql/tablefunc.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-CREATE FUNCTION tablefunc_describe(internal) RETURNS internal AS '$libdir/gppc_test' LANGUAGE c;
-CREATE FUNCTION tablefunc_project(anytable, int) RETURNS SETOF record AS '$libdir/gppc_test' LANGUAGE c WITH(describe=tablefunc_describe);
-CREATE FUNCTION describe_spi(internal) RETURNS internal AS '$libdir/gppc_test' LANGUAGE c;
-CREATE FUNCTION project_spi(anytable, text) RETURNS SETOF record AS '$libdir/gppc_test' LANGUAGE c WITH(describe=describe_spi);
-CREATE FUNCTION project_errorcallback(anytable, OUT int, OUT int) RETURNS SETOF record AS '$libdir/gppc_test' LANGUAGE c;
-
-SELECT * FROM tablefunc_project(TABLE(SELECT a, a / 10 FROM generate_series(1, 10)a SCATTER BY a), 2) ORDER BY 1;
-SELECT * FROM project_spi(TABLE(SELECT a::text FROM generate_series(1, 10)a SCATTER BY a), 'SELECT $$foo$$') ORDER BY 1;
-SELECT * FROM project_errorcallback(TABLE(SELECT CASE WHEN a < 10 THEN a END, a FROM generate_series(1, 10)a SCATTER BY a));
-SELECT * FROM project_errorcallback(TABLE(SELECT a, a FROM generate_series(1, 5)a SCATTER BY a));