Commit 1471e384 authored by Peter Eisentraut's avatar Peter Eisentraut

Allow SQL:2008 syntax ALTER TABLE ... ALTER COLUMN ... SET DATA TYPE

alongside our traditional syntax.
parent 089ae3bc
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/alter_table.sgml,v 1.99 2008/05/09 23:32:03 tgl Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/alter_table.sgml,v 1.100 2008/10/21 08:38:15 petere Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
...@@ -33,7 +33,7 @@ where <replaceable class="PARAMETER">action</replaceable> is one of: ...@@ -33,7 +33,7 @@ where <replaceable class="PARAMETER">action</replaceable> is one of:
ADD [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> <replaceable class="PARAMETER">type</replaceable> [ <replaceable class="PARAMETER">column_constraint</replaceable> [ ... ] ] ADD [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> <replaceable class="PARAMETER">type</replaceable> [ <replaceable class="PARAMETER">column_constraint</replaceable> [ ... ] ]
DROP [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> [ RESTRICT | CASCADE ] DROP [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> [ RESTRICT | CASCADE ]
ALTER [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> TYPE <replaceable class="PARAMETER">type</replaceable> [ USING <replaceable class="PARAMETER">expression</replaceable> ] ALTER [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> [ SET DATA ] TYPE <replaceable class="PARAMETER">type</replaceable> [ USING <replaceable class="PARAMETER">expression</replaceable> ]
ALTER [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> SET DEFAULT <replaceable class="PARAMETER">expression</replaceable> ALTER [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> SET DEFAULT <replaceable class="PARAMETER">expression</replaceable>
ALTER [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> DROP DEFAULT ALTER [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> DROP DEFAULT
ALTER [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> { SET | DROP } NOT NULL ALTER [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> { SET | DROP } NOT NULL
...@@ -93,7 +93,7 @@ where <replaceable class="PARAMETER">action</replaceable> is one of: ...@@ -93,7 +93,7 @@ where <replaceable class="PARAMETER">action</replaceable> is one of:
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term><literal>ALTER COLUMN TYPE</literal></term> <term><literal>SET DATA TYPE</literal></term>
<listitem> <listitem>
<para> <para>
This form changes the type of a column of a table. Indexes and This form changes the type of a column of a table. Indexes and
...@@ -760,7 +760,7 @@ ALTER TABLE distributors ...@@ -760,7 +760,7 @@ ALTER TABLE distributors
with time zone</type> via a <literal>USING</literal> clause: with time zone</type> via a <literal>USING</literal> clause:
<programlisting> <programlisting>
ALTER TABLE foo ALTER TABLE foo
ALTER COLUMN foo_timestamp TYPE timestamp with time zone ALTER COLUMN foo_timestamp SET DATA TYPE timestamp with time zone
USING USING
timestamp with time zone 'epoch' + foo_timestamp * interval '1 second'; timestamp with time zone 'epoch' + foo_timestamp * interval '1 second';
</programlisting> </programlisting>
...@@ -868,8 +868,9 @@ ALTER TABLE myschema.distributors SET SCHEMA yourschema; ...@@ -868,8 +868,9 @@ ALTER TABLE myschema.distributors SET SCHEMA yourschema;
<title>Compatibility</title> <title>Compatibility</title>
<para> <para>
The <literal>ADD</literal>, <literal>DROP</>, and <literal>SET DEFAULT</> The forms <literal>ADD</literal>, <literal>DROP</>, <literal>SET DEFAULT</>,
forms conform with the SQL standard. The other forms are and <literal>SET DATA TYPE</literal> (without <literal>USING</literal>)
conform with the SQL standard. The other forms are
<productname>PostgreSQL</productname> extensions of the SQL standard. <productname>PostgreSQL</productname> extensions of the SQL standard.
Also, the ability to specify more than one manipulation in a single Also, the ability to specify more than one manipulation in a single
<command>ALTER TABLE</> command is an extension. <command>ALTER TABLE</> command is an extension.
......
...@@ -236,7 +236,7 @@ F381 Extended schema manipulation YES ...@@ -236,7 +236,7 @@ F381 Extended schema manipulation YES
F381 Extended schema manipulation 01 ALTER TABLE statement: ALTER COLUMN clause YES F381 Extended schema manipulation 01 ALTER TABLE statement: ALTER COLUMN clause YES
F381 Extended schema manipulation 02 ALTER TABLE statement: ADD CONSTRAINT clause YES F381 Extended schema manipulation 02 ALTER TABLE statement: ADD CONSTRAINT clause YES
F381 Extended schema manipulation 03 ALTER TABLE statement: DROP CONSTRAINT clause YES F381 Extended schema manipulation 03 ALTER TABLE statement: DROP CONSTRAINT clause YES
F382 Alter column data type NO PostgreSQL syntax differs F382 Alter column data type YES
F391 Long identifiers YES F391 Long identifiers YES
F392 Unicode escapes in identifiers NO F392 Unicode escapes in identifiers NO
F393 Unicode escapes in literals NO F393 Unicode escapes in literals NO
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.626 2008/10/20 14:26:28 petere Exp $ * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.627 2008/10/21 08:38:15 petere Exp $
* *
* HISTORY * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
...@@ -304,7 +304,7 @@ static TypeName *TableFuncTypeName(List *columns); ...@@ -304,7 +304,7 @@ static TypeName *TableFuncTypeName(List *columns);
%type <boolean> copy_from %type <boolean> copy_from
%type <ival> opt_column event cursor_options opt_hold %type <ival> opt_column event cursor_options opt_hold opt_set_data
%type <objtype> reindex_type drop_type comment_type %type <objtype> reindex_type drop_type comment_type
%type <node> fetch_direction select_limit_value select_offset_value %type <node> fetch_direction select_limit_value select_offset_value
...@@ -407,7 +407,7 @@ static TypeName *TableFuncTypeName(List *columns); ...@@ -407,7 +407,7 @@ static TypeName *TableFuncTypeName(List *columns);
CREATEROLE CREATEUSER CROSS CSV CTYPE CURRENT_P CURRENT_DATE CURRENT_ROLE CREATEROLE CREATEUSER CROSS CSV CTYPE CURRENT_P CURRENT_DATE CURRENT_ROLE
CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE
DATABASE DAY_P DEALLOCATE DEC DECIMAL_P DECLARE DEFAULT DEFAULTS DATA_P DATABASE DAY_P DEALLOCATE DEC DECIMAL_P DECLARE DEFAULT DEFAULTS
DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS DESC DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS DESC
DICTIONARY DISABLE_P DISCARD DISTINCT DO DOCUMENT_P DOMAIN_P DOUBLE_P DROP DICTIONARY DISABLE_P DISCARD DISTINCT DO DOCUMENT_P DOMAIN_P DOUBLE_P DROP
...@@ -1534,16 +1534,16 @@ alter_table_cmd: ...@@ -1534,16 +1534,16 @@ alter_table_cmd:
$$ = (Node *)n; $$ = (Node *)n;
} }
/* /*
* ALTER TABLE <name> ALTER [COLUMN] <colname> TYPE <typename> * ALTER TABLE <name> ALTER [COLUMN] <colname> [SET DATA] TYPE <typename>
* [ USING <expression> ] * [ USING <expression> ]
*/ */
| ALTER opt_column ColId TYPE_P Typename alter_using | ALTER opt_column ColId opt_set_data TYPE_P Typename alter_using
{ {
AlterTableCmd *n = makeNode(AlterTableCmd); AlterTableCmd *n = makeNode(AlterTableCmd);
n->subtype = AT_AlterColumnType; n->subtype = AT_AlterColumnType;
n->name = $3; n->name = $3;
n->def = (Node *) $5; n->def = (Node *) $6;
n->transform = $6; n->transform = $7;
$$ = (Node *)n; $$ = (Node *)n;
} }
/* ALTER TABLE <name> ADD CONSTRAINT ... */ /* ALTER TABLE <name> ADD CONSTRAINT ... */
...@@ -4854,6 +4854,10 @@ opt_column: COLUMN { $$ = COLUMN; } ...@@ -4854,6 +4854,10 @@ opt_column: COLUMN { $$ = COLUMN; }
| /*EMPTY*/ { $$ = 0; } | /*EMPTY*/ { $$ = 0; }
; ;
opt_set_data: SET DATA_P { $$ = 1; }
| /*EMPTY*/ { $$ = 0; }
;
/***************************************************************************** /*****************************************************************************
* *
* ALTER THING name SET SCHEMA name * ALTER THING name SET SCHEMA name
...@@ -9317,6 +9321,7 @@ unreserved_keyword: ...@@ -9317,6 +9321,7 @@ unreserved_keyword:
| CURRENT_P | CURRENT_P
| CURSOR | CURSOR
| CYCLE | CYCLE
| DATA_P
| DATABASE | DATABASE
| DAY_P | DAY_P
| DEALLOCATE | DEALLOCATE
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/parser/keywords.c,v 1.202 2008/10/04 21:56:54 tgl Exp $ * $PostgreSQL: pgsql/src/backend/parser/keywords.c,v 1.203 2008/10/21 08:38:15 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -123,6 +123,7 @@ const ScanKeyword ScanKeywords[] = { ...@@ -123,6 +123,7 @@ const ScanKeyword ScanKeywords[] = {
{"current_user", CURRENT_USER, RESERVED_KEYWORD}, {"current_user", CURRENT_USER, RESERVED_KEYWORD},
{"cursor", CURSOR, UNRESERVED_KEYWORD}, {"cursor", CURSOR, UNRESERVED_KEYWORD},
{"cycle", CYCLE, UNRESERVED_KEYWORD}, {"cycle", CYCLE, UNRESERVED_KEYWORD},
{"data", DATA_P, UNRESERVED_KEYWORD},
{"database", DATABASE, UNRESERVED_KEYWORD}, {"database", DATABASE, UNRESERVED_KEYWORD},
{"day", DAY_P, UNRESERVED_KEYWORD}, {"day", DAY_P, UNRESERVED_KEYWORD},
{"deallocate", DEALLOCATE, UNRESERVED_KEYWORD}, {"deallocate", DEALLOCATE, UNRESERVED_KEYWORD},
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* lexical token lookup for reserved words in postgres embedded SQL * lexical token lookup for reserved words in postgres embedded SQL
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg_keywords.c,v 1.38 2008/05/20 23:17:32 meskes Exp $ * $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg_keywords.c,v 1.39 2008/10/21 08:38:16 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -34,7 +34,6 @@ static const ScanKeyword ScanECPGKeywords[] = { ...@@ -34,7 +34,6 @@ static const ScanKeyword ScanECPGKeywords[] = {
{"cardinality", SQL_CARDINALITY, 0}, {"cardinality", SQL_CARDINALITY, 0},
{"connect", SQL_CONNECT, 0}, {"connect", SQL_CONNECT, 0},
{"count", SQL_COUNT, 0}, {"count", SQL_COUNT, 0},
{"data", SQL_DATA, 0},
{"datetime_interval_code", SQL_DATETIME_INTERVAL_CODE, 0}, {"datetime_interval_code", SQL_DATETIME_INTERVAL_CODE, 0},
{"datetime_interval_precision", SQL_DATETIME_INTERVAL_PRECISION, 0}, {"datetime_interval_precision", SQL_DATETIME_INTERVAL_PRECISION, 0},
{"describe", SQL_DESCRIBE, 0}, {"describe", SQL_DESCRIBE, 0},
......
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.376 2008/10/14 09:31:04 meskes Exp $ */ /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.377 2008/10/21 08:38:16 petere Exp $ */
/* Copyright comment */ /* Copyright comment */
%{ %{
...@@ -392,7 +392,7 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu ...@@ -392,7 +392,7 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu
/* special embedded SQL token */ /* special embedded SQL token */
%token SQL_ALLOCATE SQL_AUTOCOMMIT SQL_BOOL SQL_BREAK %token SQL_ALLOCATE SQL_AUTOCOMMIT SQL_BOOL SQL_BREAK
SQL_CALL SQL_CARDINALITY SQL_CONNECT SQL_CALL SQL_CARDINALITY SQL_CONNECT
SQL_COUNT SQL_DATA SQL_COUNT
SQL_DATETIME_INTERVAL_CODE SQL_DATETIME_INTERVAL_CODE
SQL_DATETIME_INTERVAL_PRECISION SQL_DESCRIBE SQL_DATETIME_INTERVAL_PRECISION SQL_DESCRIBE
SQL_DESCRIPTOR SQL_DISCONNECT SQL_FOUND SQL_DESCRIPTOR SQL_DISCONNECT SQL_FOUND
...@@ -431,7 +431,7 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu ...@@ -431,7 +431,7 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu
CREATEROLE CREATEUSER CROSS CSV CTYPE CURRENT_P CURRENT_DATE CURRENT_ROLE CREATEROLE CREATEUSER CROSS CSV CTYPE CURRENT_P CURRENT_DATE CURRENT_ROLE
CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE
DATABASE DAY_P DEALLOCATE DEC DECIMAL_P DECLARE DEFAULT DEFAULTS DATA_P DATABASE DAY_P DEALLOCATE DEC DECIMAL_P DECLARE DEFAULT DEFAULTS
DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS DESC DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS DESC
DICTIONARY DISABLE_P DISCARD DISTINCT DO DOCUMENT_P DOMAIN_P DOUBLE_P DROP DICTIONARY DISABLE_P DISCARD DISTINCT DO DOCUMENT_P DOMAIN_P DOUBLE_P DROP
...@@ -584,7 +584,7 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu ...@@ -584,7 +584,7 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu
%type <str> def_elem def_list definition DefineStmt select_with_parens %type <str> def_elem def_list definition DefineStmt select_with_parens
%type <str> opt_instead event RuleActionList opt_using CreateAssertStmt %type <str> opt_instead event RuleActionList opt_using CreateAssertStmt
%type <str> RuleActionStmtOrEmpty RuleActionMulti func_as reindex_type %type <str> RuleActionStmtOrEmpty RuleActionMulti func_as reindex_type
%type <str> RuleStmt opt_column oper_argtypes NumConst var_name %type <str> RuleStmt opt_column opt_set_data oper_argtypes NumConst var_name
%type <str> MathOp RemoveFuncStmt ECPGunreserved_con opt_database_name %type <str> MathOp RemoveFuncStmt ECPGunreserved_con opt_database_name
%type <str> RemoveAggrStmt opt_procedural select_no_parens CreateCastStmt %type <str> RemoveAggrStmt opt_procedural select_no_parens CreateCastStmt
%type <str> RemoveOperStmt RenameStmt all_Op opt_trusted opt_lancompiler %type <str> RemoveOperStmt RenameStmt all_Op opt_trusted opt_lancompiler
...@@ -1398,9 +1398,9 @@ alter_table_cmd: ...@@ -1398,9 +1398,9 @@ alter_table_cmd:
/* ALTER TABLE <name> DROP [COLUMN] <colname> {RESTRICT|CASCADE} */ /* ALTER TABLE <name> DROP [COLUMN] <colname> {RESTRICT|CASCADE} */
| DROP opt_column ColId opt_drop_behavior | DROP opt_column ColId opt_drop_behavior
{ $$ = cat_str(4, make_str("drop"), $2, $3, $4); } { $$ = cat_str(4, make_str("drop"), $2, $3, $4); }
/* ALTER TABLE <name> ALTER [COLUMN] <colname> TYPE <typename> [ USING <expression> ] */ /* ALTER TABLE <name> ALTER [COLUMN] <colname> [SET DATA] TYPE <typename> [ USING <expression> ] */
| ALTER opt_column ColId TYPE_P Typename alter_using | ALTER opt_column ColId opt_set_data TYPE_P Typename alter_using
{ $$ = cat_str(6, make_str("alter"), $2, $3, make_str("type"), $5, $6); } { $$ = cat_str(7, make_str("alter"), $2, $3, $4, make_str("type"), $6, $7); }
/* ALTER TABLE <name> ADD CONSTRAINT ... */ /* ALTER TABLE <name> ADD CONSTRAINT ... */
| ADD_P TableConstraint | ADD_P TableConstraint
{ $$ = cat_str(2, make_str("add"), $2); } { $$ = cat_str(2, make_str("add"), $2); }
...@@ -2891,6 +2891,10 @@ opt_column: COLUMN { $$ = make_str("column"); } ...@@ -2891,6 +2891,10 @@ opt_column: COLUMN { $$ = make_str("column"); }
| /*EMPTY*/ { $$ = EMPTY; } | /*EMPTY*/ { $$ = EMPTY; }
; ;
opt_set_data: SET DATA_P { $$ = make_str("set data"); }
| /*EMPTY*/ { $$ = EMPTY; }
;
/***************************************************************************** /*****************************************************************************
* *
* ALTER THING name SET SCHEMA name * ALTER THING name SET SCHEMA name
...@@ -6140,7 +6144,7 @@ ECPGSetDescItem: descriptor_item '=' AllConstVar ...@@ -6140,7 +6144,7 @@ ECPGSetDescItem: descriptor_item '=' AllConstVar
descriptor_item: SQL_CARDINALITY { $$ = ECPGd_cardinality; } descriptor_item: SQL_CARDINALITY { $$ = ECPGd_cardinality; }
| SQL_DATA { $$ = ECPGd_data; } | DATA_P { $$ = ECPGd_data; }
| SQL_DATETIME_INTERVAL_CODE { $$ = ECPGd_di_code; } | SQL_DATETIME_INTERVAL_CODE { $$ = ECPGd_di_code; }
| SQL_DATETIME_INTERVAL_PRECISION { $$ = ECPGd_di_precision; } | SQL_DATETIME_INTERVAL_PRECISION { $$ = ECPGd_di_precision; }
| SQL_INDICATOR { $$ = ECPGd_indicator; } | SQL_INDICATOR { $$ = ECPGd_indicator; }
...@@ -6360,7 +6364,6 @@ ECPGKeywords_vanames: SQL_BREAK { $$ = make_str("break"); } ...@@ -6360,7 +6364,6 @@ ECPGKeywords_vanames: SQL_BREAK { $$ = make_str("break"); }
| SQL_CALL { $$ = make_str("call"); } | SQL_CALL { $$ = make_str("call"); }
| SQL_CARDINALITY { $$ = make_str("cardinality"); } | SQL_CARDINALITY { $$ = make_str("cardinality"); }
| SQL_COUNT { $$ = make_str("count"); } | SQL_COUNT { $$ = make_str("count"); }
| SQL_DATA { $$ = make_str("data"); }
| SQL_DATETIME_INTERVAL_CODE { $$ = make_str("datetime_interval_code"); } | SQL_DATETIME_INTERVAL_CODE { $$ = make_str("datetime_interval_code"); }
| SQL_DATETIME_INTERVAL_PRECISION { $$ = make_str("datetime_interval_precision"); } | SQL_DATETIME_INTERVAL_PRECISION { $$ = make_str("datetime_interval_precision"); }
| SQL_FOUND { $$ = make_str("found"); } | SQL_FOUND { $$ = make_str("found"); }
...@@ -6557,6 +6560,7 @@ ECPGunreserved_con: ABORT_P { $$ = make_str("abort"); } ...@@ -6557,6 +6560,7 @@ ECPGunreserved_con: ABORT_P { $$ = make_str("abort"); }
| CTYPE { $$ = make_str("ctype"); } | CTYPE { $$ = make_str("ctype"); }
| CURSOR { $$ = make_str("cursor"); } | CURSOR { $$ = make_str("cursor"); }
| CYCLE { $$ = make_str("cycle"); } | CYCLE { $$ = make_str("cycle"); }
| DATA_P { $$ = make_str("data"); }
| DATABASE { $$ = make_str("database"); } | DATABASE { $$ = make_str("database"); }
/* | DAY_P { $$ = make_str("day"); }*/ /* | DAY_P { $$ = make_str("day"); }*/
| DEALLOCATE { $$ = make_str("deallocate"); } | DEALLOCATE { $$ = make_str("deallocate"); }
......
...@@ -101,7 +101,7 @@ if (sqlca.sqlcode < 0) sqlprint();} ...@@ -101,7 +101,7 @@ if (sqlca.sqlcode < 0) sqlprint();}
for (i=0; i<3; i++) for (i=0; i<3; i++)
printf("item[%d] = %d\n", i, ind[i] ? -1 : item[i]); printf("item[%d] = %d\n", i, ind[i] ? -1 : item[i]);
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table T ", ECPGt_EOIT, ECPGt_EORT); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "alter table T alter Item1 type bigint ", ECPGt_EOIT, ECPGt_EORT);
#line 31 "parser.pgc" #line 31 "parser.pgc"
if (sqlca.sqlwarn[0] == 'W') sqlprint(); if (sqlca.sqlwarn[0] == 'W') sqlprint();
...@@ -110,15 +110,34 @@ if (sqlca.sqlwarn[0] == 'W') sqlprint(); ...@@ -110,15 +110,34 @@ if (sqlca.sqlwarn[0] == 'W') sqlprint();
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 31 "parser.pgc" #line 31 "parser.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "alter table T alter column Item2 set data type smallint ", ECPGt_EOIT, ECPGt_EORT);
#line 32 "parser.pgc"
if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 32 "parser.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 32 "parser.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table T ", ECPGt_EOIT, ECPGt_EORT);
#line 34 "parser.pgc"
if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 34 "parser.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 34 "parser.pgc"
{ ECPGdisconnect(__LINE__, "ALL"); { ECPGdisconnect(__LINE__, "ALL");
#line 33 "parser.pgc" #line 36 "parser.pgc"
if (sqlca.sqlwarn[0] == 'W') sqlprint(); if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 33 "parser.pgc" #line 36 "parser.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 33 "parser.pgc" #line 36 "parser.pgc"
return 0; return 0;
......
...@@ -40,11 +40,23 @@ ...@@ -40,11 +40,23 @@
[NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_get_data on line 26: RESULT: offset: -1; array: yes [NO_PID]: ecpg_get_data on line 26: RESULT: offset: -1; array: yes
[NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_execute on line 31: query: drop table T ; with 0 parameter(s) on connection regress1 [NO_PID]: ecpg_execute on line 31: query: alter table T alter Item1 type bigint ; with 0 parameter(s) on connection regress1
[NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_execute on line 31: using PQexec [NO_PID]: ecpg_execute on line 31: using PQexec
[NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_execute on line 31: OK: DROP TABLE [NO_PID]: ecpg_execute on line 31: OK: ALTER TABLE
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_execute on line 32: query: alter table T alter column Item2 set data type smallint ; with 0 parameter(s) on connection regress1
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_execute on line 32: using PQexec
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_execute on line 32: OK: ALTER TABLE
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_execute on line 34: query: drop table T ; with 0 parameter(s) on connection regress1
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_execute on line 34: using PQexec
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_execute on line 34: OK: DROP TABLE
[NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_finish: connection regress1 closed [NO_PID]: ecpg_finish: connection regress1 closed
[NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: sqlca: code: 0, state: 00000
...@@ -28,6 +28,9 @@ int main(int argc, char* argv[]) { ...@@ -28,6 +28,9 @@ int main(int argc, char* argv[]) {
for (i=0; i<3; i++) for (i=0; i<3; i++)
printf("item[%d] = %d\n", i, ind[i] ? -1 : item[i]); printf("item[%d] = %d\n", i, ind[i] ? -1 : item[i]);
EXEC SQL ALTER TABLE T ALTER Item1 TYPE bigint;
EXEC SQL ALTER TABLE T ALTER COLUMN Item2 SET DATA TYPE smallint;
EXEC SQL DROP TABLE T; EXEC SQL DROP TABLE T;
EXEC SQL DISCONNECT ALL; EXEC SQL DISCONNECT ALL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment