* get_func_sql_syntax - Parse back a SQL-syntax function call * * Returns true if we successfully deparsed, false if we did not * recognize the function. */
| 10385 | * recognize the function. |
| 10386 | */ |
| 10387 | static bool |
| 10388 | get_func_sql_syntax(FuncExpr *expr, deparse_context *context) |
| 10389 | { |
| 10390 | StringInfo buf = context->buf; |
| 10391 | Oid funcoid = expr->funcid; |
| 10392 | |
| 10393 | switch (funcoid) |
| 10394 | { |
| 10395 | case F_TIMEZONE_INTERVAL_TIMESTAMP: |
| 10396 | case F_TIMEZONE_INTERVAL_TIMESTAMPTZ: |
| 10397 | case F_TIMEZONE_INTERVAL_TIMETZ: |
| 10398 | case F_TIMEZONE_TEXT_TIMESTAMP: |
| 10399 | case F_TIMEZONE_TEXT_TIMESTAMPTZ: |
| 10400 | case F_TIMEZONE_TEXT_TIMETZ: |
| 10401 | /* AT TIME ZONE ... note reversed argument order */ |
| 10402 | appendStringInfoChar(buf, '('); |
| 10403 | get_rule_expr((Node *) lsecond(expr->args), context, false); |
| 10404 | appendStringInfoString(buf, " AT TIME ZONE "); |
| 10405 | get_rule_expr((Node *) linitial(expr->args), context, false); |
| 10406 | appendStringInfoChar(buf, ')'); |
| 10407 | return true; |
| 10408 | |
| 10409 | case F_OVERLAPS_TIMESTAMPTZ_INTERVAL_TIMESTAMPTZ_INTERVAL: |
| 10410 | case F_OVERLAPS_TIMESTAMPTZ_INTERVAL_TIMESTAMPTZ_TIMESTAMPTZ: |
| 10411 | case F_OVERLAPS_TIMESTAMPTZ_TIMESTAMPTZ_TIMESTAMPTZ_INTERVAL: |
| 10412 | case F_OVERLAPS_TIMESTAMPTZ_TIMESTAMPTZ_TIMESTAMPTZ_TIMESTAMPTZ: |
| 10413 | case F_OVERLAPS_TIMESTAMP_INTERVAL_TIMESTAMP_INTERVAL: |
| 10414 | case F_OVERLAPS_TIMESTAMP_INTERVAL_TIMESTAMP_TIMESTAMP: |
| 10415 | case F_OVERLAPS_TIMESTAMP_TIMESTAMP_TIMESTAMP_INTERVAL: |
| 10416 | case F_OVERLAPS_TIMESTAMP_TIMESTAMP_TIMESTAMP_TIMESTAMP: |
| 10417 | case F_OVERLAPS_TIMETZ_TIMETZ_TIMETZ_TIMETZ: |
| 10418 | case F_OVERLAPS_TIME_INTERVAL_TIME_INTERVAL: |
| 10419 | case F_OVERLAPS_TIME_INTERVAL_TIME_TIME: |
| 10420 | case F_OVERLAPS_TIME_TIME_TIME_INTERVAL: |
| 10421 | case F_OVERLAPS_TIME_TIME_TIME_TIME: |
| 10422 | /* (x1, x2) OVERLAPS (y1, y2) */ |
| 10423 | appendStringInfoString(buf, "(("); |
| 10424 | get_rule_expr((Node *) linitial(expr->args), context, false); |
| 10425 | appendStringInfoString(buf, ", "); |
| 10426 | get_rule_expr((Node *) lsecond(expr->args), context, false); |
| 10427 | appendStringInfoString(buf, ") OVERLAPS ("); |
| 10428 | get_rule_expr((Node *) lthird(expr->args), context, false); |
| 10429 | appendStringInfoString(buf, ", "); |
| 10430 | get_rule_expr((Node *) lfourth(expr->args), context, false); |
| 10431 | appendStringInfoString(buf, "))"); |
| 10432 | return true; |
| 10433 | |
| 10434 | case F_EXTRACT_TEXT_DATE: |
| 10435 | case F_EXTRACT_TEXT_TIME: |
| 10436 | case F_EXTRACT_TEXT_TIMETZ: |
| 10437 | case F_EXTRACT_TEXT_TIMESTAMP: |
| 10438 | case F_EXTRACT_TEXT_TIMESTAMPTZ: |
| 10439 | case F_EXTRACT_TEXT_INTERVAL: |
| 10440 | /* EXTRACT (x FROM y) */ |
| 10441 | appendStringInfoString(buf, "EXTRACT("); |
| 10442 | { |
| 10443 | Const *con = (Const *) linitial(expr->args); |
| 10444 |
no test coverage detected