コード例 #1
0
ファイル: catalog.c プロジェクト: JeremiasE/KFormula
void 
mdb_dump_catalog(MdbHandle *mdb, int obj_type)
{
	unsigned int i;
	MdbCatalogEntry *entry;

	mdb_read_catalog(mdb, obj_type);
	for (i=0;i<mdb->num_catalog;i++) {
                entry = g_ptr_array_index(mdb->catalog,i);
		if (obj_type==MDB_ANY || entry->object_type==obj_type) {
			fprintf(stdout,"Type: %-10s Name: %-18s T pg: %04x KKD pg: %04x row: %2d\n",
			mdb_get_objtype_string(entry->object_type),
			entry->object_name,
			(unsigned int) entry->table_pg,
			(unsigned int) entry->kkd_pg,
			entry->kkd_rowid);
		}
        }
	return;
}
コード例 #2
0
ファイル: mdb-schema.c プロジェクト: diegozavala/integracion
main (int argc, char **argv)
{
int   i, j, k;
MdbHandle *mdb;
MdbCatalogEntry *entry;
MdbTableDef *table;
MdbColumn *col;
char		*the_relation;
char *tabname = NULL;
int opt;

 if (argc < 2) {
   fprintf (stderr, "Usage: %s <file> [<backend>]\n",argv[0]);
   exit (1);
 }

  while ((opt=getopt(argc, argv, "T:"))!=-1) {
     switch (opt) {
       case 'T':
         tabname = (char *) malloc(strlen(optarg)+1);
         strcpy(tabname, optarg);
         break;
     }
  }
 
 mdb_init();

 /* open the database */

 mdb = mdb_open (argv[optind]);
 if (argc - optind >2) {
	if (!mdb_set_default_backend(mdb, argv[optind + 1])) {
		fprintf(stderr,"Invalid backend type\n");
		mdb_exit();
		exit(1);
	}
 }

 /* read the catalog */
 
 mdb_read_catalog (mdb, MDB_TABLE);

 /* loop over each entry in the catalog */

 for (i=0; i < mdb->num_catalog; i++) 
   {
     entry = g_ptr_array_index (mdb->catalog, i);

     /* if it's a table */

     if (entry->object_type == MDB_TABLE)
       {
	 /* skip the MSys tables */
       if ((tabname && !strcmp(entry->object_name,tabname)) ||
           (!tabname && strncmp (entry->object_name, "MSys", 4)))
	 {
	   
	   /* make sure it's a table (may be redundant) */

	   if (!strcmp (mdb_get_objtype_string (entry->object_type), "Table"))
	     {
	       /* drop the table if it exists */
	       fprintf (stdout, "DROP TABLE %s;\n", entry->object_name);

	       /* create the table */
	       fprintf (stdout, "CREATE TABLE %s\n", entry->object_name);
	       fprintf (stdout, " (\n");
	       	       
	       table = mdb_read_table (entry);

	       /* get the columns */
	       mdb_read_columns (table);

	       /* loop over the columns, dumping the names and types */

	       for (k = 0; k < table->num_cols; k++)
		 {
		   col = g_ptr_array_index (table->columns, k);
		   
		   fprintf (stdout, "\t%s\t\t\t%s", col->name, 
			    mdb_get_coltype_string (mdb->default_backend, col->col_type));
		   
		   if (col->col_size != 0)
		     fprintf (stdout, " (%d)", col->col_size);
		   
		   if (k < table->num_cols - 1)
		     fprintf (stdout, ", \n");
		   else
		     fprintf (stdout, "\n");
		 }

	       fprintf (stdout, "\n);\n");
	       fprintf (stdout, "-- CREATE ANY INDEXES ...\n");
	       fprintf (stdout, "\n");
	     }
	 }
     }
   }
	fprintf (stdout, "\n\n");
	fprintf (stdout, "-- CREATE ANY Relationships ...\n");
	fprintf (stdout, "\n");
	the_relation=mdb_get_relationships(mdb);
	while (the_relation[0] != '\0') {
		fprintf(stdout,"%s\n",the_relation);
		the_relation=mdb_get_relationships(mdb);
	}            
 
 mdb_free_handle (mdb);
 mdb_exit();

 exit(0);
}