int existeAtributo(char *nomeTabela, column *c){ int erro, x, count; struct fs_objects objeto; memset(&objeto, 0, sizeof(struct fs_objects)); tp_table *tabela; tp_buffer *bufferpoll; column *aux = NULL; column *pagina = NULL; if(iniciaAtributos(&objeto, &tabela, &bufferpoll, nomeTabela) != SUCCESS) return ERRO_DE_PARAMETRO; erro = SUCCESS; for(x = 0; erro == SUCCESS; x++) erro = colocaTuplaBuffer(bufferpoll, x, tabela, objeto); pagina = getPage(bufferpoll, tabela, objeto, 0); if(pagina == NULL){ pagina = getPage(bufferpoll, tabela, objeto, 1); } if(pagina != NULL){ count = 0; for(x = 0; x < objeto.qtdCampos; x++){ if (!pagina[x].nomeCampo) continue; for(aux = c; aux != NULL; aux=aux->next) { if (!aux->nomeCampo) continue; if(objcmp(pagina[x].nomeCampo, aux->nomeCampo) == 0) count++; } } if(count != objeto.qtdCampos){ free(pagina); free(bufferpoll); free(tabela); return ERRO_DE_PARAMETRO; } } free(pagina); free(bufferpoll); free(tabela); return SUCCESS; }
int verificaChaveFK(char *nomeTabela,column *c, char *nomeCampo, char *valorCampo, char *tabelaApt, char *attApt){ int x,j, erro, page; char str[20]; char dat[5] = ".dat"; struct fs_objects objeto; tp_table *tabela; tp_buffer *bufferpoll; column *pagina = NULL; strcpylower(str, tabelaApt); strcat(str, dat); //Concatena e junta o nome com .dat erro = existeAtributo(nomeTabela, c); /*if(erro != SUCCESS ) return ERRO_DE_PARAMETRO;*/ //if(existeAtributo(tabelaApt, c)) //return ERRO_CHAVE_ESTRANGEIRA; if(iniciaAtributos(&objeto, &tabela, &bufferpoll, tabelaApt) != SUCCESS) { free(bufferpoll); free(tabela); return ERRO_DE_PARAMETRO; } erro = SUCCESS; for(x = 0; erro == SUCCESS; x++) erro = colocaTuplaBuffer(bufferpoll, x, tabela, objeto); for (page = 0; page < PAGES; page++) { if (pagina) free(pagina); pagina = getPage(bufferpoll, tabela, objeto, page); if (!pagina) break; for(j = 0; j < objeto.qtdCampos * bufferpoll[page].nrec; j++){ if (pagina[j].nomeCampo) { if(objcmp(pagina[j].nomeCampo, attApt) == 0){ if(pagina[j].tipoCampo == 'S'){ if(objcmp(pagina[j].valorCampo, valorCampo) == 0){ free(pagina); free(bufferpoll); free(tabela); return SUCCESS; } } else if(pagina[j].tipoCampo == 'I'){ int *n = (int *)&pagina[j].valorCampo[0]; if(*n == atoi(valorCampo)){ free(pagina); free(bufferpoll); free(tabela); return SUCCESS; } } else if(pagina[j].tipoCampo == 'D'){ double *nn = (double *)&pagina[j].valorCampo[0]; if(*nn == atof(valorCampo)){ free(pagina); free(bufferpoll); free(tabela); return SUCCESS; } } else if(pagina[j].tipoCampo == 'C'){ if(pagina[j].valorCampo == valorCampo){ free(pagina); free(bufferpoll); free(tabela); return SUCCESS; } } else { free(pagina); free(bufferpoll); free(tabela); return ERRO_CHAVE_ESTRANGEIRA; } } } } } if (pagina) free(pagina); free(bufferpoll); free(tabela); return ERRO_CHAVE_ESTRANGEIRA; }