@@ -20,7 +20,11 @@ void changedir(char *);
2020%token <sval> CREATE_INDEX
2121%token <sval> ALTER_TABLE
2222%token <sval> FK
23+ %token <sval> PK
24+ %token <sval> UK
2325%token <sval> FK_NAME
26+ %token <sval> PK_NAME
27+ %token <sval> UK_NAME
2428%token <sval> ADD_CONSTRAINT
2529%token <sval> COLUMN
2630
@@ -35,19 +39,27 @@ linhas :
3539 | linhas instrucao
3640 ;
3741
42+ constraint :
43+ | FK
44+ | PK
45+ | UK
46+ ;
47+
3848instrucao : CREATE_TABLE OWNER_OBJECT FIM_COMANDO {
3949 char *owner;
4050 char *object;
4151 owner = strtok ($2 ," ." );
4252 object = strtok (NULL , " ." );
4353 char str[1024 ];
44- strcpy (str," select case count(1) when 1 then 'ok' else 'error' end from dba_tables t where t.owner='" );
54+ strcpy (str," select '" );
55+ strcat (str, object);
56+ strcat (str, " ' as obj, case count(1) when 1 then 'ok' else 'error' end as status from dba_tables t where t.owner='" );
4557 strcat (str,owner);
4658 strcat (str," ' and t.table_name='" );
4759 strcat (str,object);
48- strcat (str," '; " );
60+ strcat (str," ' union all " );
4961 printf (" \n --CREATE TABLE\n %s\n " ,str);
50- // printf("select case count(1) when 1 then 'ok' else 'error' end from dba_tables t where t.owner='%s' and t.table_name='%s';\n",owner,object);
62+
5163 }
5264
5365 | CREATE_INDEX OWNER_OBJECT OWNER_OBJECT COLUMN FIM_COMANDO {
@@ -56,56 +68,94 @@ instrucao: CREATE_TABLE OWNER_OBJECT FIM_COMANDO {
5668 owner = strtok ($2 ," ." );
5769 object = strtok (NULL , " ." );
5870 char str[1024 ];
59- strcpy (str," select case count(1) when 1 then 'ok' else 'error' end from dba_indexes t where t.owner='" );
71+ strcpy (str," select '" );
72+ strcat (str,object);
73+ strcat (str," ' as obj, case count(1) when 1 then 'ok' else 'error' end as status from dba_indexes t where t.owner='" );
6074 strcat (str,owner);
6175 strcat (str," ' and t.index_name='" );
6276 strcat (str,object);
63- strcat (str," '; " );
77+ strcat (str," ' union all " );
6478 printf (" \n --CREATE INDEX\n %s\n " ,str);
65- // printf("select case count(1) when 1 then 'ok' else 'error' end from dba_indexes t where t.owner='%s' and t.index_name='%s';\n",owner,object);
6679 }
67- | ALTER_TABLE OWNER_OBJECT ADD_CONSTRAINT FK_NAME FK COLUMN OWNER_OBJECT COLUMN FIM_COMANDO {
80+ | ALTER_TABLE OWNER_OBJECT ADD_CONSTRAINT FK_NAME constraint COLUMN OWNER_OBJECT COLUMN FIM_COMANDO {
6881 char *owner;
6982 char *object;
7083 owner = strtok ($2 ," ." );
7184 char str[1024 ];
72- strcpy (str," select case count(1) when 1 then 'ok' else 'error' end from dba_constraints t where t.owner='" );
85+ strcpy (str," select '" );
86+ strcat (str,$4 );
87+ strcat (str," ' obj, case count(1) when 1 then 'ok' else 'error' end as status from dba_constraints t where t.owner='" );
7388 strcat (str,owner);
7489 strcat (str," ' and t.constraint_name='" );
7590 strcat (str,$4 );
76- strcat (str," '; " );
91+ strcat (str," ' union all " );
7792 printf (" \n --ADD CONSTRAINT FK\n %s\n " ,str);
78- // printf("select case count(1) when 1 then 'ok' else 'error' end from dba_constraints t where t.owner='%s' and t.constraint_name='%s';\n",owner,$4);
93+
94+ }
95+
96+ | ALTER_TABLE OWNER_OBJECT ADD_CONSTRAINT PK_NAME constraint COLUMN FIM_COMANDO {
97+ char *owner;
98+ char *object;
99+ owner = strtok ($2 ," ." );
100+ char str[1024 ];
101+ strcpy (str," select '" );
102+ strcat (str,$4 );
103+ strcat (str," ' as obj, case count(1) when 1 then 'ok' else 'error' end as status from dba_constraints t where t.owner='" );
104+ strcat (str,owner);
105+ strcat (str," ' and t.constraint_name='" );
106+ strcat (str,$4 );
107+ strcat (str," ' union all " );
108+ printf (" \n --ADD CONSTRAINT PK\n %s\n " ,str);
109+ }
110+
111+ | ALTER_TABLE OWNER_OBJECT ADD_CONSTRAINT UK_NAME constraint COLUMN FIM_COMANDO {
112+ char *owner;
113+ char *object;
114+ owner = strtok ($2 ," ." );
115+ char str[1024 ];
116+ strcpy (str," select '" );
117+ strcat (str,$4 );
118+ strcat (str," ' as obj, case count(1) when 1 then 'ok' else 'error' end as status from dba_constraints t where t.owner='" );
119+ strcat (str,owner);
120+ strcat (str," ' and t.constraint_name='" );
121+ strcat (str,$4 );
122+ strcat (str," ' union all " );
123+ printf (" \n --ADD CONSTRAINT UK\n %s\n " ,str);
79124 }
80125
81126 | ALTER_TABLE OWNER_OBJECT COLUMN FIM_COMANDO { char *owner;
82127 char *object;
83128 owner = strtok ($2 ," ." );
84129 object = strtok (NULL , " ." );
85130 char str[1024 ];
86- strcpy (str," select case count(1) when 1 then 'ok' else 'error' end from dba_tab_columns t where t.owner='" );
131+ strcpy (str," select '" );
132+ strcat (str,object);
133+ strcat (str," -" );
134+ strcat (str,$3 );
135+ strcat (str," ' as obj, case count(1) when 1 then 'ok' else 'error' end from dba_tab_columns t where t.owner='" );
87136 strcat (str,owner);
88137 strcat (str," ' and t.table_name='" );
89138 strcat (str,object);
90- strcat (str," ' and t.column_name='" );
139+ strcat (str," ' and t.column_name=trim( '" );
91140 strcat (str,$3 );
92- strcat (str," '; " );
141+ strcat (str," ') union all " );
93142 printf (" \n --ADD COLUMN\n %s\n " ,str);
94- // printf("select case count(1) when 1 then 'ok' else 'error' end from dba_tab_columns t where t.owner='%s' and t.table_name='%s' and t.column_name='%s';\n",owner,object,$3);
143+
95144 }
96145
97146 | ALTER_TABLE OWNER_OBJECT ADD_CONSTRAINT CHECK_NAME CHECK COLUMN FIM_COMANDO {
98147 char *owner;
99148 char *object;
100149 owner = strtok ($2 ," ." );
101150 char str[1024 ];
102- strcpy (str," select case count(1) when 1 then 'ok' else 'error' end from dba_constraints t where t.owner='" );
151+ strcpy (str," select '" );
152+ strcat (str,$4 );
153+ strcat (str," ' as obj, case count(1) when 1 then 'ok' else 'error' end from dba_constraints t where t.owner='" );
103154 strcat (str,owner);
104155 strcat (str," ' and t.constraint_name='" );
105156 strcat (str,$4 );
106- strcat (str," ';" );
107- printf (" \n --ADD CHECK CONSTRAINT\n %s\n " ,str);
108- // printf("select case count(1) when 1 then 'ok' else 'error' end from dba_constraints t where t.owner='%s' and t.constraint_name='%s';\n",owner,$4);
157+ strcat (str," ' union all " );
158+ printf (" \n --ADD CHECK CONSTRAINT\n %s\n " ,str);
109159 }
110160
111161
@@ -128,5 +178,5 @@ int main(int argc, char **argv)
128178/* função usada pelo bison para dar mensagens de erro */
129179void yyerror (char *msg)
130180{
131- fprintf (stderr, " erro : %s \n " , msg);
181+ fprintf (stderr, " \ERRO : %s \n " , msg);
132182}
0 commit comments