37
37
using namespace std;
39
39
/* Global Thread counter */
41
41
pthread_mutex_t counter_mutex;
42
42
pthread_cond_t count_threshhold;
44
static void db_error(drizzle_con_st *con, drizzle_result_st *result,
45
drizzle_return_t ret, char *table);
46
static char *field_escape(char *to,const char *from,uint32_t length);
44
static void db_error_with_table(DRIZZLE *drizzle, char *table);
45
static void db_error(DRIZZLE *drizzle);
46
static char *field_escape(char *to,const char *from,uint length);
47
47
static char *add_load_option(char *ptr,const char *object,
48
48
const char *statement);
50
50
static bool verbose= false, lock_tables= false, ignore_errors= false,
51
51
opt_delete= false, opt_replace= false, silent= false,
52
ignore_unique= false, opt_compress= false, opt_low_priority= false,
52
ignore= false, opt_compress= false, opt_low_priority= false,
53
53
tty_password= false;
54
54
static bool debug_info_flag= false, debug_check_flag= false;
55
static uint32_t opt_use_threads= 0, opt_local_file= 0, my_end_arg= 0;
55
static uint opt_use_threads= 0, opt_local_file= 0, my_end_arg= 0;
56
56
static char *opt_password= NULL, *current_user= NULL,
57
57
*current_host= NULL, *current_db= NULL, *fields_terminated= NULL,
58
58
*lines_terminated= NULL, *enclosed= NULL, *opt_enclosed= NULL,
59
59
*escaped= NULL, *opt_columns= NULL,
60
60
*default_charset= (char*) DRIZZLE_DEFAULT_CHARSET_NAME;
61
static uint opt_protocol= 0;
61
62
static uint32_t opt_drizzle_port= 0;
62
63
static char * opt_drizzle_unix_port= 0;
63
64
static int64_t opt_ignore_lines= -1;
66
67
static struct my_option my_long_options[] =
69
{"character-sets-dir", OPT_CHARSETS_DIR,
70
"Directory where character sets are.", (char**) &charsets_dir,
71
(char**) &charsets_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
68
72
{"default-character-set", OPT_DEFAULT_CHARSET,
69
73
"Set the default character set.", (char**) &default_charset,
70
74
(char**) &default_charset, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
105
109
{"host", 'h', "Connect to host.", (char**) ¤t_host,
106
110
(char**) ¤t_host, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
107
111
{"ignore", 'i', "If duplicate unique key was found, keep old row.",
108
(char**) &ignore_unique, (char**) &ignore_unique, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
112
(char**) &ignore, (char**) &ignore, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
109
113
{"ignore-lines", OPT_IGN_LINES, "Ignore first n lines of data infile.",
110
114
(char**) &opt_ignore_lines, (char**) &opt_ignore_lines, 0, GET_LL,
111
115
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
363
if (drizzle_query_str(con, &result, sql_statement, &ret) == NULL ||
364
ret != DRIZZLE_RETURN_OK)
362
if (drizzle_query(drizzle, sql_statement))
366
db_error(con, &result, ret, tablename);
364
db_error_with_table(drizzle, tablename);
371
if (strcmp(drizzle_result_info(&result), ""))
369
if (drizzle_info(drizzle)) /* If NULL-pointer, print nothing */
373
371
fprintf(stdout, "%s.%s: %s\n", current_db, tablename,
374
drizzle_result_info(&result));
372
drizzle_info(drizzle));
377
drizzle_result_free(&result);
382
static void lock_table(drizzle_con_st *con, int tablecount, char **raw_tablename)
380
static void lock_table(DRIZZLE *drizzle, int tablecount, char **raw_tablename)
386
384
char tablename[FN_REFLEN];
387
drizzle_result_st result;
388
drizzle_return_t ret;
391
387
fprintf(stdout, "Locking tables for write\n");
396
392
query.append(tablename);
397
393
query.append(" WRITE,");
399
if (drizzle_query(con, &result, query.c_str(), query.length()-1,
401
ret != DRIZZLE_RETURN_OK)
403
db_error(con, &result, ret, NULL);
404
/* We shall countinue here, if --force was given */
407
drizzle_result_free(&result);
395
if (drizzle_real_query(drizzle, query.c_str(), query.length()-1))
396
db_error(drizzle); /* We shall countinue here, if --force was given */
411
static drizzle_con_st *db_connect(char *host, char *database,
412
char *user, char *passwd)
402
static DRIZZLE *db_connect(char *host, char *database,
403
char *user, char *passwd)
416
drizzle_return_t ret;
419
407
fprintf(stdout, "Connecting to %s\n", host ? host : "localhost");
420
408
if (!(drizzle= drizzle_create(NULL)))
422
if (!(con= drizzle_con_add_tcp(drizzle,NULL,host,opt_drizzle_port,user,passwd,
423
database, DRIZZLE_CON_NONE)))
428
if ((ret= drizzle_con_connect(con)) != DRIZZLE_RETURN_OK)
411
drizzle_options(drizzle,DRIZZLE_OPT_COMPRESS,NULL);
413
drizzle_options(drizzle,DRIZZLE_OPT_LOCAL_INFILE,
414
(char*) &opt_local_file);
416
drizzle_options(drizzle,DRIZZLE_OPT_PROTOCOL,(char*)&opt_protocol);
417
if (!(drizzle_connect(drizzle,host,user,passwd,
418
database,opt_drizzle_port,opt_drizzle_unix_port,
430
421
ignore_errors=0; /* NO RETURN FROM db_error */
431
db_error(con, NULL, ret, NULL);
424
drizzle->reconnect= 0;
435
426
fprintf(stdout, "Selecting database %s\n", database);
427
if (drizzle_select_db(drizzle, database))
442
static void db_disconnect(char *host, drizzle_con_st *con)
437
static void db_disconnect(char *host, DRIZZLE *drizzle)
445
440
fprintf(stdout, "Disconnecting from %s\n", host ? host : "localhost");
446
drizzle_free(drizzle_con_drizzle(con));
441
drizzle_close(drizzle);
451
static void safe_exit(int error, drizzle_con_st *con)
446
static void safe_exit(int error, DRIZZLE *drizzle)
453
448
if (ignore_errors)
456
drizzle_free(drizzle_con_drizzle(con));
451
drizzle_close(drizzle);
462
static void db_error(drizzle_con_st *con, drizzle_result_st *result,
463
drizzle_return_t ret, char *table)
465
if (ret == DRIZZLE_RETURN_ERROR_CODE)
467
my_printf_error(0,"Error: %d, %s%s%s", MYF(0),
468
drizzle_result_error_code(result),
469
drizzle_result_error(result),
470
table ? ", when using table: " : "", table ? table : "");
471
drizzle_result_free(result);
475
my_printf_error(0,"Error: %d, %s%s%s", MYF(0), ret, drizzle_con_error(con),
476
table ? ", when using table: " : "", table ? table : "");
457
static void db_error_with_table(DRIZZLE *drizzle, char *table)
459
my_printf_error(0,"Error: %d, %s, when using table: %s",
460
MYF(0), drizzle_errno(drizzle), drizzle_error(drizzle), table);
461
safe_exit(1, drizzle);
466
static void db_error(DRIZZLE *drizzle)
468
my_printf_error(0,"Error: %d %s", MYF(0), drizzle_errno(drizzle), drizzle_error(drizzle));
469
safe_exit(1, drizzle);
538
528
char *raw_table_name= (char *)arg;
539
drizzle_con_st *con= NULL;
540
drizzle_result_st result;
541
drizzle_return_t ret;
543
if (!(con= db_connect(current_host,current_db,current_user,opt_password)))
531
if (!(drizzle= db_connect(current_host,current_db,current_user,opt_password)))
548
if (drizzle_query_str(con, &result,
549
"/*!40101 set @@character_set_database=binary */;",
551
ret != DRIZZLE_RETURN_OK)
536
if (drizzle_query(drizzle, "/*!40101 set @@character_set_database=binary */;"))
553
db_error(con, &result, ret, NULL);
554
/* We shall countinue here, if --force was given */
538
db_error(drizzle); /* We shall countinue here, if --force was given */
559
543
We are not currently catching the error here.
561
if((error= write_to_table(raw_table_name, con)))
545
if((error= write_to_table(raw_table_name, drizzle)))
562
546
if (exitcode == 0)
567
db_disconnect(current_host, con);
551
db_disconnect(current_host, drizzle);
569
553
pthread_mutex_lock(&counter_mutex);
650
drizzle_con_st *con= 0;
651
drizzle_result_st result;
652
drizzle_return_t ret;
653
if (!(con= db_connect(current_host,current_db,current_user,opt_password)))
635
if (!(drizzle= db_connect(current_host,current_db,current_user,opt_password)))
655
637
free_defaults(argv_to_free);
656
638
return(1); /* purecov: deadcode */
659
if (drizzle_query_str(con, &result,
660
"/*!40101 set @@character_set_database=binary */;",
662
ret != DRIZZLE_RETURN_OK)
641
if (drizzle_query(drizzle, "/*!40101 set @@character_set_database=binary */;"))
664
db_error(con, &result, ret, NULL);
665
/* We shall countinue here, if --force was given */
643
db_error(drizzle); /* We shall countinue here, if --force was given */
669
drizzle_result_free(&result);
672
lock_table(con, argc, argv);
648
lock_table(drizzle, argc, argv);
673
649
for (; *argv != NULL; argv++)
674
if ((error= write_to_table(*argv, con)))
650
if ((error= write_to_table(*argv, drizzle)))
675
651
if (exitcode == 0)
677
db_disconnect(current_host, con);
653
db_disconnect(current_host, drizzle);
679
655
free(opt_password);
680
656
free_defaults(argv_to_free);