* Check for features that are not supported with FOR [KEY] UPDATE/SHARE. * * exported so planner can check again after rewriting, query pullup, etc */
| 3632 | * exported so planner can check again after rewriting, query pullup, etc |
| 3633 | */ |
| 3634 | void |
| 3635 | CheckSelectLocking(Query *qry, LockClauseStrength strength) |
| 3636 | { |
| 3637 | Assert(strength != LCS_NONE); /* else caller error */ |
| 3638 | |
| 3639 | if (qry->setOperations) |
| 3640 | ereport(ERROR, |
| 3641 | (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
| 3642 | /*------ |
| 3643 | translator: %s is a SQL row locking clause such as FOR UPDATE */ |
| 3644 | errmsg("%s is not allowed with UNION/INTERSECT/EXCEPT", |
| 3645 | LCS_asString(strength)))); |
| 3646 | if (qry->distinctClause != NIL) |
| 3647 | ereport(ERROR, |
| 3648 | (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
| 3649 | /*------ |
| 3650 | translator: %s is a SQL row locking clause such as FOR UPDATE */ |
| 3651 | errmsg("%s is not allowed with DISTINCT clause", |
| 3652 | LCS_asString(strength)))); |
| 3653 | if (qry->groupClause != NIL || qry->groupingSets != NIL) |
| 3654 | ereport(ERROR, |
| 3655 | (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
| 3656 | /*------ |
| 3657 | translator: %s is a SQL row locking clause such as FOR UPDATE */ |
| 3658 | errmsg("%s is not allowed with GROUP BY clause", |
| 3659 | LCS_asString(strength)))); |
| 3660 | if (qry->havingQual != NULL) |
| 3661 | ereport(ERROR, |
| 3662 | (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
| 3663 | /*------ |
| 3664 | translator: %s is a SQL row locking clause such as FOR UPDATE */ |
| 3665 | errmsg("%s is not allowed with HAVING clause", |
| 3666 | LCS_asString(strength)))); |
| 3667 | if (qry->hasAggs) |
| 3668 | ereport(ERROR, |
| 3669 | (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
| 3670 | /*------ |
| 3671 | translator: %s is a SQL row locking clause such as FOR UPDATE */ |
| 3672 | errmsg("%s is not allowed with aggregate functions", |
| 3673 | LCS_asString(strength)))); |
| 3674 | if (qry->hasWindowFuncs) |
| 3675 | ereport(ERROR, |
| 3676 | (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
| 3677 | /*------ |
| 3678 | translator: %s is a SQL row locking clause such as FOR UPDATE */ |
| 3679 | errmsg("%s is not allowed with window functions", |
| 3680 | LCS_asString(strength)))); |
| 3681 | if (qry->hasTargetSRFs) |
| 3682 | ereport(ERROR, |
| 3683 | (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
| 3684 | /*------ |
| 3685 | translator: %s is a SQL row locking clause such as FOR UPDATE */ |
| 3686 | errmsg("%s is not allowed with set-returning functions in the target list", |
| 3687 | LCS_asString(strength)))); |
| 3688 | } |
| 3689 | |
| 3690 | /* |
| 3691 | * Transform a FOR [KEY] UPDATE/SHARE clause |
no test coverage detected