char get_char(void) { unsigned int col = read_column(); unsigned int row = read_row(); unsigned int coords = row | col; switch (coords) { case 0x77: PORTH = 0; return "11111100"; break; case 0x7B: PORTH = 1; return "01100000"; break; case 0x7D: PORTH = 2; return "11011010"; break; case 0x7E: PORTH = 3; return "11110010"; break; case 0xB7: PORTH = 4; return "01100110"; break; case 0xBB: PORTH = 5; return "10110110"; break; case 0xBD: PORTH = 6; return "10111110"; break; case 0xBE: PORTH = 7; return "11100000"; break; case 0xD7: PORTH = 8; return "11111110"; break; case 0xDB: PORTH = 9; return "11110110"; break; /* case 0xDD: PORTH = 10; return 'A'; break; case 0xDE: PORTH = 11; return 'B'; break; case 0xE7: PORTH = 12; return 'C'; break; case 0xEB: PORTH = 13; return 'D'; break; case 0xED: PORTH = 14; return 'E'; break; case 0xEE: PORTH = 15; return 'F'; break; default: PORTH = 0; return ' '; */ } }
int main(int argc, char *argv[]){ char buffer[64]; char *c; #if DEBUG printf("[DEBUG MODE]\n"); printf("Compile: %s %s\n", __DATE__, __TIME__); #endif printf("Version: %d.%d.%d\n", VER_REL, VER_MAJOR, VER_MINOR); printf("Database> "); dbfile_t *mdb = open_dbfile(get_input(buffer, 32, TRUE)); commit_db(mdb); for(;;){ printf("valca> "); c = get_input(buffer, 64, TRUE); if(!strcmp("quit", c)||!strcmp("exit", c)||!strcmp("\\q", c)){ break; } if(!strcmp("help", c)){ printf("COMMANDS:\n"); printf("COMMIT Commit file to disk\n"); printf("COUNT Show row count\n"); printf("TRUNCATE Delete all keys\n"); printf("UPDATE Update key value\n"); printf("INSERT Insert key\n"); printf("DELETE \\\n"); printf(" COLUMN Delete column\n"); printf(" ROW Delete row\n"); printf("ALTER \\\n"); printf(" NAME Change column name\n"); printf(" LEFT Shift column left\n"); printf(" RIGHT Shift column right\n"); printf("SELECT Select value from\n"); printf("ADD \\\n"); printf(" COLUMN Add column\n"); printf("SHOW \\\n"); printf(" COLUMNS Show all columns\n"); printf(" TREE Show storage tree\n"); printf(" STATUS Show database info\n"); printf(" TABLE Show dataset as table\n"); printf("FREE \\\n"); printf(" COLUMNS Columns freelist\n"); printf(" NODE Node freelist\n"); printf(" DATAFIELDS Payload freelist\n"); printf("EXIT Quit the shell\n"); } if(!strcmp("commit", c)){ commit_db(mdb); } if(!strcmp("count", c)){ printf("Total rows: %d\n", mdb->k_cnt); } if(!strcmp("truncate", c)){ truncate_root(mdb); } if(!strcmp("update", c)){ char tmp[32]; printf(">psid: "); c = get_input(tmp, 32, FALSE); int key = atoi(tmp); char tmpcolname[32]; printf(">column: "); c = get_input(tmpcolname, 32, FALSE); int idx = get_column_idx(mdb, tmpcolname); printf(">value: "); c = get_input(tmp, 32, FALSE); change(mdb, key, (void*)tmp, idx); } if(!strcmp("insert", c)){ if(!mdb->c_cnt){ printf("Cannot insert without column\n"); }else{ char tmp[32]; printf(">psid[%d]: ", mdb->seq_cnt); c = get_input(tmp, 32, FALSE); int key; if(!strlen(tmp)){ key = mdb->seq_cnt++; }else{ key = atoi(tmp); } column_t col; read_column(mdb, mdb->data.c_root, &col); printf(">%s<%s(%d)>: ", col.name, get_datatype_name(col.d_type), col.maxsize); c = get_input(tmp, 32, FALSE); if(get_datatype(col.d_type).size == -1) tmp[col.maxsize] = '\0'; if(col.usign) printf("<> %d\n", atoi(tmp)); //if(atoi()) if(insert_key(mdb, key, (void*)tmp) == SUCCESS){ result_t rs = search_key(mdb, key); if(rs.rstat == SUCCESS){ char tmp[32]; int i = 1; while(col.c_next != EMPTY){ read_column(mdb, col.c_next, &col); printf(">%s<%s(%d)>: ", col.name, get_datatype_name(col.d_type), col.maxsize); c = get_input(tmp, 32, FALSE); add_field(mdb, rs.fpos, rs.idx, (void*)tmp, i); i++; } } } } } if(!strcmp("delete", c)){ printf(">"); c = get_input(buffer, 64, TRUE); if(!strcmp("column", c)){ char tmpcolname[32]; printf(">column: "); c = get_input(tmpcolname, 32, FALSE); int idx = get_column_idx(mdb, tmpcolname); delete_column(mdb, idx); } if(!strcmp("row", c)){ char tmp[32]; printf(">psid: "); c = get_input(tmp, 32, FALSE); int key = atoi(tmp); result_t rs = search_key(mdb, key); if(rs.rstat == SUCCESS){ int i; for(i=mdb->c_cnt; i>1; i--){ delete_field(mdb, rs.fpos, rs.idx, (i-1)); } delete_key(mdb, key); } } } if(!strcmp("alter", c)){ printf(">"); c = get_input(buffer, 64, TRUE); if(!strcmp("name", c)){ printf(">column: "); char tmpcolname[32]; c = get_input(tmpcolname, 32, FALSE); int idx = get_column_idx(mdb, tmpcolname); printf(">new name: "); c = get_input(tmpcolname, 32, FALSE); rename_column(mdb, tmpcolname, idx); } if(!strcmp("left", c)){ char tmpcolname[32]; printf(">column: "); c = get_input(tmpcolname, 32, FALSE); int idx = get_column_idx(mdb, tmpcolname); shift_column_left(mdb, idx); } if(!strcmp("right", c)){ char tmpcolname[32]; printf(">column: "); c = get_input(tmpcolname, 32, FALSE); int idx = get_column_idx(mdb, tmpcolname); shift_column_right(mdb, idx); } } if(!strcmp("select", c)){ printf(">"); char tmp[16]; printf(">psid: "); c = get_input(tmp, 32, FALSE); int key = atoi(tmp); result_t rs = search_key(mdb, key); if(rs.rstat == SUCCESS){ found(mdb, rs.fpos, rs.idx); } } if(!strcmp("add", c)){ printf(">"); c = get_input(buffer, 64, TRUE); if(!strcmp("column", c)){ char colname[32]; DTYPE type; int size; bool usign = FALSE; int idx; printf(">name: "); c = get_input(colname, 32, FALSE); printf(">type: "); char tmptype[32]; c = get_input(tmptype, 32, FALSE); type = get_datatype_idx(tmptype); if(type == EMPTY){ printf("Unkown datatype\n"); continue; } size = get_datatype(type).size; if(size == EMPTY){ printf(">size: "); char tmpsize[16]; c = get_input(tmpsize, 16, FALSE); size = atoi(tmpsize); } if(get_datatype(type).signness){ printf(">unsigned: "); char tmpsign[4]; c = get_input(tmpsign, 4, FALSE); if(!strcmp("y", tmpsign)){ usign = TRUE; } } printf(">before: "); char tmpcolname[32]; c = get_input(tmpcolname, 32, FALSE); idx = get_column_idx(mdb, tmpcolname); add_column(mdb, colname, size, type, usign, idx); } } if(!strcmp("show", c)){ printf(">"); c = get_input(buffer, 64, TRUE); if(!strcmp("columns", c)){ printf("Idx Offset Psid Columnname Size Type Unsigned Next\n"); printf("--------------------------------------------------------------------------\n"); print_column(mdb, mdb->data.c_root, 0); } if(!strcmp("tree", c)){ print_tree(mdb, mdb->data.n_root, 0); } if(!strcmp("status", c)){ print_status(mdb); } if(!strcmp("table", c)){ print_table(mdb); } } if(!strcmp("free", c)){ printf(">"); c = get_input(buffer, 64, TRUE); if(!strcmp("columns", c)){ printf("Idx Offset Psid Columnname Size Type Unsigned Next\n"); printf("--------------------------------------------------------------------------\n"); print_column(mdb, mdb->data.c_free, 0); } if(!strcmp("node", c)){ print_tree(mdb, mdb->data.n_free, 0); } if(!strcmp("datafields", c)){ print_datafield(mdb, mdb->data.d_free); } } } commit_db(mdb); close_dbfile(mdb->vfp); close_db(mdb); return 0; }
void mysql_result::read(const char *id, short &x) { read_column(id, x); }
void mysql_result::read(const char *id, std::string &x) { read_column(id, x); }
void mysql_result::read(const char *id, varchar_base &x) { read_column(id, x); }
void mysql_result::read(const char *id, double &x) { read_column(id, x); }
void mysql_result::read(const char *id, unsigned long &x) { read_column(id, x); }