当前位置: 首页>>代码示例>>C++>>正文


C++ PG_GETARG_LTREE函数代码示例

本文整理汇总了C++中PG_GETARG_LTREE函数的典型用法代码示例。如果您正苦于以下问题:C++ PG_GETARG_LTREE函数的具体用法?C++ PG_GETARG_LTREE怎么用?C++ PG_GETARG_LTREE使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了PG_GETARG_LTREE函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: ltree_index

Datum
ltree_index(PG_FUNCTION_ARGS)
{
    ltree	   *a = PG_GETARG_LTREE(0);
    ltree	   *b = PG_GETARG_LTREE(1);
    int			start = (fcinfo->nargs == 3) ? PG_GETARG_INT32(2) : 0;
    int			i,
                j;
    ltree_level *startptr,
                *aptr,
                *bptr;
    bool		found = false;

    if (start < 0)
    {
        if (-start >= a->numlevel)
            start = 0;
        else
            start = (int) (a->numlevel) + start;
    }

    if (a->numlevel - start < b->numlevel || a->numlevel == 0 || b->numlevel == 0)
    {
        PG_FREE_IF_COPY(a, 0);
        PG_FREE_IF_COPY(b, 1);
        PG_RETURN_INT32(-1);
    }

    startptr = LTREE_FIRST(a);
    for (i = 0; i <= a->numlevel - b->numlevel; i++)
    {
        if (i >= start)
        {
            aptr = startptr;
            bptr = LTREE_FIRST(b);
            for (j = 0; j < b->numlevel; j++)
            {
                if (!(aptr->len == bptr->len && strncmp(aptr->name, bptr->name, aptr->len) == 0))
                    break;
                aptr = LEVEL_NEXT(aptr);
                bptr = LEVEL_NEXT(bptr);
            }

            if (j == b->numlevel)
            {
                found = true;
                break;
            }
        }
        startptr = LEVEL_NEXT(startptr);
    }

    if (!found)
        i = -1;

    PG_FREE_IF_COPY(a, 0);
    PG_FREE_IF_COPY(b, 1);
    PG_RETURN_INT32(i);
}
开发者ID:hqinnus,项目名称:postgres-9.0.1-fyp,代码行数:59,代码来源:ltree_op.c

示例2: ltree_risparent

Datum
ltree_risparent(PG_FUNCTION_ARGS)
{
    ltree	   *c = PG_GETARG_LTREE(0);
    ltree	   *p = PG_GETARG_LTREE(1);
    bool		res = inner_isparent(c, p);

    PG_FREE_IF_COPY(c, 0);
    PG_FREE_IF_COPY(p, 1);
    PG_RETURN_BOOL(res);
}
开发者ID:hqinnus,项目名称:postgres-9.0.1-fyp,代码行数:11,代码来源:ltree_op.c

示例3: ltree_addltree

Datum
ltree_addltree(PG_FUNCTION_ARGS)
{
    ltree	   *a = PG_GETARG_LTREE(0);
    ltree	   *b = PG_GETARG_LTREE(1);
    ltree	   *r;

    r = ltree_concat(a, b);
    PG_FREE_IF_COPY(a, 0);
    PG_FREE_IF_COPY(b, 1);
    PG_RETURN_POINTER(r);
}
开发者ID:hqinnus,项目名称:postgres-9.0.1-fyp,代码行数:12,代码来源:ltree_op.c

示例4: ltree2text

Datum
ltree2text(PG_FUNCTION_ARGS)
{
    ltree	   *in = PG_GETARG_LTREE(0);
    char	   *ptr;
    int			i;
    ltree_level *curlevel;
    text	   *out;

    out = (text *) palloc(VARSIZE(in) + VARHDRSZ);
    ptr = VARDATA(out);
    curlevel = LTREE_FIRST(in);
    for (i = 0; i < in->numlevel; i++)
    {
        if (i != 0)
        {
            *ptr = '.';
            ptr++;
        }
        memcpy(ptr, curlevel->name, curlevel->len);
        ptr += curlevel->len;
        curlevel = LEVEL_NEXT(curlevel);
    }

    SET_VARSIZE(out, ptr - ((char *) out));
    PG_FREE_IF_COPY(in, 0);

    PG_RETURN_POINTER(out);
}
开发者ID:hqinnus,项目名称:postgres-9.0.1-fyp,代码行数:29,代码来源:ltree_op.c

示例5: subpath

Datum
subpath(PG_FUNCTION_ARGS)
{
    ltree	   *t = PG_GETARG_LTREE(0);
    int4		start = PG_GETARG_INT32(1);
    int4		len = (fcinfo->nargs == 3) ? PG_GETARG_INT32(2) : 0;
    int4		end;
    ltree	   *res;

    end = start + len;

    if (start < 0)
    {
        start = t->numlevel + start;
        end = start + len;
    }
    if (start < 0)
    {   /* start > t->numlevel */
        start = t->numlevel + start;
        end = start + len;
    }

    if (len < 0)
        end = t->numlevel + len;
    else if (len == 0)
        end = (fcinfo->nargs == 3) ? start : 0xffff;

    res = inner_subltree(t, start, end);

    PG_FREE_IF_COPY(t, 0);
    PG_RETURN_POINTER(res);
}
开发者ID:hqinnus,项目名称:postgres-9.0.1-fyp,代码行数:32,代码来源:ltree_op.c

示例6: ltree_textadd

Datum
ltree_textadd(PG_FUNCTION_ARGS)
{
	ltree	   *a = PG_GETARG_LTREE(1);
	text	   *b = PG_GETARG_TEXT_P(0);
	char	   *s;
	ltree	   *r,
			   *tmp;

	s = (char *) palloc(VARSIZE(b) - VARHDRSZ + 1);
	memcpy(s, VARDATA(b), VARSIZE(b) - VARHDRSZ);
	s[VARSIZE(b) - VARHDRSZ] = '\0';

	tmp = (ltree *) DatumGetPointer(DirectFunctionCall1(
														ltree_in,
														PointerGetDatum(s)
														));

	pfree(s);

	r = ltree_concat(tmp, a);

	pfree(tmp);

	PG_FREE_IF_COPY(a, 1);
	PG_FREE_IF_COPY(b, 0);
	PG_RETURN_POINTER(r);
}
开发者ID:CraigBryan,项目名称:PostgresqlFun,代码行数:28,代码来源:ltree_op.c

示例7: ltree_out

Datum
ltree_out(PG_FUNCTION_ARGS)
{
	ltree	   *in = PG_GETARG_LTREE(0);
	char	   *buf,
			   *ptr;
	int			i;
	ltree_level *curlevel;

	ptr = buf = (char *) palloc(VARSIZE(in));
	curlevel = LTREE_FIRST(in);
	for (i = 0; i < in->numlevel; i++)
	{
		if (i != 0)
		{
			*ptr = '.';
			ptr++;
		}
		memcpy(ptr, curlevel->name, curlevel->len);
		ptr += curlevel->len;
		curlevel = LEVEL_NEXT(curlevel);
	}

	*ptr = '\0';
	PG_FREE_IF_COPY(in, 0);

	PG_RETURN_POINTER(buf);
}
开发者ID:AlexanderDenkMA,项目名称:TypeChef-PostgreSQLAnalysis,代码行数:28,代码来源:ltree_io.c

示例8: lt_q_regex

Datum
lt_q_regex(PG_FUNCTION_ARGS)
{
	ltree	   *tree = PG_GETARG_LTREE(0);
	ArrayType  *_query = PG_GETARG_ARRAYTYPE_P(1);
	lquery	   *query = (lquery *) ARR_DATA_PTR(_query);
	bool		res = false;
	int			num = ArrayGetNItems(ARR_NDIM(_query), ARR_DIMS(_query));

	if (ARR_NDIM(_query) != 1)
		ereport(ERROR,
				(errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR),
				 errmsg("array must be one-dimensional")));

	while (num > 0)
	{
		if (DatumGetBool(DirectFunctionCall2(ltq_regex,
						 PointerGetDatum(tree), PointerGetDatum(query))))
		{

			res = true;
			break;
		}
		num--;
		query = NEXTVAL(query);
	}

	PG_FREE_IF_COPY(tree, 0);
	PG_FREE_IF_COPY(_query, 1);
	PG_RETURN_BOOL(res);
}
开发者ID:berkeley-cs186,项目名称:course-fa07,代码行数:31,代码来源:lquery_op.c

示例9: ltq_regex

Datum
ltq_regex(PG_FUNCTION_ARGS)
{
	ltree	   *tree = PG_GETARG_LTREE(0);
	lquery	   *query = PG_GETARG_LQUERY(1);
	bool		res = false;

	if (query->flag & LQUERY_HASNOT)
	{
		FieldNot	fn;

		fn.q = NULL;

		res = checkCond(LQUERY_FIRST(query), query->numlevel,
						LTREE_FIRST(tree), tree->numlevel, &fn);
	}
	else
	{
		res = checkCond(LQUERY_FIRST(query), query->numlevel,
						LTREE_FIRST(tree), tree->numlevel, NULL);
	}

	PG_FREE_IF_COPY(tree, 0);
	PG_FREE_IF_COPY(query, 1);
	PG_RETURN_BOOL(res);
}
开发者ID:berkeley-cs186,项目名称:course-fa07,代码行数:26,代码来源:lquery_op.c

示例10: subltree

Datum
subltree(PG_FUNCTION_ARGS)
{
    ltree	   *t = PG_GETARG_LTREE(0);
    ltree	   *res = inner_subltree(t, PG_GETARG_INT32(1), PG_GETARG_INT32(2));

    PG_FREE_IF_COPY(t, 0);
    PG_RETURN_POINTER(res);
}
开发者ID:hqinnus,项目名称:postgres-9.0.1-fyp,代码行数:9,代码来源:ltree_op.c

示例11: nlevel

Datum
nlevel(PG_FUNCTION_ARGS)
{
    ltree	   *a = PG_GETARG_LTREE(0);
    int			res = a->numlevel;

    PG_FREE_IF_COPY(a, 0);
    PG_RETURN_INT32(res);
}
开发者ID:hqinnus,项目名称:postgres-9.0.1-fyp,代码行数:9,代码来源:ltree_op.c

示例12: _ltree_risparent

Datum
_ltree_risparent(PG_FUNCTION_ARGS)
{
	ArrayType  *la = PG_GETARG_ARRAYTYPE_P(0);
	ltree	   *query = PG_GETARG_LTREE(1);
	bool		res = array_iterator(la, ltree_risparent, (void *) query, NULL);

	PG_FREE_IF_COPY(la, 0);
	PG_FREE_IF_COPY(query, 1);
	PG_RETURN_BOOL(res);
}
开发者ID:HBPSP8Repo,项目名称:NoDB,代码行数:11,代码来源:_ltree_op.c

示例13: lca

Datum
lca(PG_FUNCTION_ARGS)
{
    int			i;
    ltree	  **a,
              *res;

    a = (ltree **) palloc(sizeof(ltree *) * fcinfo->nargs);
    for (i = 0; i < fcinfo->nargs; i++)
        a[i] = PG_GETARG_LTREE(i);
    res = lca_inner(a, (int) fcinfo->nargs);
    for (i = 0; i < fcinfo->nargs; i++)
        PG_FREE_IF_COPY(a[i], i);
    pfree(a);

    if (res)
        PG_RETURN_POINTER(res);
    else
        PG_RETURN_NULL();
}
开发者ID:hqinnus,项目名称:postgres-9.0.1-fyp,代码行数:20,代码来源:ltree_op.c

示例14: ltxtq_exec

Datum
ltxtq_exec(PG_FUNCTION_ARGS)
{
	ltree	   *val = PG_GETARG_LTREE(0);
	ltxtquery  *query = PG_GETARG_LTXTQUERY(1);
	CHKVAL		chkval;
	bool		result;

	chkval.node = val;
	chkval.operand = GETOPERAND(query);

	result = ltree_execute(
						   GETQUERY(query),
						   &chkval,
						   true,
						   checkcondition_str
		);

	PG_FREE_IF_COPY(val, 0);
	PG_FREE_IF_COPY(query, 1);
	PG_RETURN_BOOL(result);
}
开发者ID:Joe-xXx,项目名称:postgres-old-soon-decommissioned,代码行数:22,代码来源:ltxtquery_op.c

示例15: _ltree_extract_risparent

Datum
_ltree_extract_risparent(PG_FUNCTION_ARGS)
{
	ArrayType  *la = PG_GETARG_ARRAYTYPE_P(0);
	ltree	   *query = PG_GETARG_LTREE(1);
	ltree	   *found,
			   *item;

	if (!array_iterator(la, ltree_risparent, (void *) query, &found))
	{
		PG_FREE_IF_COPY(la, 0);
		PG_FREE_IF_COPY(query, 1);
		PG_RETURN_NULL();
	}

	item = (ltree *) palloc(VARSIZE(found));
	memcpy(item, found, VARSIZE(found));

	PG_FREE_IF_COPY(la, 0);
	PG_FREE_IF_COPY(query, 1);
	PG_RETURN_POINTER(item);
}
开发者ID:HBPSP8Repo,项目名称:NoDB,代码行数:22,代码来源:_ltree_op.c


注:本文中的PG_GETARG_LTREE函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。