Как получить аргументы функции в Postgresql

Я меняю pg-pool для обслуживания шифровальных запросов для Apache AGE, и у меня есть следующий код, который принимает оператор select. Отсюда он получает предложение FROM, а затем из предложения FROM получает имена функций. Итак, теперь мне нужны аргументы этой функции. Как бы я это сделал. Код выглядит следующим образом:

      if (IsA(node, SelectStmt))
{
    SelectStmt *stmt = (SelectStmt *) node;
    List* fromClause = stmt->fromClause;

    ListCell   *fl;

    //Match the first cypher function call in the FROM clause. Could be multiple tables
    // e.g. FROM table1, table2, cypher(),table3....
    foreach(fl, fromClause)
    {
        Node       *n = lfirst(fl);
        if (IsA(n, RangeFunction))
        {
            RangeFunction *rf = (RangeFunction*) n;
            List* functions = rf->functions; 

            if (functions->length == 1)
            {
                List *sublist = (List *) lfirst(list_head(functions)); 
                FuncCall *fntree = (FuncCall *) lfirst(list_head(sublist));
                StringInfoData str;
                initStringInfo(&str);
                _outNode(&str,fntree->funcname);
                
                if (!strcmp("\"cypher\"",str.data)){
                    return true;
                }
            }
        }
    }
}

2 ответа

Аргументы хранятся вFuncCall. Поскольку у вас уже есть это, вы можете получить их с помощью

      fntree->args

Обратите внимание, что ваш код охватывает только вызовы функций в верхней частиFROMсписок. Что делать, если есть подзапросы?

FuncCallесть полеargsтипаList*в котором хранятся все аргументы функции.

Другие вопросы по тегам