mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
- Made sure Informix style decimal vars are initialized. They use a
fixed amount of digits and not an allocated one. So we have to work around. PostgreSQL numeric type remains the same. - In INFORMIX_SE mode with autcommit set, make all cursors be "with hold". Is this really they way SE behaves?
This commit is contained in:
parent
4355d4fb21
commit
cf883ea95c
@ -1528,6 +1528,11 @@ Thu Jun 26 13:26:13 CEST 2003
|
|||||||
Sun Jun 29 11:22:48 CEST 2003
|
Sun Jun 29 11:22:48 CEST 2003
|
||||||
|
|
||||||
- Just another sync.
|
- Just another sync.
|
||||||
|
- Made sure Informix style decimal vars are initialized. They use a
|
||||||
|
fixed amount of digits and not an allocated one. So we have to work
|
||||||
|
around. PostgreSQL numeric type remains the same.
|
||||||
|
- In INFORMIX_SE mode with autcommit set, make all cursors be "with
|
||||||
|
hold". Is this really they way SE behaves?
|
||||||
- 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
|
||||||
|
@ -45,6 +45,7 @@ enum ECPGttype
|
|||||||
ECPGt_float, ECPGt_double,
|
ECPGt_float, ECPGt_double,
|
||||||
ECPGt_varchar, ECPGt_varchar2,
|
ECPGt_varchar, ECPGt_varchar2,
|
||||||
ECPGt_numeric,
|
ECPGt_numeric,
|
||||||
|
ECPGt_decimal, /* only used internally */
|
||||||
ECPGt_date,
|
ECPGt_date,
|
||||||
ECPGt_timestamp,
|
ECPGt_timestamp,
|
||||||
ECPGt_interval,
|
ECPGt_interval,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.242 2003/06/29 09:25:19 meskes Exp $ */
|
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.243 2003/06/29 16:52:58 meskes Exp $ */
|
||||||
|
|
||||||
/* Copyright comment */
|
/* Copyright comment */
|
||||||
%{
|
%{
|
||||||
@ -2706,7 +2706,10 @@ cursor_options: /* EMPTY */ { $$ = EMPTY; }
|
|||||||
| cursor_options NO SCROLL { $$ = cat2_str($1, make_str("no scroll")); }
|
| cursor_options NO SCROLL { $$ = cat2_str($1, make_str("no scroll")); }
|
||||||
;
|
;
|
||||||
|
|
||||||
opt_hold: /* EMPTY */ { $$ = EMPTY; }
|
opt_hold: /* EMPTY */ { if (compat == ECPG_COMPAT_INFORMIX_SE && autocommit == true)
|
||||||
|
$$ = make_str("with hold");
|
||||||
|
else
|
||||||
|
$$ = EMPTY; }
|
||||||
| WITH HOLD { $$ = make_str("with hold"); }
|
| WITH HOLD { $$ = make_str("with hold"); }
|
||||||
| WITHOUT HOLD { $$ = make_str("without hold"); }
|
| WITHOUT HOLD { $$ = make_str("without hold"); }
|
||||||
;
|
;
|
||||||
@ -4449,7 +4452,7 @@ single_vt_type: common_type
|
|||||||
}
|
}
|
||||||
else if (strcmp($1, "decimal") == 0)
|
else if (strcmp($1, "decimal") == 0)
|
||||||
{
|
{
|
||||||
$$.type_enum = ECPGt_numeric;
|
$$.type_enum = ECPGt_decimal;
|
||||||
$$.type_str = make_str("Numeric");
|
$$.type_str = make_str("Numeric");
|
||||||
$$.type_dimension = make_str("-1");
|
$$.type_dimension = make_str("-1");
|
||||||
$$.type_index = make_str("-1");
|
$$.type_index = make_str("-1");
|
||||||
@ -4751,7 +4754,7 @@ common_type: simple_type
|
|||||||
if (strcmp($1, "numeric") != 0 && strcmp($1, "decimal") != 0)
|
if (strcmp($1, "numeric") != 0 && strcmp($1, "decimal") != 0)
|
||||||
mmerror(PARSE_ERROR, ET_ERROR, "Only numeric/decimal have precision/scale argument");
|
mmerror(PARSE_ERROR, ET_ERROR, "Only numeric/decimal have precision/scale argument");
|
||||||
|
|
||||||
$$.type_enum = ECPGt_numeric;
|
$$.type_enum = (strcmp($1, "numeric") != 0) ? ECPGt_decimal : ECPGt_numeric;
|
||||||
$$.type_str = make_str("Numeric");
|
$$.type_str = make_str("Numeric");
|
||||||
$$.type_dimension = make_str("-1");
|
$$.type_dimension = make_str("-1");
|
||||||
$$.type_index = make_str("-1");
|
$$.type_index = make_str("-1");
|
||||||
@ -4803,7 +4806,7 @@ var_type: common_type
|
|||||||
}
|
}
|
||||||
else if (strcmp($1, "decimal") == 0)
|
else if (strcmp($1, "decimal") == 0)
|
||||||
{
|
{
|
||||||
$$.type_enum = ECPGt_numeric;
|
$$.type_enum = ECPGt_decimal;
|
||||||
$$.type_str = make_str("Numeric");
|
$$.type_str = make_str("Numeric");
|
||||||
$$.type_dimension = make_str("-1");
|
$$.type_dimension = make_str("-1");
|
||||||
$$.type_index = make_str("-1");
|
$$.type_index = make_str("-1");
|
||||||
@ -5073,6 +5076,21 @@ variable: opt_pointer ECPGColLabelCommon opt_array_bounds opt_initializer
|
|||||||
$$ = cat_str(4, $1, mm_strdup($2), $3.str, $4);
|
$$ = cat_str(4, $1, mm_strdup($2), $3.str, $4);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ECPGt_decimal: /* this is used by informix and need to be initialized */
|
||||||
|
if (atoi(dimension) < 0)
|
||||||
|
type = ECPGmake_simple_type(ECPGt_numeric, make_str("1"));
|
||||||
|
else
|
||||||
|
type = ECPGmake_array_type(ECPGmake_simple_type(ECPGt_numeric, make_str("1")), dimension);
|
||||||
|
|
||||||
|
if (strlen($4) == 0)
|
||||||
|
{
|
||||||
|
$4 = mm_alloc(sizeof(" = {0, 0, 0, 0, 0, NULL, NULL}"));
|
||||||
|
strcpy($4, " = {0, 0, 0, 0, 0, NULL, NULL}");
|
||||||
|
}
|
||||||
|
|
||||||
|
$$ = cat_str(4, $1, mm_strdup($2), $3.str, $4);
|
||||||
|
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
if (atoi(dimension) < 0)
|
if (atoi(dimension) < 0)
|
||||||
type = ECPGmake_simple_type(actual_type[struct_level].type_enum, make_str("1"));
|
type = ECPGmake_simple_type(actual_type[struct_level].type_enum, make_str("1"));
|
||||||
|
@ -8,7 +8,7 @@ main()
|
|||||||
char *text="error\n";
|
char *text="error\n";
|
||||||
Numeric *value1, *value2, *res;
|
Numeric *value1, *value2, *res;
|
||||||
exec sql begin declare section;
|
exec sql begin declare section;
|
||||||
decimal(14,7) des = {0, 0, 0, 0, 0, NULL, NULL} ;
|
numeric(14,7) des = {0, 0, 0, 0, 0, NULL, NULL} ;
|
||||||
exec sql end declare section;
|
exec sql end declare section;
|
||||||
double d;
|
double d;
|
||||||
FILE *dbgs;
|
FILE *dbgs;
|
||||||
|
@ -5,7 +5,7 @@ void openit(void);
|
|||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
$int i = 14;
|
$int i = 14;
|
||||||
$int j;
|
$decimal j;
|
||||||
FILE *dbgs;
|
FILE *dbgs;
|
||||||
|
|
||||||
if ((dbgs = fopen("log", "w")) != NULL)
|
if ((dbgs = fopen("log", "w")) != NULL)
|
||||||
@ -15,24 +15,30 @@ int main()
|
|||||||
|
|
||||||
$create table test(i int primary key, j int);
|
$create table test(i int primary key, j int);
|
||||||
|
|
||||||
rsetnull(CINTTYPE, (char *)&j);
|
rsetnull(CDECIMALTYPE, (char *)&j);
|
||||||
$insert into test (i, j) values (7, :j);
|
$insert into test (i, j) values (7, :j);
|
||||||
$insert into test (i, j) values (:i, 1);
|
$insert into test (i, j) values (:i, 1);
|
||||||
|
|
||||||
$declare c cursor for select * from test where i <= :i;
|
$declare c cursor for select * from test where i <= :i;
|
||||||
openit();
|
openit();
|
||||||
|
|
||||||
j=0;
|
deccvint(0, &j);
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
$fetch in c into :i, :j;
|
$fetch in c into :i, :j;
|
||||||
if (sqlca.sqlcode == 100) break;
|
if (sqlca.sqlcode == 100) break;
|
||||||
else if (sqlca.sqlcode != 0) printf ("Error: %ld\n", sqlca.sqlcode);
|
else if (sqlca.sqlcode != 0) printf ("Error: %ld\n", sqlca.sqlcode);
|
||||||
|
|
||||||
if (risnull(CINTTYPE, (char *)&j))
|
if (risnull(CDECIMALTYPE, (char *)&j))
|
||||||
printf("%d\n", i);
|
printf("%d\n", i);
|
||||||
else
|
else
|
||||||
printf("%d %d\n", i, j);
|
{
|
||||||
|
int a;
|
||||||
|
|
||||||
|
dectoint(&j, &a);
|
||||||
|
printf("%d %d\n", i, a);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$delete from test where i=87;
|
$delete from test where i=87;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user