Changeset 38975
- Timestamp:
- Oct 27, 2015, 2:41:20 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20150625/Ohana/src/tools/src/fits_to_mysql.c
r38967 r38975 18 18 tmp = Pin[3]; Pin[3] = Pin[4]; Pin[4] = tmp; } 19 19 20 # define DEBUG 020 # define DEBUG 1 21 21 # define NMAX 0x100 22 22 # define NBUFFER 0x100000 … … 63 63 int CopyIOBuffer (IOBuffer *output, IOBuffer *input); 64 64 65 void replace_dot_with_underscore (char *string); 66 67 void dump_on_failure (IOBuffer *buffer); 65 68 MYSQL *mysql_connect (MYSQL *mysqlBase); 66 69 int mysql_commit_buffer (IOBuffer *buffer, MYSQL *mysql); … … 242 245 column[Ncolumn].rawname = strcreate (tlabel); 243 246 column[Ncolumn].format = strcreate (format); 247 replace_dot_with_underscore (column[Ncolumn].colname); 244 248 245 249 char type[16]; … … 268 272 } 269 273 274 void PrintColumns (IOBuffer *buffer, char *typename, char *rootname, int Nval) { 275 if (Nval > 1) { 276 int j; 277 char colname[64]; 278 for (j = 0; j < Nval; j++) { 279 snprintf (colname, 64, "%s_%d", rootname, j + 1); 280 PrintIOBuffer (buffer, "%s %s", colname, typename); 281 if (j < Nval - 1) { 282 PrintIOBuffer (buffer, ",\n"); 283 } 284 } 285 } else { 286 PrintIOBuffer (buffer, "%s %s", rootname, typename); 287 } 288 return; 289 } 290 270 291 // the 'insert' buffer will be used to generate the insert lines downstream (call InitIOBuffer on it first) 271 292 int create_table (ColumnDef *columns, int Ncolumns, char *extname, IOBuffer *insert, MYSQL *mysql) { … … 277 298 278 299 char *tablename = strcreate (extname); 279 280 // convert "." in tablename to _ 281 char *p = tablename; 282 while (p && *p) { 283 if (*p == '.') *p = '_'; 284 p++; 285 } 300 replace_dot_with_underscore (tablename); 286 301 287 302 // drop the table if it exists … … 291 306 fprintf (stderr, "failed to drop table:\n"); 292 307 fprintf (stderr, "%s\n", mysql_error(mysql)); 308 dump_on_failure (&buffer); 293 309 return FALSE; 294 310 } … … 306 322 switch (columns[i].type) { 307 323 case TYPE_BYTE: 308 Print IOBuffer (&buffer, "%s TINYINT", columns[i].colname);324 PrintColumns (&buffer, "SMALLINT", columns[i].colname, columns[i].Nval); 309 325 break; 310 326 case TYPE_SHORT: 311 Print IOBuffer (&buffer, "%s SMALLINT", columns[i].colname);327 PrintColumns (&buffer, "SMALLINT", columns[i].colname, columns[i].Nval); 312 328 break; 313 329 case TYPE_INT: 314 Print IOBuffer (&buffer, "%s INT", columns[i].colname);330 PrintColumns (&buffer, "INT", columns[i].colname, columns[i].Nval); 315 331 break; 316 332 case TYPE_INT64: 317 Print IOBuffer (&buffer, "%s BIGINT", columns[i].colname);333 PrintColumns (&buffer, "BIGINT", columns[i].colname, columns[i].Nval); 318 334 break; 319 335 case TYPE_FLOAT: 320 Print IOBuffer (&buffer, "%s FLOAT", columns[i].colname);336 PrintColumns (&buffer, "FLOAT", columns[i].colname, columns[i].Nval); 321 337 break; 322 338 case TYPE_DOUBLE: 323 Print IOBuffer (&buffer, "%s DOUBLE", columns[i].colname);339 PrintColumns (&buffer, "DOUBLE", columns[i].colname, columns[i].Nval); 324 340 break; 325 341 case TYPE_CHAR: … … 330 346 } 331 347 332 PrintIOBuffer (insert, "%s", columns[i].colname); 348 if ((columns[i].Nval > 1) && (columns[i].type != TYPE_CHAR)) { 349 int j; 350 char colname[64]; 351 for (j = 0; j < columns[i].Nval; j++) { 352 snprintf (colname, 64, "%s_%d", columns[i].colname, j + 1); 353 PrintIOBuffer (insert, "%s", colname); 354 if (j < columns[i].Nval - 1) { 355 PrintIOBuffer (insert, ",\n"); 356 } 357 } 358 } else { 359 PrintIOBuffer (insert, "%s", columns[i].colname); 360 } 361 333 362 if (i == Ncolumns - 1) { 334 363 PrintIOBuffer (&buffer, ")\n"); … … 340 369 } 341 370 342 if (DEBUG) fprintf (stderr, "%s\n", buffer.buffer);343 371 status = mysql_query(mysql, buffer.buffer); 344 372 if (status) { … … 346 374 fprintf (stderr, "%s\n", mysql_error(mysql)); 347 375 fprintf (stderr, "Nbuffer: %d\n", buffer.Nbuffer); 376 dump_on_failure (&buffer); 348 377 } 349 378 … … 388 417 memset (line, 0, 128); 389 418 memcpy (line, &value[i*columns[Nf].Nval], columns[Nf].Nval); 390 PrintIOBuffer (&output, " %s", line);419 PrintIOBuffer (&output, "'%s'", line); 391 420 break; 392 421 } … … 395 424 for (j = 0; j < columns[Nf].Nval; j++) { 396 425 PrintIOBuffer (&output, "%hhd", value[i*columns[Nf].Nval + j]); 426 if (j < columns[Nf].Nval - 1) { 427 PrintIOBuffer (&output, ",\n"); 428 } 397 429 } 398 430 break; … … 402 434 for (j = 0; j < columns[Nf].Nval; j++) { 403 435 PrintIOBuffer (&output, "%hd", value[i*columns[Nf].Nval + j]); 436 if (j < columns[Nf].Nval - 1) { 437 PrintIOBuffer (&output, ",\n"); 438 } 404 439 } 405 440 break; … … 409 444 for (j = 0; j < columns[Nf].Nval; j++) { 410 445 PrintIOBuffer (&output, "%d", value[i*columns[Nf].Nval + j]); 446 if (j < columns[Nf].Nval - 1) { 447 PrintIOBuffer (&output, ",\n"); 448 } 411 449 } 412 450 break; … … 416 454 for (j = 0; j < columns[Nf].Nval; j++) { 417 455 PrintIOBuffer (&output, "%lld", (long long int) value[i*columns[Nf].Nval + j]); 456 if (j < columns[Nf].Nval - 1) { 457 PrintIOBuffer (&output, ",\n"); 458 } 418 459 } 419 460 break; … … 422 463 float *value = data[Nf]; 423 464 for (j = 0; j < columns[Nf].Nval; j++) { 424 PrintIOBuffer (&output, "%e", value[i*columns[Nf].Nval + j]); 465 float myValue = value[i*columns[Nf].Nval + j]; 466 if (isfinite(myValue)) { 467 PrintIOBuffer (&output, "%e", myValue); 468 } else { 469 PrintIOBuffer (&output, "-999"); 470 } 471 if (j < columns[Nf].Nval - 1) { 472 PrintIOBuffer (&output, ",\n"); 473 } 425 474 } 426 475 break; … … 430 479 for (j = 0; j < columns[Nf].Nval; j++) { 431 480 PrintIOBuffer (&output, "%e", value[i*columns[Nf].Nval + j]); 481 if (j < columns[Nf].Nval - 1) { 482 PrintIOBuffer (&output, ",\n"); 483 } 432 484 } 433 485 break; … … 443 495 } 444 496 if (output.Nbuffer > MAX_BUFFER) { 445 if (DEBUG) fprintf (stderr, "%s\n", output.buffer);446 497 mysql_commit_buffer (&output, mysql); 447 498 CopyIOBuffer (&output, insert); … … 449 500 } 450 501 451 if (DEBUG) fprintf (stderr, "%s\n", output.buffer);452 502 mysql_commit_buffer (&output, mysql); 453 503 FreeIOBuffer (&output); … … 730 780 if (mysql) { 731 781 int status; 732 if (DEBUG) fprintf (stderr, "%s\n", buffer->buffer);733 782 status = mysql_query(mysql, buffer->buffer); 734 783 if (status) { … … 736 785 fprintf (stderr, "%s\n", mysql_error(mysql)); 737 786 fprintf (stderr, "Nbuffer: %d\n", buffer->Nbuffer); 787 dump_on_failure (buffer); 738 788 } 739 789 result = mysql_store_result (mysql); … … 743 793 return TRUE; 744 794 } 795 796 void dump_on_failure (IOBuffer *buffer) { 797 798 if (!DEBUG) return; 799 800 FILE *f = fopen ("dvopsps.dump.sql", "w"); 801 fwrite (buffer->buffer, 1, buffer->Nbuffer, f); 802 fclose (f); 803 exit (1); 804 } 805 806 void replace_dot_with_underscore (char *string) { 807 808 // convert "." in string to "_" 809 char *p = string; 810 while (p && *p) { 811 if (*p == '.') *p = '_'; 812 p++; 813 } 814 815 return; 816 }
Note:
See TracChangeset
for help on using the changeset viewer.
