mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-23 06:22:03 +08:00
Refactor process utility
This breaks up the handling of process utility statements into a clean and efficient switch statement with separate functions for each statement.
This commit is contained in:
parent
69ac1a37d8
commit
a1a28ecf6f
@ -37,24 +37,9 @@ prev_ProcessUtility(Node *parsetree,
|
||||
}
|
||||
}
|
||||
|
||||
/* Hook-intercept for ProcessUtility. Used to set COPY completion tag and */
|
||||
/* renaming of hypertables. */
|
||||
static void
|
||||
timescaledb_ProcessUtility(Node *parsetree,
|
||||
const char *query_string,
|
||||
ProcessUtilityContext context,
|
||||
ParamListInfo params,
|
||||
DestReceiver *dest,
|
||||
char *completion_tag)
|
||||
{
|
||||
if (!extension_is_loaded())
|
||||
{
|
||||
prev_ProcessUtility(parsetree, query_string, context, params, dest, completion_tag);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Truncate a hypertable */
|
||||
if (IsA(parsetree, TruncateStmt))
|
||||
static void
|
||||
process_truncate(Node *parsetree)
|
||||
{
|
||||
TruncateStmt *truncatestmt = (TruncateStmt *) parsetree;
|
||||
ListCell *cell;
|
||||
@ -76,15 +61,12 @@ timescaledb_ProcessUtility(Node *parsetree,
|
||||
}
|
||||
cache_release(hcache);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
prev_ProcessUtility((Node *) truncatestmt, query_string, context, params, dest, completion_tag);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Change the schema of hypertable */
|
||||
if (IsA(parsetree, AlterObjectSchemaStmt))
|
||||
/* Change the schema of a hypertable */
|
||||
static void
|
||||
process_alterobjectschema(Node *parsetree)
|
||||
{
|
||||
AlterObjectSchemaStmt *alterstmt = (AlterObjectSchemaStmt *) parsetree;
|
||||
Oid relId = RangeVarGetRelid(alterstmt->relation, NoLock, true);
|
||||
@ -104,13 +86,11 @@ timescaledb_ProcessUtility(Node *parsetree,
|
||||
}
|
||||
cache_release(hcache);
|
||||
}
|
||||
|
||||
prev_ProcessUtility((Node *) alterstmt, query_string, context, params, dest, completion_tag);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Rename hypertable */
|
||||
if (IsA(parsetree, RenameStmt))
|
||||
static void
|
||||
process_rename(Node *parsetree)
|
||||
{
|
||||
RenameStmt *renamestmt = (RenameStmt *) parsetree;
|
||||
Oid relid = RangeVarGetRelid(renamestmt->relation, NoLock, true);
|
||||
@ -130,17 +110,15 @@ timescaledb_ProcessUtility(Node *parsetree,
|
||||
}
|
||||
cache_release(hcache);
|
||||
}
|
||||
prev_ProcessUtility((Node *) renamestmt, query_string, context, params, dest, completion_tag);
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsA(parsetree, CopyStmt))
|
||||
static void
|
||||
process_copy(Node *parsetree, const char *query_string, char *completion_tag)
|
||||
{
|
||||
CopyStmt *stmt = (CopyStmt *) parsetree;
|
||||
|
||||
/*
|
||||
* Needed to add the appropriate number of tuples to the completion
|
||||
* tag
|
||||
* Needed to add the appropriate number of tuples to the completion tag
|
||||
*/
|
||||
uint64 processed;
|
||||
Hypertable *ht = NULL;
|
||||
@ -173,10 +151,43 @@ timescaledb_ProcessUtility(Node *parsetree,
|
||||
|
||||
if (NULL != hcache)
|
||||
cache_release(hcache);
|
||||
}
|
||||
|
||||
|
||||
/* Hook-intercept for ProcessUtility. Used to set COPY completion tag and */
|
||||
/* renaming of hypertables. */
|
||||
static void
|
||||
timescaledb_ProcessUtility(Node *parsetree,
|
||||
const char *query_string,
|
||||
ProcessUtilityContext context,
|
||||
ParamListInfo params,
|
||||
DestReceiver *dest,
|
||||
char *completion_tag)
|
||||
{
|
||||
if (!extension_is_loaded())
|
||||
{
|
||||
prev_ProcessUtility(parsetree, query_string, context, params, dest, completion_tag);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (nodeTag(parsetree))
|
||||
{
|
||||
case T_TruncateStmt:
|
||||
process_truncate(parsetree);
|
||||
break;
|
||||
case T_AlterObjectSchemaStmt:
|
||||
process_alterobjectschema(parsetree);
|
||||
break;
|
||||
case T_RenameStmt:
|
||||
process_rename(parsetree);
|
||||
break;
|
||||
case T_CopyStmt:
|
||||
process_copy(parsetree, query_string, completion_tag);
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
prev_ProcessUtility(parsetree, query_string, context, params, dest, completion_tag);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user