* Registers a new domain.
*/
ObjectAddress
-DefineDomain(CreateDomainStmt *stmt)
+DefineDomain(ParseState *pstate, CreateDomainStmt *stmt)
{
char *domainName;
char *domainArrayName;
/*
* Look up the base type.
*/
- typeTup = typenameType(NULL, stmt->typeName, &basetypeMod);
+ typeTup = typenameType(pstate, stmt->typeName, &basetypeMod);
baseType = (Form_pg_type) GETSTRUCT(typeTup);
basetypeoid = baseType->oid;
ereport(ERROR,
(errcode(ERRCODE_DATATYPE_MISMATCH),
errmsg("\"%s\" is not a valid base type for a domain",
- TypeNameToString(stmt->typeName))));
+ TypeNameToString(stmt->typeName)),
+ parser_errposition(pstate, stmt->typeName->location)));
aclresult = object_aclcheck(TypeRelationId, basetypeoid, GetUserId(), ACL_USAGE);
if (aclresult != ACLCHECK_OK)
ereport(ERROR,
(errcode(ERRCODE_DATATYPE_MISMATCH),
errmsg("collations are not supported by type %s",
- format_type_be(basetypeoid))));
+ format_type_be(basetypeoid)),
+ parser_errposition(pstate, stmt->typeName->location)));
/* passed by value */
byValue = baseType->typbyval;
*/
if (saw_default)
ereport(ERROR,
- (errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("multiple default expressions")));
+ errcode(ERRCODE_SYNTAX_ERROR),
+ errmsg("multiple default expressions"),
+ parser_errposition(pstate, constr->location));
saw_default = true;
if (constr->raw_expr)
{
- ParseState *pstate;
Node *defaultExpr;
- /* Create a dummy ParseState for transformExpr */
- pstate = make_parsestate(NULL);
-
/*
* Cook the constr->raw_expr into an expression. Note:
* name is strictly for error message
case CONSTR_NOTNULL:
if (nullDefined && !typNotNull)
ereport(ERROR,
- (errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("conflicting NULL/NOT NULL constraints")));
+ errcode(ERRCODE_SYNTAX_ERROR),
+ errmsg("conflicting NULL/NOT NULL constraints"),
+ parser_errposition(pstate, constr->location));
if (constr->is_no_inherit)
ereport(ERROR,
errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
- errmsg("not-null constraints for domains cannot be marked NO INHERIT"));
+ errmsg("not-null constraints for domains cannot be marked NO INHERIT"),
+ parser_errposition(pstate, constr->location));
typNotNull = true;
nullDefined = true;
break;
case CONSTR_NULL:
if (nullDefined && typNotNull)
ereport(ERROR,
- (errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("conflicting NULL/NOT NULL constraints")));
+ errcode(ERRCODE_SYNTAX_ERROR),
+ errmsg("conflicting NULL/NOT NULL constraints"),
+ parser_errposition(pstate, constr->location));
typNotNull = false;
nullDefined = true;
break;
*/
if (constr->is_no_inherit)
ereport(ERROR,
- (errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
- errmsg("check constraints for domains cannot be marked NO INHERIT")));
+ errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
+ errmsg("check constraints for domains cannot be marked NO INHERIT"),
+ parser_errposition(pstate, constr->location));
+
break;
/*
*/
case CONSTR_UNIQUE:
ereport(ERROR,
- (errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("unique constraints not possible for domains")));
+ errcode(ERRCODE_SYNTAX_ERROR),
+ errmsg("unique constraints not possible for domains"),
+ parser_errposition(pstate, constr->location));
break;
case CONSTR_PRIMARY:
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("primary key constraints not possible for domains")));
+ errmsg("primary key constraints not possible for domains"),
+ parser_errposition(pstate, constr->location)));
break;
case CONSTR_EXCLUSION:
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("exclusion constraints not possible for domains")));
+ errmsg("exclusion constraints not possible for domains"),
+ parser_errposition(pstate, constr->location)));
break;
case CONSTR_FOREIGN:
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("foreign key constraints not possible for domains")));
+ errmsg("foreign key constraints not possible for domains"),
+ parser_errposition(pstate, constr->location)));
break;
case CONSTR_ATTR_DEFERRABLE:
case CONSTR_ATTR_IMMEDIATE:
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("specifying constraint deferrability not supported for domains")));
+ errmsg("specifying constraint deferrability not supported for domains"),
+ parser_errposition(pstate, constr->location)));
break;
case CONSTR_GENERATED:
case CONSTR_IDENTITY:
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("specifying GENERATED not supported for domains")));
+ errmsg("specifying GENERATED not supported for domains"),
+ parser_errposition(pstate, constr->location)));
break;
/* no default, to let compiler warn about missing case */
-- some error cases
create domain d_fail as no_such_type;
ERROR: type "no_such_type" does not exist
+LINE 1: create domain d_fail as no_such_type;
+ ^
create domain d_fail as int constraint cc REFERENCES this_table_not_exists(i);
ERROR: foreign key constraints not possible for domains
+LINE 1: create domain d_fail as int constraint cc REFERENCES this_ta...
+ ^
create domain d_fail as int4 not null no inherit;
ERROR: not-null constraints for domains cannot be marked NO INHERIT
+LINE 1: create domain d_fail as int4 not null no inherit;
+ ^
create domain d_fail as int4 not null null;
ERROR: conflicting NULL/NOT NULL constraints
+LINE 1: create domain d_fail as int4 not null null;
+ ^
create domain d_fail as int4 not null default 3 default 3;
ERROR: multiple default expressions
+LINE 1: create domain d_fail as int4 not null default 3 default 3;
+ ^
create domain d_fail int4 DEFAULT 3 + 'h';
ERROR: invalid input syntax for type integer: "h"
+LINE 1: create domain d_fail int4 DEFAULT 3 + 'h';
+ ^
create domain d_fail int4 collate "C";
ERROR: collations are not supported by type integer
+LINE 1: create domain d_fail int4 collate "C";
+ ^
create domain d_fail as anyelement;
ERROR: "anyelement" is not a valid base type for a domain
+LINE 1: create domain d_fail as anyelement;
+ ^
create domain d_fail as int4 unique;
ERROR: unique constraints not possible for domains
+LINE 1: create domain d_fail as int4 unique;
+ ^
create domain d_fail as int4 PRIMARY key;
ERROR: primary key constraints not possible for domains
+LINE 1: create domain d_fail as int4 PRIMARY key;
+ ^
create domain d_fail as int4 constraint cc generated by default as identity;
ERROR: specifying GENERATED not supported for domains
+LINE 1: create domain d_fail as int4 constraint cc generated by defa...
+ ^
create domain d_fail as int4 constraint cc check (values > 1) no inherit;
ERROR: check constraints for domains cannot be marked NO INHERIT
+LINE 1: create domain d_fail as int4 constraint cc check (values > 1...
+ ^
create domain d_fail as int4 constraint cc check (values > 1) deferrable;
ERROR: specifying constraint deferrability not supported for domains
+LINE 1: ...n d_fail as int4 constraint cc check (values > 1) deferrable...
+ ^
-- Test domain input.
-- Note: the point of checking both INSERT and COPY FROM is that INSERT
-- exercises CoerceToDomain while COPY exercises domain_in.