mirror of https://github.com/citusdata/citus.git
56 lines
1.3 KiB
C
56 lines
1.3 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* deparse.c
|
|
* Entrypoint for deparsing parsetrees.
|
|
*
|
|
* The goal of deparsing parsetrees is to reconstruct sql statements
|
|
* from any parsed sql statement by ParseTreeNode. Deparsed statements
|
|
* can be used to reapply them on remote postgres nodes like the citus
|
|
* workers.
|
|
*
|
|
* Copyright (c) Citus Data, Inc.
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
#include "postgres.h"
|
|
|
|
#include "distributed/commands.h"
|
|
#include "distributed/deparser.h"
|
|
#include "distributed/listutils.h"
|
|
|
|
/*
|
|
* DeparseTreeNode aims to be the inverse of postgres' ParseTreeNode. Currently with
|
|
* limited support. Check support before using, and add support for new statements as
|
|
* required.
|
|
*/
|
|
char *
|
|
DeparseTreeNode(Node *stmt)
|
|
{
|
|
const DistributeObjectOps *ops = GetDistributeObjectOps(stmt);
|
|
|
|
if (!ops->deparse)
|
|
{
|
|
ereport(ERROR, (errmsg("unsupported statement for deparsing")));
|
|
}
|
|
|
|
return ops->deparse(stmt);
|
|
}
|
|
|
|
|
|
/*
|
|
* DeparseTreeNodes deparses all stmts in the list from the statement datastructure into
|
|
* sql statements.
|
|
*/
|
|
List *
|
|
DeparseTreeNodes(List *stmts)
|
|
{
|
|
List *sqls = NIL;
|
|
Node *stmt = NULL;
|
|
foreach_declared_ptr(stmt, stmts)
|
|
{
|
|
sqls = lappend(sqls, DeparseTreeNode(stmt));
|
|
}
|
|
return sqls;
|
|
}
|