Added just another compatibility level for Informix.
This commit is contained in:
parent
b143210639
commit
4505653e54
@ -1514,6 +1514,16 @@ Fri Jun 20 15:34:29 CEST 2003
|
|||||||
Sun Jun 22 11:20:29 CEST 2003
|
Sun Jun 22 11:20:29 CEST 2003
|
||||||
|
|
||||||
- Fixed missing '\0' in output char pointer.
|
- Fixed missing '\0' in output char pointer.
|
||||||
|
|
||||||
|
Wed Jun 25 09:29:34 CEST 2003
|
||||||
|
|
||||||
|
- Synced keyword.x and preproc.y/gram.y.
|
||||||
|
- Implemented Informix special way to treat NULLs.
|
||||||
|
|
||||||
|
Thu Jun 26 13:26:13 CEST 2003
|
||||||
|
|
||||||
|
- Added another compatibility level INFORMIX_SE.
|
||||||
|
- Synced again.
|
||||||
- Set ecpg version to 3.0.0
|
- Set ecpg version to 3.0.0
|
||||||
- Set ecpg library to 4.0.0
|
- Set ecpg library to 4.0.0
|
||||||
- Set pgtypes library to 1.0.0
|
- Set pgtypes library to 1.0.0
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/connect.c,v 1.8 2003/06/25 10:44:21 meskes Exp $ */
|
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/connect.c,v 1.9 2003/06/26 11:37:05 meskes Exp $ */
|
||||||
|
|
||||||
#define POSTGRES_ECPG_INTERNAL
|
#define POSTGRES_ECPG_INTERNAL
|
||||||
#include "postgres_fe.h"
|
#include "postgres_fe.h"
|
||||||
@ -304,7 +304,7 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p
|
|||||||
|
|
||||||
ECPGinit_sqlca(sqlca);
|
ECPGinit_sqlca(sqlca);
|
||||||
|
|
||||||
if (compat == ECPG_COMPAT_INFORMIX)
|
if (INFORMIX_MODE(compat))
|
||||||
{
|
{
|
||||||
char *envname;
|
char *envname;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.8 2003/06/25 10:44:21 meskes Exp $ */
|
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.9 2003/06/26 11:37:05 meskes Exp $ */
|
||||||
|
|
||||||
#define POSTGRES_ECPG_INTERNAL
|
#define POSTGRES_ECPG_INTERNAL
|
||||||
#include "postgres_fe.h"
|
#include "postgres_fe.h"
|
||||||
@ -78,7 +78,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
|
|||||||
break;
|
break;
|
||||||
#endif /* HAVE_LONG_LONG_INT_64 */
|
#endif /* HAVE_LONG_LONG_INT_64 */
|
||||||
case ECPGt_NO_INDICATOR:
|
case ECPGt_NO_INDICATOR:
|
||||||
if (force_indicator == false && compat == ECPG_COMPAT_INFORMIX)
|
if (force_indicator == false)
|
||||||
{
|
{
|
||||||
/* Informix has an additional way to specify NULLs
|
/* Informix has an additional way to specify NULLs
|
||||||
* note that this uses special values to denote NULL */
|
* note that this uses special values to denote NULL */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.12 2003/06/25 10:44:21 meskes Exp $ */
|
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.13 2003/06/26 11:37:05 meskes Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The aim is to get a simpler inteface to the database routines.
|
* The aim is to get a simpler inteface to the database routines.
|
||||||
@ -508,7 +508,7 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
|
|||||||
break;
|
break;
|
||||||
#endif /* HAVE_LONG_LONG_INT_64 */
|
#endif /* HAVE_LONG_LONG_INT_64 */
|
||||||
case ECPGt_NO_INDICATOR:
|
case ECPGt_NO_INDICATOR:
|
||||||
if (stmt->force_indicator == false && stmt->compat == ECPG_COMPAT_INFORMIX)
|
if (stmt->force_indicator == false)
|
||||||
{
|
{
|
||||||
if (ECPGis_informix_null(var->type, var->value))
|
if (ECPGis_informix_null(var->type, var->value))
|
||||||
*tobeinserted_p = "null";
|
*tobeinserted_p = "null";
|
||||||
@ -1186,7 +1186,9 @@ ECPGexecute(struct statement * stmt)
|
|||||||
sqlca->sqlerrd[1] = PQoidValue(results);
|
sqlca->sqlerrd[1] = PQoidValue(results);
|
||||||
sqlca->sqlerrd[2] = atol(PQcmdTuples(results));
|
sqlca->sqlerrd[2] = atol(PQcmdTuples(results));
|
||||||
ECPGlog("ECPGexecute line %d Ok: %s\n", stmt->lineno, cmdstat);
|
ECPGlog("ECPGexecute line %d Ok: %s\n", stmt->lineno, cmdstat);
|
||||||
if (!sqlca->sqlerrd[2] && ( !strncmp(cmdstat, "UPDATE", 6)
|
if (stmt->compat != ECPG_COMPAT_INFORMIX_SE &&
|
||||||
|
!sqlca->sqlerrd[2] &&
|
||||||
|
( !strncmp(cmdstat, "UPDATE", 6)
|
||||||
|| !strncmp(cmdstat, "INSERT", 6)
|
|| !strncmp(cmdstat, "INSERT", 6)
|
||||||
|| !strncmp(cmdstat, "DELETE", 6)))
|
|| !strncmp(cmdstat, "DELETE", 6)))
|
||||||
ECPGraise(stmt->lineno, ECPG_NOT_FOUND, NULL);
|
ECPGraise(stmt->lineno, ECPG_NOT_FOUND, NULL);
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
#include "libpq-fe.h"
|
#include "libpq-fe.h"
|
||||||
#include "sqlca.h"
|
#include "sqlca.h"
|
||||||
|
|
||||||
enum COMPAT_MODE { ECPG_COMPAT_PGSQL = 0, ECPG_COMPAT_INFORMIX};
|
enum COMPAT_MODE { ECPG_COMPAT_PGSQL = 0, ECPG_COMPAT_INFORMIX, ECPG_COMPAT_INFORMIX_SE};
|
||||||
|
#define INFORMIX_MODE(X) ((X) == ECPG_COMPAT_INFORMIX || (X) == ECPG_COMPAT_INFORMIX_SE)
|
||||||
|
|
||||||
/* Here are some methods used by the lib. */
|
/* Here are some methods used by the lib. */
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/prepare.c,v 1.4 2003/06/25 10:44:21 meskes Exp $ */
|
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/prepare.c,v 1.5 2003/06/26 11:37:05 meskes Exp $ */
|
||||||
|
|
||||||
#define POSTGRES_ECPG_INTERNAL
|
#define POSTGRES_ECPG_INTERNAL
|
||||||
#include "postgres_fe.h"
|
#include "postgres_fe.h"
|
||||||
@ -110,7 +110,7 @@ ECPGdeallocate(int lineno, int c, char *name)
|
|||||||
bool ret = ECPGdeallocate_one(lineno, name);
|
bool ret = ECPGdeallocate_one(lineno, name);
|
||||||
enum COMPAT_MODE compat = c;
|
enum COMPAT_MODE compat = c;
|
||||||
|
|
||||||
if (compat == ECPG_COMPAT_INFORMIX)
|
if (INFORMIX_MODE(compat))
|
||||||
{
|
{
|
||||||
/* Just ignore all errors since we do not know the list of cursors we
|
/* Just ignore all errors since we do not know the list of cursors we
|
||||||
* are allowed to free. We have to trust that the software. */
|
* are allowed to free. We have to trust that the software. */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.74 2003/06/25 10:44:21 meskes Exp $ */
|
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.75 2003/06/26 11:37:05 meskes Exp $ */
|
||||||
|
|
||||||
/* New main for ecpg, the PostgreSQL embedded SQL precompiler. */
|
/* New main for ecpg, the PostgreSQL embedded SQL precompiler. */
|
||||||
/* (C) Michael Meskes <meskes@postgresql.org> Feb 5th, 1998 */
|
/* (C) Michael Meskes <meskes@postgresql.org> Feb 5th, 1998 */
|
||||||
@ -45,7 +45,9 @@ help(const char *progname)
|
|||||||
printf(" -d generate parser debug output\n");
|
printf(" -d generate parser debug output\n");
|
||||||
#endif
|
#endif
|
||||||
printf(" -C <mode> set compatibility mode\n"
|
printf(" -C <mode> set compatibility mode\n"
|
||||||
" mode may be \"INFORMIX\" only at the moment\n");
|
" mode may be one of\n"
|
||||||
|
" \"INFORMIX\"\n"
|
||||||
|
" \"INFORMIX_SE\"\n");
|
||||||
printf(" -r <option> specify runtime behaviour\n"
|
printf(" -r <option> specify runtime behaviour\n"
|
||||||
" option may be only \"no_indicator\" at the moment\n");
|
" option may be only \"no_indicator\" at the moment\n");
|
||||||
printf(" -D SYMBOL define SYMBOL\n");
|
printf(" -D SYMBOL define SYMBOL\n");
|
||||||
@ -165,9 +167,9 @@ main(int argc, char *const argv[])
|
|||||||
system_includes = true;
|
system_includes = true;
|
||||||
break;
|
break;
|
||||||
case 'C':
|
case 'C':
|
||||||
if (strcmp(optarg, "INFORMIX") == 0)
|
if (strncmp(optarg, "INFORMIX", strlen("INFORMIX")) == 0)
|
||||||
{
|
{
|
||||||
compat = ECPG_COMPAT_INFORMIX;
|
compat = (strcmp(optarg, "INFORMIX") == 0) ? ECPG_COMPAT_INFORMIX : ECPG_COMPAT_INFORMIX_SE;
|
||||||
/* system_includes = true; */
|
/* system_includes = true; */
|
||||||
add_preprocessor_define("dec_t=Numeric");
|
add_preprocessor_define("dec_t=Numeric");
|
||||||
add_preprocessor_define("intrvl_t=Interval");
|
add_preprocessor_define("intrvl_t=Interval");
|
||||||
@ -383,7 +385,7 @@ main(int argc, char *const argv[])
|
|||||||
fprintf(yyout, "/* Processed by ecpg (%d.%d.%d) */\n/* These four include files are added by the preprocessor */\n#include <ecpgtype.h>\n#include <ecpglib.h>\n#include <ecpgerrno.h>\n#include <sqlca.h>\n#line 1 \"%s\"\n", MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL, input_filename);
|
fprintf(yyout, "/* Processed by ecpg (%d.%d.%d) */\n/* These four include files are added by the preprocessor */\n#include <ecpgtype.h>\n#include <ecpglib.h>\n#include <ecpgerrno.h>\n#include <sqlca.h>\n#line 1 \"%s\"\n", MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL, input_filename);
|
||||||
|
|
||||||
/* add some compatibility headers */
|
/* add some compatibility headers */
|
||||||
if (compat == ECPG_COMPAT_INFORMIX)
|
if (INFORMIX_MODE)
|
||||||
fprintf(yyout, "/* Needed for informix compatibility */\n#include <ecpg_informix.h>\n");
|
fprintf(yyout, "/* Needed for informix compatibility */\n#include <ecpg_informix.h>\n");
|
||||||
|
|
||||||
/* and parse the source */
|
/* and parse the source */
|
||||||
|
@ -96,7 +96,8 @@ extern ScanKeyword *ScanKeywordLookup(char *text);
|
|||||||
#define INDICATOR_NOT_STRUCT 6
|
#define INDICATOR_NOT_STRUCT 6
|
||||||
#define INDICATOR_NOT_SIMPLE 7
|
#define INDICATOR_NOT_SIMPLE 7
|
||||||
|
|
||||||
enum COMPAT_MODE { ECPG_COMPAT_PGSQL = 0, ECPG_COMPAT_INFORMIX};
|
enum COMPAT_MODE { ECPG_COMPAT_PGSQL = 0, ECPG_COMPAT_INFORMIX, ECPG_COMPAT_INFORMIX_SE};
|
||||||
extern enum COMPAT_MODE compat;
|
extern enum COMPAT_MODE compat;
|
||||||
|
#define INFORMIX_MODE (compat == ECPG_COMPAT_INFORMIX || compat == ECPG_COMPAT_INFORMIX_SE)
|
||||||
|
|
||||||
#endif /* _ECPG_PREPROC_EXTERN_H */
|
#endif /* _ECPG_PREPROC_EXTERN_H */
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.117 2003/06/20 15:16:06 meskes Exp $
|
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.118 2003/06/26 11:37:05 meskes Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -420,7 +420,7 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
<SQL>{typecast} { return TYPECAST; }
|
<SQL>{typecast} { return TYPECAST; }
|
||||||
<SQL>{informix_special} {
|
<SQL>{informix_special} {
|
||||||
/* are we simulating Informix? */
|
/* are we simulating Informix? */
|
||||||
if (compat == ECPG_COMPAT_INFORMIX)
|
if (INFORMIX_MODE)
|
||||||
{
|
{
|
||||||
unput(':');
|
unput(':');
|
||||||
}
|
}
|
||||||
@ -605,7 +605,7 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
<C>{exec_sql} { BEGIN SQL; return SQL_START; }
|
<C>{exec_sql} { BEGIN SQL; return SQL_START; }
|
||||||
<C>{informix_special} {
|
<C>{informix_special} {
|
||||||
/* are we simulating Informix? */
|
/* are we simulating Informix? */
|
||||||
if (compat == ECPG_COMPAT_INFORMIX)
|
if (INFORMIX_MODE)
|
||||||
{
|
{
|
||||||
BEGIN SQL;
|
BEGIN SQL;
|
||||||
return SQL_START;
|
return SQL_START;
|
||||||
@ -715,7 +715,7 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
<C>{exec_sql}{define}{space}* { BEGIN(def_ident); }
|
<C>{exec_sql}{define}{space}* { BEGIN(def_ident); }
|
||||||
<C>{informix_special}{define}{space}* {
|
<C>{informix_special}{define}{space}* {
|
||||||
/* are we simulating Informix? */
|
/* are we simulating Informix? */
|
||||||
if (compat == ECPG_COMPAT_INFORMIX)
|
if (INFORMIX_MODE)
|
||||||
{
|
{
|
||||||
BEGIN(def_ident);
|
BEGIN(def_ident);
|
||||||
}
|
}
|
||||||
@ -730,7 +730,7 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
<C>{exec_sql}{include}{space}* { BEGIN(incl); }
|
<C>{exec_sql}{include}{space}* { BEGIN(incl); }
|
||||||
<C>{informix_special}{include}{space}* {
|
<C>{informix_special}{include}{space}* {
|
||||||
/* are we simulating Informix? */
|
/* are we simulating Informix? */
|
||||||
if (compat == ECPG_COMPAT_INFORMIX)
|
if (INFORMIX_MODE)
|
||||||
{
|
{
|
||||||
BEGIN(incl);
|
BEGIN(incl);
|
||||||
}
|
}
|
||||||
@ -745,7 +745,7 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
<C,xskip>{exec_sql}{ifdef}{space}* { ifcond = TRUE; BEGIN(xcond); }
|
<C,xskip>{exec_sql}{ifdef}{space}* { ifcond = TRUE; BEGIN(xcond); }
|
||||||
<C,xskip>{informix_special}{ifdef}{space}* {
|
<C,xskip>{informix_special}{ifdef}{space}* {
|
||||||
/* are we simulating Informix? */
|
/* are we simulating Informix? */
|
||||||
if (compat == ECPG_COMPAT_INFORMIX)
|
if (INFORMIX_MODE)
|
||||||
{
|
{
|
||||||
ifcond = TRUE;
|
ifcond = TRUE;
|
||||||
BEGIN(xcond);
|
BEGIN(xcond);
|
||||||
@ -761,7 +761,7 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
<C,xskip>{exec_sql}{ifndef}{space}* { ifcond = FALSE; BEGIN(xcond); }
|
<C,xskip>{exec_sql}{ifndef}{space}* { ifcond = FALSE; BEGIN(xcond); }
|
||||||
<C,xskip>{informix_special}{ifndef}{space}* {
|
<C,xskip>{informix_special}{ifndef}{space}* {
|
||||||
/* are we simulating Informix? */
|
/* are we simulating Informix? */
|
||||||
if (compat == ECPG_COMPAT_INFORMIX)
|
if (INFORMIX_MODE)
|
||||||
{
|
{
|
||||||
ifcond = FALSE;
|
ifcond = FALSE;
|
||||||
BEGIN(xcond);
|
BEGIN(xcond);
|
||||||
@ -787,7 +787,7 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
}
|
}
|
||||||
<C,xskip>{informix_special}{elif}{space}* {
|
<C,xskip>{informix_special}{elif}{space}* {
|
||||||
/* are we simulating Informix? */
|
/* are we simulating Informix? */
|
||||||
if (compat == ECPG_COMPAT_INFORMIX)
|
if (INFORMIX_MODE)
|
||||||
{
|
{
|
||||||
if ( preproc_tos == 0 ) {
|
if ( preproc_tos == 0 ) {
|
||||||
mmerror(PARSE_ERROR, ET_FATAL, "Missing matching 'EXEC SQL IFDEF / EXEC SQL IFNDEF'");
|
mmerror(PARSE_ERROR, ET_FATAL, "Missing matching 'EXEC SQL IFDEF / EXEC SQL IFNDEF'");
|
||||||
@ -826,7 +826,7 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
}
|
}
|
||||||
<C,xskip>{informix_special}{else}{space}* {
|
<C,xskip>{informix_special}{else}{space}* {
|
||||||
/* are we simulating Informix? */
|
/* are we simulating Informix? */
|
||||||
if (compat == ECPG_COMPAT_INFORMIX)
|
if (INFORMIX_MODE)
|
||||||
{
|
{
|
||||||
if ( stacked_if_value[preproc_tos].else_branch ) {
|
if ( stacked_if_value[preproc_tos].else_branch ) {
|
||||||
mmerror(PARSE_ERROR, ET_FATAL, "Duplicated 'EXEC SQL ELSE;'");
|
mmerror(PARSE_ERROR, ET_FATAL, "Duplicated 'EXEC SQL ELSE;'");
|
||||||
@ -864,7 +864,7 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
}
|
}
|
||||||
<C,xskip>{informix_special}{endif}{space}*";" {
|
<C,xskip>{informix_special}{endif}{space}*";" {
|
||||||
/* are we simulating Informix? */
|
/* are we simulating Informix? */
|
||||||
if (compat == ECPG_COMPAT_INFORMIX)
|
if (INFORMIX_MODE)
|
||||||
{
|
{
|
||||||
if ( preproc_tos == 0 )
|
if ( preproc_tos == 0 )
|
||||||
mmerror(PARSE_ERROR, ET_FATAL, "Unmatched 'EXEC SQL ENDIF;'");
|
mmerror(PARSE_ERROR, ET_FATAL, "Unmatched 'EXEC SQL ENDIF;'");
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.239 2003/06/25 21:30:33 momjian Exp $ */
|
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.240 2003/06/26 11:37:05 meskes Exp $ */
|
||||||
|
|
||||||
/* Copyright comment */
|
/* Copyright comment */
|
||||||
%{
|
%{
|
||||||
@ -2674,7 +2674,7 @@ DeclareCursorStmt: DECLARE name cursor_options CURSOR opt_hold FOR SelectStmt
|
|||||||
argsinsert = argsresult = NULL;
|
argsinsert = argsresult = NULL;
|
||||||
cur = this;
|
cur = this;
|
||||||
|
|
||||||
if (compat == ECPG_COMPAT_INFORMIX)
|
if (INFORMIX_MODE)
|
||||||
$$ = cat_str(5, adjust_informix(this->argsinsert), adjust_informix(this->argsresult), make_str("/*"), mm_strdup(this->command), make_str("*/"));
|
$$ = cat_str(5, adjust_informix(this->argsinsert), adjust_informix(this->argsresult), make_str("/*"), mm_strdup(this->command), make_str("*/"));
|
||||||
else
|
else
|
||||||
$$ = cat_str(3, make_str("/*"), mm_strdup(this->command), make_str("*/"));
|
$$ = cat_str(3, make_str("/*"), mm_strdup(this->command), make_str("*/"));
|
||||||
@ -3476,8 +3476,6 @@ a_expr: c_expr
|
|||||||
{ $$ = cat_str(3, $1, make_str("not in"), $4); }
|
{ $$ = cat_str(3, $1, make_str("not in"), $4); }
|
||||||
| a_expr qual_all_Op sub_type select_with_parens %prec Op
|
| a_expr qual_all_Op sub_type select_with_parens %prec Op
|
||||||
{ $$ = cat_str(4, $1, $2, $3, $4); }
|
{ $$ = cat_str(4, $1, $2, $3, $4); }
|
||||||
| a_expr qual_all_Op sub_type '(' a_expr ')' %prec Op
|
|
||||||
{ $$ = cat_str(6, $1, $2, $3, make_str("("), $5, make_str(")")); }
|
|
||||||
| UNIQUE select_with_parens %prec Op
|
| UNIQUE select_with_parens %prec Op
|
||||||
{ $$ = cat2_str(make_str("unique"), $2); }
|
{ $$ = cat2_str(make_str("unique"), $2); }
|
||||||
| r_expr
|
| r_expr
|
||||||
|
@ -34,8 +34,13 @@ int main()
|
|||||||
else
|
else
|
||||||
printf("%d %d\n", i, j);
|
printf("%d %d\n", i, j);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$delete from test where i=87;
|
||||||
|
printf("delete: %ld\n", sqlca.sqlcode);
|
||||||
|
|
||||||
|
$commit;
|
||||||
$drop table test;
|
$drop table test;
|
||||||
|
$commit;
|
||||||
|
|
||||||
$disconnect;
|
$disconnect;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user