Skip to content

Commit e789932

Browse files
unknownunknown
authored andcommitted
TODO:\n- Adicionar SEQUENCE\n- Desconsiderar fluxo de caracteres acentuados\n
1 parent 390af9b commit e789932

File tree

4 files changed

+366
-19
lines changed

4 files changed

+366
-19
lines changed

sqlscriptparser.lex

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
"ALTER TABLE" { yylval.sval = strdup(yytext); return ALTER_TABLE;}
1010
[A-Z]+\_ADM\.[A-Z\_0-9]+ { yylval.sval = strdup(yytext); return OWNER_OBJECT;}
1111
[A-Z\_]+\_FK { yylval.sval = strdup(yytext); return FK_NAME;}
12+
[A-Z\_]+\_PK { yylval.sval = strdup(yytext); return PK_NAME;}
13+
[A-Z\_]+\_UK { yylval.sval = strdup(yytext); return UK_NAME;}
1214
"FOREIGN KEY" { yylval.sval = strdup(yytext); return FK;}
15+
"PRIMARY KEY" { yylval.sval = strdup(yytext); return PK;}
1316
[A-Z\_]+\_CK[0-9]* { yylval.sval = strdup(yytext); return CHECK_NAME;}
1417
[ ]+CHECK[ ]* { yylval.sval = strdup(yytext); return CHECK;}
1518
"ADD CONSTRAINT" { yylval.sval = strdup(yytext); return ADD_CONSTRAINT;}

sqlscriptparser.y

Lines changed: 69 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
3848
instrucao: 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 */
129179
void yyerror(char *msg)
130180
{
131-
fprintf(stderr, "erro: %s \n", msg);
181+
fprintf(stderr, "\ERRO: %s \n", msg);
132182
}

teste.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11

2+
CREATE TABLE SAFEPAY_ADM.CREATION_TABLE_TESTE (COL1 NUMBER, COL2 NUMBER);
3+
24
DECLARE
35
RESOURCE_BUSY EXCEPTION;
46
PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -00054);
@@ -118,3 +120,5 @@ END;
118120
/
119121

120122

123+
ALTER TABLE SAFEPAY_ADM.OUTBOUND_CONFIG_DEF ADD CONSTRAINT OUTBCONFDEF_PK PRIMARY KEY (IDT_OUTBOUND_CONFIG_DEF) USING INDEX TABLESPACE TSISAFEPAY01 ;
124+

0 commit comments

Comments
 (0)