/* Processed by ecpg (regression mode) */
/* These include files are added by the preprocessor */
# include <ecpglib.h>
# include <ecpgerrno.h>
# include <sqlca.h>
/* End of automatic include section */
# define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y))
# line 1 "outofscope.pgc"
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <limits.h>
# line 1 "regression.h"
# line 6 "outofscope.pgc"
# line 1 "pgtypes_numeric.h"
# ifndef PGTYPES_NUMERIC
# define PGTYPES_NUMERIC
# include <pgtypes.h>
# define NUMERIC_POS 0x0000
# define NUMERIC_NEG 0x4000
# define NUMERIC_NAN 0xC000
# define NUMERIC_NULL 0xF000
# define NUMERIC_MAX_PRECISION 1000
# define NUMERIC_MAX_DISPLAY_SCALE NUMERIC_MAX_PRECISION
# define NUMERIC_MIN_DISPLAY_SCALE 0
# define NUMERIC_MIN_SIG_DIGITS 16
# define DECSIZE 30
typedef unsigned char NumericDigit ;
typedef struct
{
int ndigits ; /* number of digits in digits[] - can be 0! */
int weight ; /* weight of first digit */
int rscale ; /* result scale */
int dscale ; /* display scale */
int sign ; /* NUMERIC_POS, NUMERIC_NEG, or NUMERIC_NAN */
NumericDigit * buf ; /* start of alloc'd space for digits[] */
NumericDigit * digits ; /* decimal digits */
} numeric ;
typedef struct
{
int ndigits ; /* number of digits in digits[] - can be 0! */
int weight ; /* weight of first digit */
int rscale ; /* result scale */
int dscale ; /* display scale */
int sign ; /* NUMERIC_POS, NUMERIC_NEG, or NUMERIC_NAN */
Phase 2 of pgindent updates.
Change pg_bsd_indent to follow upstream rules for placement of comments
to the right of code, and remove pgindent hack that caused comments
following #endif to not obey the general rule.
Commit e3860ffa4dd0dad0dd9eea4be9cc1412373a8c89 wasn't actually using
the published version of pg_bsd_indent, but a hacked-up version that
tried to minimize the amount of movement of comments to the right of
code. The situation of interest is where such a comment has to be
moved to the right of its default placement at column 33 because there's
code there. BSD indent has always moved right in units of tab stops
in such cases --- but in the previous incarnation, indent was working
in 8-space tab stops, while now it knows we use 4-space tabs. So the
net result is that in about half the cases, such comments are placed
one tab stop left of before. This is better all around: it leaves
more room on the line for comment text, and it means that in such
cases the comment uniformly starts at the next 4-space tab stop after
the code, rather than sometimes one and sometimes two tabs after.
Also, ensure that comments following #endif are indented the same
as comments following other preprocessor commands such as #else.
That inconsistency turns out to have been self-inflicted damage
from a poorly-thought-through post-indent "fixup" in pgindent.
This patch is much less interesting than the first round of indent
changes, but also bulkier, so I thought it best to separate the effects.
Discussion: https://postgr.es/m/E1dAmxK-0006EE-1r@gemulon.postgresql.org
Discussion: https://postgr.es/m/30527.1495162840@sss.pgh.pa.us
8 years ago
NumericDigit digits [ DECSIZE ] ; /* decimal digits */
} decimal ;
# ifdef __cplusplus
extern " C "
{
# endif
numeric * PGTYPESnumeric_new ( void ) ;
decimal * PGTYPESdecimal_new ( void ) ;
void PGTYPESnumeric_free ( numeric * ) ;
void PGTYPESdecimal_free ( decimal * ) ;
numeric * PGTYPESnumeric_from_asc ( char * , char * * ) ;
char * PGTYPESnumeric_to_asc ( numeric * , int ) ;
int PGTYPESnumeric_add ( numeric * , numeric * , numeric * ) ;
int PGTYPESnumeric_sub ( numeric * , numeric * , numeric * ) ;
int PGTYPESnumeric_mul ( numeric * , numeric * , numeric * ) ;
int PGTYPESnumeric_div ( numeric * , numeric * , numeric * ) ;
int PGTYPESnumeric_cmp ( numeric * , numeric * ) ;
int PGTYPESnumeric_from_int ( signed int , numeric * ) ;
int PGTYPESnumeric_from_long ( signed long int , numeric * ) ;
int PGTYPESnumeric_copy ( numeric * , numeric * ) ;
int PGTYPESnumeric_from_double ( double , numeric * ) ;
int PGTYPESnumeric_to_double ( numeric * , double * ) ;
int PGTYPESnumeric_to_int ( numeric * , int * ) ;
int PGTYPESnumeric_to_long ( numeric * , long * ) ;
int PGTYPESnumeric_to_decimal ( numeric * , decimal * ) ;
int PGTYPESnumeric_from_decimal ( decimal * , numeric * ) ;
# ifdef __cplusplus
}
# endif
Phase 2 of pgindent updates.
Change pg_bsd_indent to follow upstream rules for placement of comments
to the right of code, and remove pgindent hack that caused comments
following #endif to not obey the general rule.
Commit e3860ffa4dd0dad0dd9eea4be9cc1412373a8c89 wasn't actually using
the published version of pg_bsd_indent, but a hacked-up version that
tried to minimize the amount of movement of comments to the right of
code. The situation of interest is where such a comment has to be
moved to the right of its default placement at column 33 because there's
code there. BSD indent has always moved right in units of tab stops
in such cases --- but in the previous incarnation, indent was working
in 8-space tab stops, while now it knows we use 4-space tabs. So the
net result is that in about half the cases, such comments are placed
one tab stop left of before. This is better all around: it leaves
more room on the line for comment text, and it means that in such
cases the comment uniformly starts at the next 4-space tab stop after
the code, rather than sometimes one and sometimes two tabs after.
Also, ensure that comments following #endif are indented the same
as comments following other preprocessor commands such as #else.
That inconsistency turns out to have been self-inflicted damage
from a poorly-thought-through post-indent "fixup" in pgindent.
This patch is much less interesting than the first round of indent
changes, but also bulkier, so I thought it best to separate the effects.
Discussion: https://postgr.es/m/E1dAmxK-0006EE-1r@gemulon.postgresql.org
Discussion: https://postgr.es/m/30527.1495162840@sss.pgh.pa.us
8 years ago
# endif /* PGTYPES_NUMERIC */
# line 8 "outofscope.pgc"
/* exec sql begin declare section */
# line 1 "struct.h"
/* dec_t */
typedef struct mytype MYTYPE ;
# line 9 "struct.h"
typedef struct mynulltype MYNULLTYPE ;
# line 19 "struct.h"
# line 11 "outofscope.pgc"
struct mytype {
# line 3 "struct.h"
int id ;
# line 4 "struct.h"
char t [ 64 ] ;
# line 5 "struct.h"
double d1 ;
# line 6 "struct.h"
double d2 ;
# line 7 "struct.h"
char c [ 30 ] ;
} ; struct mynulltype {
# line 13 "struct.h"
int id ;
# line 14 "struct.h"
int t ;
# line 15 "struct.h"
int d1 ;
# line 16 "struct.h"
int d2 ;
# line 17 "struct.h"
int c ;
} ; /* exec sql end declare section */
# line 12 "outofscope.pgc"
/* exec sql whenever sqlerror stop ; */
# line 14 "outofscope.pgc"
/* Functions for test 1 */
static void
get_var1 ( MYTYPE * * myvar0 , MYNULLTYPE * * mynullvar0 )
{
/* exec sql begin declare section */
# line 22 "outofscope.pgc"
MYTYPE * myvar = malloc ( sizeof ( MYTYPE ) ) ;
# line 23 "outofscope.pgc"
MYNULLTYPE * mynullvar = malloc ( sizeof ( MYNULLTYPE ) ) ;
/* exec sql end declare section */
# line 24 "outofscope.pgc"
/* Test DECLARE ... SELECT ... INTO with pointers */
ECPGset_var ( 0 , ( myvar ) , __LINE__ ) ; \
ECPGset_var ( 1 , ( mynullvar ) , __LINE__ ) ; \
/* declare mycur cursor for select * from a1 */
# line 28 "outofscope.pgc"
if ( sqlca . sqlcode ! = 0 )
exit ( 1 ) ;
* myvar0 = myvar ;
* mynullvar0 = mynullvar ;
}
static void
open_cur1 ( void )
{
{ ECPGdo ( __LINE__ , 0 , 1 , NULL , 0 , ECPGst_normal , " declare mycur cursor for select * from a1 " , ECPGt_EOIT ,
ECPGt_int , & ( ( * ( MYTYPE * ) ( ECPGget_var ( 0 ) ) ) . id ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mytype ) ,
ECPGt_int , & ( ( * ( MYNULLTYPE * ) ( ECPGget_var ( 1 ) ) ) . id ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mynulltype ) ,
ECPGt_char , & ( ( * ( MYTYPE * ) ( ECPGget_var ( 0 ) ) ) . t ) , ( long ) 64 , ( long ) 1 , sizeof ( struct mytype ) ,
ECPGt_int , & ( ( * ( MYNULLTYPE * ) ( ECPGget_var ( 1 ) ) ) . t ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mynulltype ) ,
ECPGt_double , & ( ( * ( MYTYPE * ) ( ECPGget_var ( 0 ) ) ) . d1 ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mytype ) ,
ECPGt_int , & ( ( * ( MYNULLTYPE * ) ( ECPGget_var ( 1 ) ) ) . d1 ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mynulltype ) ,
ECPGt_double , & ( ( * ( MYTYPE * ) ( ECPGget_var ( 0 ) ) ) . d2 ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mytype ) ,
ECPGt_int , & ( ( * ( MYNULLTYPE * ) ( ECPGget_var ( 1 ) ) ) . d2 ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mynulltype ) ,
ECPGt_char , & ( ( * ( MYTYPE * ) ( ECPGget_var ( 0 ) ) ) . c ) , ( long ) 30 , ( long ) 1 , sizeof ( struct mytype ) ,
ECPGt_int , & ( ( * ( MYNULLTYPE * ) ( ECPGget_var ( 1 ) ) ) . c ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mynulltype ) , ECPGt_EORT ) ;
# line 40 "outofscope.pgc"
if ( sqlca . sqlcode < 0 ) exit ( 1 ) ; }
# line 40 "outofscope.pgc"
if ( sqlca . sqlcode ! = 0 )
exit ( 1 ) ;
}
static void
get_record1 ( void )
{
{ ECPGdo ( __LINE__ , 0 , 1 , NULL , 0 , ECPGst_normal , " fetch mycur " , ECPGt_EOIT ,
ECPGt_int , & ( ( * ( MYTYPE * ) ( ECPGget_var ( 0 ) ) ) . id ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mytype ) ,
ECPGt_int , & ( ( * ( MYNULLTYPE * ) ( ECPGget_var ( 1 ) ) ) . id ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mynulltype ) ,
ECPGt_char , & ( ( * ( MYTYPE * ) ( ECPGget_var ( 0 ) ) ) . t ) , ( long ) 64 , ( long ) 1 , sizeof ( struct mytype ) ,
ECPGt_int , & ( ( * ( MYNULLTYPE * ) ( ECPGget_var ( 1 ) ) ) . t ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mynulltype ) ,
ECPGt_double , & ( ( * ( MYTYPE * ) ( ECPGget_var ( 0 ) ) ) . d1 ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mytype ) ,
ECPGt_int , & ( ( * ( MYNULLTYPE * ) ( ECPGget_var ( 1 ) ) ) . d1 ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mynulltype ) ,
ECPGt_double , & ( ( * ( MYTYPE * ) ( ECPGget_var ( 0 ) ) ) . d2 ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mytype ) ,
ECPGt_int , & ( ( * ( MYNULLTYPE * ) ( ECPGget_var ( 1 ) ) ) . d2 ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mynulltype ) ,
ECPGt_char , & ( ( * ( MYTYPE * ) ( ECPGget_var ( 0 ) ) ) . c ) , ( long ) 30 , ( long ) 1 , sizeof ( struct mytype ) ,
ECPGt_int , & ( ( * ( MYNULLTYPE * ) ( ECPGget_var ( 1 ) ) ) . c ) , ( long ) 1 , ( long ) 1 , sizeof ( struct mynulltype ) , ECPGt_EORT ) ;
# line 49 "outofscope.pgc"
if ( sqlca . sqlcode < 0 ) exit ( 1 ) ; }
# line 49 "outofscope.pgc"
if ( sqlca . sqlcode ! = 0 & & sqlca . sqlcode ! = ECPG_NOT_FOUND )
exit ( 1 ) ;
}
static void
close_cur1 ( void )
{
{ ECPGdo ( __LINE__ , 0 , 1 , NULL , 0 , ECPGst_normal , " close mycur " , ECPGt_EOIT , ECPGt_EORT ) ;
# line 58 "outofscope.pgc"
if ( sqlca . sqlcode < 0 ) exit ( 1 ) ; }
# line 58 "outofscope.pgc"
if ( sqlca . sqlcode ! = 0 )
exit ( 1 ) ;
}
int
main ( void )
{
MYTYPE * myvar ;
MYNULLTYPE * mynullvar ;
char msg [ 128 ] ;
ECPGdebug ( 1 , stderr ) ;
strcpy ( msg , " connect " ) ;
{ ECPGconnect ( __LINE__ , 0 , " ecpg1_regression " , NULL , NULL , NULL , 0 ) ;
# line 75 "outofscope.pgc"
if ( sqlca . sqlcode < 0 ) exit ( 1 ) ; }
# line 75 "outofscope.pgc"
strcpy ( msg , " set " ) ;
{ ECPGdo ( __LINE__ , 0 , 1 , NULL , 0 , ECPGst_normal , " set datestyle to iso " , ECPGt_EOIT , ECPGt_EORT ) ;
# line 78 "outofscope.pgc"
if ( sqlca . sqlcode < 0 ) exit ( 1 ) ; }
# line 78 "outofscope.pgc"
strcpy ( msg , " create " ) ;
{ ECPGdo ( __LINE__ , 0 , 1 , NULL , 0 , ECPGst_normal , " create table a1 ( id serial primary key , t text , d1 numeric , d2 float8 , c character ( 10 ) ) " , ECPGt_EOIT , ECPGt_EORT ) ;
# line 81 "outofscope.pgc"
if ( sqlca . sqlcode < 0 ) exit ( 1 ) ; }
# line 81 "outofscope.pgc"
strcpy ( msg , " insert " ) ;
{ ECPGdo ( __LINE__ , 0 , 1 , NULL , 0 , ECPGst_normal , " insert into a1 ( id , t , d1 , d2 , c ) values ( default , 'a' , 1.0 , 2 , 'a' ) " , ECPGt_EOIT , ECPGt_EORT ) ;
# line 84 "outofscope.pgc"
if ( sqlca . sqlcode < 0 ) exit ( 1 ) ; }
# line 84 "outofscope.pgc"
{ ECPGdo ( __LINE__ , 0 , 1 , NULL , 0 , ECPGst_normal , " insert into a1 ( id , t , d1 , d2 , c ) values ( default , null , null , null , null ) " , ECPGt_EOIT , ECPGt_EORT ) ;
# line 85 "outofscope.pgc"
if ( sqlca . sqlcode < 0 ) exit ( 1 ) ; }
# line 85 "outofscope.pgc"
{ ECPGdo ( __LINE__ , 0 , 1 , NULL , 0 , ECPGst_normal , " insert into a1 ( id , t , d1 , d2 , c ) values ( default , 'b' , 2.0 , 3 , 'b' ) " , ECPGt_EOIT , ECPGt_EORT ) ;
# line 86 "outofscope.pgc"
if ( sqlca . sqlcode < 0 ) exit ( 1 ) ; }
# line 86 "outofscope.pgc"
strcpy ( msg , " commit " ) ;
{ ECPGtrans ( __LINE__ , NULL , " commit " ) ;
# line 89 "outofscope.pgc"
if ( sqlca . sqlcode < 0 ) exit ( 1 ) ; }
# line 89 "outofscope.pgc"
/* Test out-of-scope DECLARE/OPEN/FETCH/CLOSE */
get_var1 ( & myvar , & mynullvar ) ;
open_cur1 ( ) ;
/* exec sql whenever not found break ; */
# line 96 "outofscope.pgc"
while ( 1 )
{
memset ( myvar , 0 , sizeof ( MYTYPE ) ) ;
get_record1 ( ) ;
if ( sqlca . sqlcode = = ECPG_NOT_FOUND )
break ;
printf ( " id=%d%s t='%s'%s d1=%f%s d2=%f%s c = '%s'%s \n " ,
myvar - > id , mynullvar - > id ? " (NULL) " : " " ,
myvar - > t , mynullvar - > t ? " (NULL) " : " " ,
myvar - > d1 , mynullvar - > d1 ? " (NULL) " : " " ,
myvar - > d2 , mynullvar - > d2 ? " (NULL) " : " " ,
myvar - > c , mynullvar - > c ? " (NULL) " : " " ) ;
}
close_cur1 ( ) ;
free ( myvar ) ;
free ( mynullvar ) ;
strcpy ( msg , " drop " ) ;
{ ECPGdo ( __LINE__ , 0 , 1 , NULL , 0 , ECPGst_normal , " drop table a1 " , ECPGt_EOIT , ECPGt_EORT ) ;
# line 118 "outofscope.pgc"
if ( sqlca . sqlcode < 0 ) exit ( 1 ) ; }
# line 118 "outofscope.pgc"
strcpy ( msg , " commit " ) ;
{ ECPGtrans ( __LINE__ , NULL , " commit " ) ;
# line 121 "outofscope.pgc"
if ( sqlca . sqlcode < 0 ) exit ( 1 ) ; }
# line 121 "outofscope.pgc"
strcpy ( msg , " disconnect " ) ;
{ ECPGdisconnect ( __LINE__ , " CURRENT " ) ;
# line 124 "outofscope.pgc"
if ( sqlca . sqlcode < 0 ) exit ( 1 ) ; }
# line 124 "outofscope.pgc"
return 0 ;
}