Fixed canonical query tests

This commit is contained in:
Markus Makela
2014-11-03 12:20:25 +02:00
parent ca816743e8
commit e7feba6964
2 changed files with 67 additions and 110 deletions

View File

@ -19,104 +19,60 @@ static char* server_options[] = {
const int num_elements = (sizeof(server_options) / sizeof(char *)) - 1; const int num_elements = (sizeof(server_options) / sizeof(char *)) - 1;
static char* server_groups[] = { static char* server_groups[] = {
"embedded", "embedded",
"server", "server",
"server", "server",
NULL NULL
}; };
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
int fdin,fdout,i=0,fnamelen,fsz,lines = 0; unsigned int psize;
unsigned int psize; GWBUF* qbuff;
GWBUF** qbuff; char *tok;
char *qin, *outnm, *buffer, *tok; char readbuff[4092];
FILE* infile;
FILE* outfile;
if(argc != 3){
printf("Usage: canonizer <input file> <output file>\n");
return 1;
}
if(argc != 3){ if(mysql_library_init(num_elements, server_options, server_groups)){
printf("Usage: canonizer <input file> <output file>\n"); printf("Embedded server init failed.\n");
return 1; return 1;
} }
infile = fopen(argv[1],"rb");
outfile = fopen(argv[2],"wb");
if(infile == NULL || outfile == NULL){
printf("Opening files failed.\n");
return 1;
}
while(!feof(infile))
{
bool failed = mysql_library_init(num_elements, server_options, server_groups); fgets(readbuff,4092,infile);
psize = strlen(readbuff);
if(failed){ qbuff = gwbuf_alloc(psize + 7);
printf("Embedded server init failed.\n"); *(qbuff->sbuf->data + 0) = (unsigned char)psize;
return 1; *(qbuff->sbuf->data + 1) = (unsigned char)(psize>>8);
} *(qbuff->sbuf->data + 2) = (unsigned char)(psize>>16);
*(qbuff->sbuf->data + 4) = 0x03;
fnamelen = strlen(argv[1]) + 16; strcpy((char*)(qbuff->start + 5),readbuff);
fdin = open(argv[1],O_RDONLY); parse_query(qbuff);
fsz = lseek(fdin,0,SEEK_END); tok = skygw_get_canonical(qbuff);
lseek(fdin,0,SEEK_SET); fprintf(outfile,"%s\n",tok);
free(tok);
if(!(buffer = malloc(sizeof(char)*fsz + 1))){ gwbuf_free(qbuff);
printf("Error: Failed to allocate memory.");
return 1; }
} fclose(infile);
fclose(outfile);
read(fdin,buffer,fsz); mysql_library_end();
buffer[fsz] = '\0';
return 0;
i = 0;
int bsz = 4,z=0;
qbuff = calloc(bsz,sizeof(GWBUF*));
tok = strtok(buffer,"\n");
while(tok){
if(i>=bsz){
GWBUF** tmp = calloc(bsz*2,sizeof(GWBUF*));
if(!tmp){
printf("Error: Failed to allocate memory.");
return 1;
}
for(z=0;z<bsz;z++){
tmp[z] = qbuff[z];
}
free(qbuff);
qbuff = tmp;
bsz *= 2;
}
if(strlen(tok) > 0){
qin = strdup(tok);
psize = strlen(qin);
qbuff[i] = gwbuf_alloc(psize + 6);
*(qbuff[i]->sbuf->data + 0) = (unsigned char)psize;
*(qbuff[i]->sbuf->data + 1) = (unsigned char)(psize>>8);
*(qbuff[i]->sbuf->data + 2) = (unsigned char)(psize>>16);
*(qbuff[i]->sbuf->data + 4) = 0x03;
memcpy(qbuff[i]->sbuf->data + 5,qin,psize);
*(qbuff[i]->sbuf->data + 5 + psize) = 0x00;
tok = strtok(NULL,"\n\0");
free(qin);
i++;
}
}
fdout = open(argv[2],O_TRUNC|O_CREAT|O_WRONLY,S_IRWXU|S_IXGRP|S_IXOTH);
for(i = 0;i<bsz;i++){
if(qbuff[i]){
parse_query(qbuff[i]);
tok = skygw_get_canonical(qbuff[i]);
write(fdout,tok,strlen(tok));
write(fdout,"\n",1);
gwbuf_free(qbuff[i]);
}
}
free(qbuff);
free(buffer);
close(fdin);
close(fdout);
return 0;
} }

View File

@ -1,17 +1,18 @@
select md5("?") =?, sleep(?), rand(?) select md5("?") =?, sleep(?), rand(?);
select * from my1 where md5("?") =? select * from my1 where md5("?") =?;
select md5("?") =? select md5("?") =?;
select * from my1 where md5("?") =? select * from my1 where md5("?") =?;
select sleep(?) select sleep(?);
select * from tst where lname='?' select * from tst where lname='?';
select ?,?,?,?,?,? from tst select ?,?,?,?,?,? from tst;
select * from tst where fname like '?' select * from tst where fname like '?';
select * from tst where lname like '?' order by fname select * from tst where lname like '?' order by fname;
insert into tst values ("?","?"),("?",?),("?","?") insert into tst values ("?","?"),("?",?),("?","?");
drop table if exists tst drop table if exists tst;
create table tst(fname varchar(30), lname varchar(30)) create table tst(fname varchar(30), lname varchar(30));
update tst set lname="?" where fname like '?' or lname like '?' update tst set lname="?" where fname like '?' or lname like '?';
delete from tst where lname like '?' and fname like '?' delete from tst where lname like '?' and fname like '?';
select ? from tst where fname='?' or lname like '?' select ? from tst where fname='?' or lname like '?';
select ?,?,?,? from tst where name='?' or name='?' or name='?' or name='?' select ?,?,?,? from tst where name='?' or name='?' or name='?' or name='?';
select count(?),count(?),count(?),count(?),count (?),count(?) from tst select count(?),count(?),count(?),count(?),count (?),count(?) from tst;
select count(?),count(?),count(?),count(?),count (?),count(?) from tst;