mirror of
https://github.com/mdbtools/mdbtools.git
synced 2026-01-02 12:27:09 +08:00
query planner stuff
some gcc -Wall fixes added suport for _ in identifier names in SQL gmdb2 manual additions
This commit is contained in:
@@ -23,9 +23,9 @@
|
||||
|
||||
#include "mdbtools.h"
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int rows;
|
||||
int i, j;
|
||||
MdbHandle *mdb;
|
||||
MdbCatalogEntry *entry;
|
||||
|
||||
@@ -21,11 +21,10 @@
|
||||
#include "mdbtools.h"
|
||||
|
||||
#define is_text_type(x) (x==MDB_TEXT || x==MDB_MEMO || x==MDB_SDATETIME)
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int rows;
|
||||
int i, j;
|
||||
unsigned char buf[2048];
|
||||
MdbHandle *mdb;
|
||||
MdbCatalogEntry *entry;
|
||||
MdbTableDef *table;
|
||||
|
||||
@@ -29,6 +29,7 @@ void copy_header (FILE *f)
|
||||
fprintf (f, "/******************************************************************/\n");
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int i, j, k;
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
/* generates an array of type FOO */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define FILENAMESIZE 128
|
||||
#define BUFFERSIZE 4096
|
||||
@@ -36,6 +38,7 @@ void copy_header (FILE *f)
|
||||
fprintf (f, "/******************************************************************/\n");
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
char txt_filename [FILENAMESIZE];
|
||||
|
||||
@@ -20,9 +20,10 @@
|
||||
|
||||
#include "mdbtools.h"
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int i, j, k;
|
||||
int i, k;
|
||||
MdbHandle *mdb;
|
||||
MdbCatalogEntry *entry;
|
||||
MdbTableDef *table;
|
||||
|
||||
@@ -33,6 +33,8 @@ int headers = 1;
|
||||
int footers = 1;
|
||||
int pretty_print = 1;
|
||||
char *delimiter;
|
||||
int showplan = 0;
|
||||
int noexec = 0;
|
||||
|
||||
#ifndef HAVE_READLINE
|
||||
char *readline(char *prompt)
|
||||
@@ -88,15 +90,78 @@ do_set_cmd(MdbSQL *sql, char *s)
|
||||
} else {
|
||||
printf("Unknown stats option %s\n", level2);
|
||||
}
|
||||
} else if (!strcmp(level1,"showplan")) {
|
||||
level2 = strtok(NULL, " \t");
|
||||
if (!strcmp(level2,"on")) {
|
||||
showplan=1;
|
||||
} else if (!strcmp(level2,"off")) {
|
||||
showplan=0;
|
||||
} else {
|
||||
printf("Unknown showplan option %s\n", level2);
|
||||
}
|
||||
} else if (!strcmp(level1,"noexec")) {
|
||||
level2 = strtok(NULL, " \t");
|
||||
if (!strcmp(level2,"on")) {
|
||||
noexec=1;
|
||||
} else if (!strcmp(level2,"off")) {
|
||||
noexec=0;
|
||||
} else {
|
||||
printf("Unknown showplan option %s\n", level2);
|
||||
}
|
||||
} else {
|
||||
printf("Unknown set command %s\n", level1);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
read_file(char *s, int line, int *bufsz, char *mybuf)
|
||||
{
|
||||
char *fname;
|
||||
FILE *in;
|
||||
char buf[256];
|
||||
int cursz = 0;
|
||||
int lines = 0;
|
||||
|
||||
fname = s;
|
||||
while (*fname && *fname==' ') fname++;
|
||||
|
||||
if (! (in = fopen(fname, "r"))) {
|
||||
fprintf(stderr,"Unable to open file %s\n", fname);
|
||||
mybuf[0]=0;
|
||||
return 0;
|
||||
}
|
||||
while (fgets(buf, 255, in)) {
|
||||
cursz += strlen(buf) + 1;
|
||||
if (cursz > (*bufsz)) {
|
||||
(*bufsz) *= 2;
|
||||
mybuf = (char *) realloc(mybuf, *bufsz);
|
||||
}
|
||||
strcat(mybuf, buf);
|
||||
add_history(buf);
|
||||
strcat(mybuf, "\n");
|
||||
lines++;
|
||||
printf("%d => %s",line+lines, buf);
|
||||
}
|
||||
return lines;
|
||||
}
|
||||
void
|
||||
run_query(MdbSQL *sql, char *mybuf)
|
||||
{
|
||||
MdbTableDef *table;
|
||||
|
||||
if (!parse(sql, mybuf) && sql->cur_table) {
|
||||
if (showplan) {
|
||||
table = sql->cur_table;
|
||||
if (tabl->sarg_tree) mdb_sql_dump_node(table->sarg_tree, 0);
|
||||
if (sql->cur_table->strategy == MDB_TABLE_SCAN)
|
||||
printf("Table scanning %s\n", table->name);
|
||||
else
|
||||
printf("Index scanning %s using %s\n", table->name, table->scan_idx->name);
|
||||
}
|
||||
if (noexec) {
|
||||
mdb_sql_reset(sql);
|
||||
return;
|
||||
}
|
||||
mdbsql_bind_all(sql);
|
||||
if (pretty_print)
|
||||
dump_results_pp(sql);
|
||||
@@ -233,6 +298,7 @@ void myexit(int r)
|
||||
free(delimiter);
|
||||
exit(r);
|
||||
}
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
char *s;
|
||||
@@ -303,6 +369,8 @@ FILE *in = NULL, *out = NULL;
|
||||
} else {
|
||||
sprintf(prompt,"1 => ");
|
||||
s=readline(prompt);
|
||||
if (!strcmp(s,"exit") || !strcmp(s,"quit") || !strcmp(s,"bye"))
|
||||
done = 1;
|
||||
}
|
||||
while (!done) {
|
||||
if (line==1 && !strncmp(s,"set ", 4)) {
|
||||
@@ -315,6 +383,8 @@ FILE *in = NULL, *out = NULL;
|
||||
} else if (!strcmp(s,"reset")) {
|
||||
line = 0;
|
||||
mybuf[0]='\0';
|
||||
} else if (!strncmp(s,":r",2)) {
|
||||
line += read_file(&s[2], line, &bufsz, mybuf);
|
||||
} else {
|
||||
while (strlen(mybuf) + strlen(s) > bufsz) {
|
||||
bufsz *= 2;
|
||||
@@ -346,6 +416,8 @@ FILE *in = NULL, *out = NULL;
|
||||
mdb_sql_exit(sql);
|
||||
|
||||
myexit(0);
|
||||
|
||||
return 0; /* make gcc -Wall happy */
|
||||
}
|
||||
#else
|
||||
int main(int argc, char **argv)
|
||||
|
||||
@@ -20,13 +20,12 @@
|
||||
|
||||
#include "mdbtools.h"
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int i, j, k;
|
||||
int i;
|
||||
MdbHandle *mdb;
|
||||
MdbCatalogEntry *entry;
|
||||
MdbTableDef *table;
|
||||
MdbColumn *col;
|
||||
char *delimiter = NULL;
|
||||
int line_break=0;
|
||||
int skip_sys=1;
|
||||
|
||||
@@ -20,21 +20,11 @@
|
||||
|
||||
#include "mdbtools.h"
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int rows;
|
||||
int i, j;
|
||||
unsigned char buf[2048];
|
||||
MdbHandle *mdb;
|
||||
MdbCatalogEntry entry;
|
||||
MdbTableDef *table;
|
||||
MdbColumn *col;
|
||||
/* doesn't handle tables > 256 columns. Can that happen? */
|
||||
char *bound_values[256];
|
||||
char *delimiter = ",";
|
||||
char header_row = 1;
|
||||
char quote_text = 1;
|
||||
int opt;
|
||||
|
||||
/*
|
||||
** optind is now the position of the first non-option arg,
|
||||
|
||||
@@ -18,16 +18,10 @@
|
||||
|
||||
#include "mdbtools.h"
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
off_t offset=0;
|
||||
int fd, i, j;
|
||||
char xdigit;
|
||||
short digit;
|
||||
struct stat status;
|
||||
int rows, cur, off;
|
||||
unsigned char buf[2048];
|
||||
MdbHandle *mdb;
|
||||
MdbHandle *mdb;
|
||||
|
||||
|
||||
if (argc<2) {
|
||||
|
||||
@@ -20,16 +20,13 @@
|
||||
|
||||
#include "mdbtools.h"
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int rows;
|
||||
int i;
|
||||
unsigned char buf[2048];
|
||||
MdbHandle *mdb;
|
||||
MdbCatalogEntry *entry;
|
||||
MdbTableDef *table;
|
||||
GList *l;
|
||||
|
||||
|
||||
if (argc<2) {
|
||||
fprintf(stderr,"Usage: %s <file> <table>\n",argv[0]);
|
||||
|
||||
@@ -20,15 +20,10 @@
|
||||
|
||||
#include "mdbtools.h"
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int rows;
|
||||
int i;
|
||||
unsigned char buf[2048];
|
||||
MdbHandle *mdb;
|
||||
MdbCatalogEntry entry;
|
||||
MdbTableDef *table;
|
||||
GList *l;
|
||||
int j;
|
||||
int page, start, stop;
|
||||
|
||||
|
||||
@@ -22,9 +22,10 @@
|
||||
extern char idx_to_text[];
|
||||
|
||||
void walk_index(MdbHandle *mdb, MdbIndex *idx);
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int rows;
|
||||
int i, j;
|
||||
MdbHandle *mdb;
|
||||
MdbCatalogEntry *entry;
|
||||
@@ -84,6 +85,7 @@ page_name(int page_type)
|
||||
case 0x03: return "Index"; break;
|
||||
case 0x04: return "Index Leaf"; break;
|
||||
case 0x05: return "Page Usage"; break;
|
||||
default: return "Unknown";
|
||||
}
|
||||
}
|
||||
void check_row(MdbHandle *mdb, MdbIndex *idx, guint32 pg, int row, unsigned char *idxrow, int len)
|
||||
@@ -94,7 +96,7 @@ void check_row(MdbHandle *mdb, MdbIndex *idx, guint32 pg, int row, unsigned char
|
||||
int row_start, row_end;
|
||||
MdbColumn *col;
|
||||
guchar buf[256], key[256];
|
||||
int elem, pos;
|
||||
int elem;
|
||||
MdbTableDef *table = idx->table;
|
||||
|
||||
fmt = mdb->fmt;
|
||||
@@ -127,7 +129,6 @@ void
|
||||
walk_index(MdbHandle *mdb, MdbIndex *idx)
|
||||
{
|
||||
int start, len;
|
||||
unsigned char byte;
|
||||
guint32 pg;
|
||||
guint16 row;
|
||||
MdbHandle *mdbidx;
|
||||
|
||||
@@ -18,15 +18,14 @@
|
||||
|
||||
#include "mdbtools.h"
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int rows;
|
||||
int i;
|
||||
unsigned char buf[2048];
|
||||
MdbHandle *mdb;
|
||||
MdbCatalogEntry entry;
|
||||
|
||||
#if 0
|
||||
int i;
|
||||
MdbCatalogEntry entry;
|
||||
|
||||
if (argc<2) {
|
||||
fprintf(stderr,"Usage: %s <file> <table>\n",argv[0]);
|
||||
exit(1);
|
||||
|
||||
@@ -22,15 +22,13 @@
|
||||
|
||||
void dump_ole(MdbTableDef *table, char *colname, char *sargname);
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int rows;
|
||||
int i;
|
||||
unsigned char buf[2048];
|
||||
MdbHandle *mdb;
|
||||
MdbCatalogEntry *entry;
|
||||
MdbTableDef *table;
|
||||
GList *l;
|
||||
char *dot, *colname, *tabname;
|
||||
char *sargname = NULL;
|
||||
|
||||
|
||||
@@ -20,14 +20,12 @@
|
||||
|
||||
#include "mdbtools.h"
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int rows;
|
||||
int i;
|
||||
unsigned char buf[2048];
|
||||
MdbHandle *mdb;
|
||||
MdbCatalogEntry *entry;
|
||||
GList *l;
|
||||
int found = 0;
|
||||
|
||||
|
||||
|
||||
@@ -22,17 +22,15 @@
|
||||
|
||||
void read_to_row(MdbTableDef *table, char *sargname);
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int rows;
|
||||
int i;
|
||||
unsigned char buf[2048];
|
||||
MdbHandle *mdb;
|
||||
MdbCatalogEntry *entry;
|
||||
MdbTableDef *table;
|
||||
GList *l;
|
||||
char *dot, *colname, *tabname;
|
||||
char *colop, *colval;
|
||||
char *colname, *tabname;
|
||||
char *colval;
|
||||
char *sargname = NULL;
|
||||
char *updstr = NULL;
|
||||
unsigned char data[255];
|
||||
|
||||
Reference in New Issue
Block a user