1007
1008
static void print_table_data(drizzle_result_st *result);
1008
1009
static void print_tab_data(drizzle_result_st *result);
1009
1010
static void print_table_data_vertically(drizzle_result_st *result);
1010
static void print_warnings(void);
1011
static void print_warnings(uint32_t error_code);
1011
1012
static uint32_t start_timer(void);
1012
1013
static void end_timer(uint32_t start_time,char *buff);
1013
1014
static void drizzle_end_timer(uint32_t start_time,char *buff);
2630
2641
if (vertical || (auto_vertical_output &&
2631
(terminal_width < get_result_width(result))))
2632
print_table_data_vertically(result);
2642
(terminal_width < get_result_width(&result))))
2643
print_table_data_vertically(&result);
2633
2644
else if (opt_silent && verbose <= 2 && !output_tables)
2634
print_tab_data(result);
2645
print_tab_data(&result);
2636
print_table_data(result);
2647
print_table_data(&result);
2638
2649
ngettext("%ld row in set","%ld rows in set",
2639
(long) drizzleclient_num_rows(result)),
2640
(long) drizzleclient_num_rows(result));
2650
(long) drizzle_result_row_count(&result)),
2651
(long) drizzle_result_row_count(&result));
2642
if (drizzleclient_errno(&drizzle))
2643
error= put_error(&drizzle);
2653
if (drizzle_result_error_code(&result))
2654
error= put_error(&con, &result);
2646
else if (drizzleclient_affected_rows(&drizzle) == ~(uint64_t) 0)
2657
else if (drizzle_result_affected_rows(&result) == ~(uint64_t) 0)
2647
2658
strcpy(buff,_("Query OK"));
2649
2660
sprintf(buff, ngettext("Query OK, %ld row affected",
2650
2661
"Query OK, %ld rows affected",
2651
(long) drizzleclient_affected_rows(&drizzle)),
2652
(long) drizzleclient_affected_rows(&drizzle));
2662
(long) drizzle_result_affected_rows(&result)),
2663
(long) drizzle_result_affected_rows(&result));
2654
2665
pos= strchr(buff, '\0');
2655
if ((warnings= drizzleclient_warning_count(&drizzle)))
2666
if ((warnings= drizzle_result_warning_count(&result)))
2664
2675
strcpy(pos, time_buff);
2665
2676
put_info(buff,INFO_RESULT,0,0);
2666
if (drizzleclient_info(&drizzle))
2667
put_info(drizzleclient_info(&drizzle),INFO_RESULT,0,0);
2677
if (strcmp(drizzle_result_info(&result), ""))
2678
put_info(drizzle_result_info(&result),INFO_RESULT,0,0);
2668
2679
put_info("",INFO_RESULT,0,0); // Empty row
2670
if (result && !drizzleclient_eof(result)) /* Something wrong when using quick */
2671
error= put_error(&drizzle);
2672
else if (unbuffered)
2673
2682
fflush(stdout);
2674
drizzleclient_free_result(result);
2675
} while (!(err= drizzleclient_next_result(&drizzle)));
2683
drizzle_result_free(&result);
2685
if (drizzle_con_status(&con) & DRIZZLE_CON_STATUS_MORE_RESULTS_EXISTS)
2687
if (drizzle_result_read(&con, &result, &ret) == NULL ||
2688
ret != DRIZZLE_RETURN_OK)
2690
if (ret == DRIZZLE_RETURN_ERROR_CODE)
2692
error_code= drizzle_result_error_code(&result);
2693
drizzle_result_free(&result);
2696
error= put_error(&con, NULL);
2701
} while (drizzle_con_status(&con) & DRIZZLE_CON_STATUS_MORE_RESULTS_EXISTS);
2677
error= put_error(&drizzle);
2703
error= put_error(&con, NULL);
2681
2707
/* Show warnings if any or error occured */
2682
2708
if (show_warnings == 1 && (warnings >= 1 || error))
2709
print_warnings(error_code);
2685
2711
if (!error && !status.batch &&
2686
(drizzle.server_status & SERVER_STATUS_DB_DROPPED))
2712
drizzle_con_status(&con) & DRIZZLE_CON_STATUS_DB_DROPPED)
2687
2714
get_current_db();
2689
2717
executing_query= 0;
2690
2718
return error; /* New command follows */
2755
static const char *fieldtype2str(enum enum_field_types type)
2783
static const char *fieldtype2str(drizzle_column_type_t type)
2757
2785
switch (type) {
2758
case DRIZZLE_TYPE_BLOB: return "BLOB";
2759
case DRIZZLE_TYPE_DATE: return "DATE";
2760
case DRIZZLE_TYPE_DATETIME: return "DATETIME";
2761
case DRIZZLE_TYPE_NEWDECIMAL: return "DECIMAL";
2762
case DRIZZLE_TYPE_DOUBLE: return "DOUBLE";
2763
case DRIZZLE_TYPE_ENUM: return "ENUM";
2764
case DRIZZLE_TYPE_LONG: return "LONG";
2765
case DRIZZLE_TYPE_LONGLONG: return "LONGLONG";
2766
case DRIZZLE_TYPE_NULL: return "NULL";
2767
case DRIZZLE_TYPE_TIMESTAMP: return "TIMESTAMP";
2768
case DRIZZLE_TYPE_TINY: return "TINY";
2769
case DRIZZLE_TYPE_VIRTUAL: return "VIRTUAL";
2786
case DRIZZLE_COLUMN_TYPE_BLOB: return "BLOB";
2787
case DRIZZLE_COLUMN_TYPE_DATE: return "DATE";
2788
case DRIZZLE_COLUMN_TYPE_DATETIME: return "DATETIME";
2789
case DRIZZLE_COLUMN_TYPE_NEWDECIMAL: return "DECIMAL";
2790
case DRIZZLE_COLUMN_TYPE_DOUBLE: return "DOUBLE";
2791
case DRIZZLE_COLUMN_TYPE_ENUM: return "ENUM";
2792
case DRIZZLE_COLUMN_TYPE_LONG: return "LONG";
2793
case DRIZZLE_COLUMN_TYPE_LONGLONG: return "LONGLONG";
2794
case DRIZZLE_COLUMN_TYPE_NULL: return "NULL";
2795
case DRIZZLE_COLUMN_TYPE_TIMESTAMP: return "TIMESTAMP";
2796
case DRIZZLE_COLUMN_TYPE_TINY: return "TINY";
2797
case DRIZZLE_COLUMN_TYPE_VIRTUAL: return "VIRTUAL";
2770
2798
default: return "?-unknown-?";
2778
2806
#define ff2s_check_flag(X) \
2779
if (f & X ## _FLAG) { s=strcpy(s, # X " ")+strlen(# X " "); \
2780
f &= ~ X ## _FLAG; }
2807
if (f & DRIZZLE_COLUMN_FLAGS_ ## X) { s=strcpy(s, # X " ")+strlen(# X " "); \
2808
f &= ~ DRIZZLE_COLUMN_FLAGS_ ## X; }
2781
2809
ff2s_check_flag(NOT_NULL);
2782
2810
ff2s_check_flag(PRI_KEY);
2783
2811
ff2s_check_flag(UNIQUE_KEY);
2822
2850
"Decimals: %u\n"
2823
2851
"Flags: %s\n\n",
2825
field->name, field->catalog, field->db, field->table,
2826
field->org_table, fieldtype2str(field->type),
2827
get_charset_name(field->charsetnr), field->charsetnr,
2828
field->length, field->max_length, field->decimals,
2829
fieldflags2str(field->flags));
2853
drizzle_column_name(field), drizzle_column_catalog(field),
2854
drizzle_column_db(field), drizzle_column_table(field),
2855
drizzle_column_orig_table(field),
2856
fieldtype2str(drizzle_column_type(field)),
2857
get_charset_name(drizzle_column_charset(field)),
2858
drizzle_column_charset(field), drizzle_column_size(field),
2859
drizzle_column_max_size(field), drizzle_column_decimals(field),
2860
fieldflags2str(drizzle_column_flags(field)));
2831
2862
tee_puts("", PAGER);
2836
2867
print_table_data(drizzle_result_st *result)
2839
drizzle_column_st *field;
2870
drizzle_return_t ret;
2871
drizzle_column_st *field;
2841
2873
string separator;
2843
2875
separator.reserve(256);
2845
num_flag=(bool*) malloc(sizeof(bool)*drizzleclient_num_fields(result));
2877
num_flag=(bool*) malloc(sizeof(bool)*drizzle_result_column_count(result));
2846
2878
if (column_types_flag)
2848
2880
print_field_types(result);
2849
if (!drizzleclient_num_rows(result))
2881
if (!drizzle_result_row_count(result))
2851
drizzleclient_field_seek(result,0);
2883
drizzle_column_seek(result,0);
2853
2885
separator.append("+");
2854
while ((field = drizzleclient_fetch_field(result)))
2886
while ((field = drizzle_column_next(result)))
2856
2888
uint32_t x, length= 0;
2858
2890
if (column_names)
2892
uint32_t name_length= strlen(drizzle_column_name(field));
2860
2894
/* Check if the max_byte value is really the maximum in terms
2861
2895
of visual length since multibyte characters can affect the
2862
2896
length of the separator. */
2863
2897
length= charset_info->cset->numcells(charset_info,
2865
field->name+field->name_length);
2898
drizzle_column_name(field),
2899
drizzle_column_name(field) +
2867
if (field->name_length == field->max_length)
2902
if (name_length == drizzle_column_max_size(field))
2869
if (length < field->max_length)
2870
field->max_length= length;
2904
if (length < drizzle_column_max_size(field))
2905
drizzle_column_set_max_size(field, length);
2874
length= field->name_length;
2909
length= name_length;
2879
length=max(length,field->length);
2914
length=max(length,drizzle_column_size(field));
2881
length=max(length,field->max_length);
2882
if (length < 4 && !(field->flags & NOT_NULL_FLAG))
2916
length=max(length,(uint32_t)drizzle_column_max_size(field));
2918
!(drizzle_column_flags(field) & DRIZZLE_COLUMN_FLAGS_NOT_NULL))
2883
2920
// Room for "NULL"
2885
field->max_length=length;
2923
drizzle_column_set_max_size(field, length);
2887
2925
for (x=0; x< (length+2); x++)
2888
2926
separator.append("-");
2892
2930
tee_puts((char*) separator.c_str(), PAGER);
2893
2931
if (column_names)
2895
drizzleclient_field_seek(result,0);
2933
drizzle_column_seek(result,0);
2896
2934
(void) tee_fputs("|", PAGER);
2897
for (uint32_t off=0; (field = drizzleclient_fetch_field(result)) ; off++)
2935
for (uint32_t off=0; (field = drizzle_column_next(result)) ; off++)
2899
uint32_t name_length= (uint32_t) strlen(field->name);
2937
uint32_t name_length= (uint32_t) strlen(drizzle_column_name(field));
2900
2938
uint32_t numcells= charset_info->cset->numcells(charset_info,
2902
field->name + name_length);
2903
uint32_t display_length= field->max_length + name_length - numcells;
2939
drizzle_column_name(field),
2940
drizzle_column_name(field) +
2942
uint32_t display_length= drizzle_column_max_size(field) + name_length -
2904
2944
tee_fprintf(PAGER, " %-*s |",(int) min(display_length,
2905
2945
MAX_COLUMN_LENGTH),
2907
num_flag[off]= ((field->type <= DRIZZLE_TYPE_LONGLONG) ||
2908
(field->type == DRIZZLE_TYPE_NEWDECIMAL));
2946
drizzle_column_name(field));
2947
num_flag[off]= ((drizzle_column_type(field) <= DRIZZLE_COLUMN_TYPE_LONGLONG) ||
2948
(drizzle_column_type(field) == DRIZZLE_COLUMN_TYPE_NEWDECIMAL));
2910
2950
(void) tee_fputs("\n", PAGER);
2911
2951
tee_puts((char*) separator.c_str(), PAGER);
2914
while ((cur= drizzleclient_fetch_row(result)))
2916
if (interrupted_query)
2958
cur= drizzle_row_buffer(result, &ret);
2959
if (ret != DRIZZLE_RETURN_OK)
2961
(void)put_error(&con, result);
2966
cur= drizzle_row_next(result);
2968
if (cur == NULL || interrupted_query)
2918
uint32_t *lengths= drizzleclient_fetch_lengths(result);
2971
size_t *lengths= drizzle_row_field_sizes(result);
2919
2972
(void) tee_fputs("| ", PAGER);
2920
drizzleclient_field_seek(result, 0);
2921
for (uint32_t off= 0; off < drizzleclient_num_fields(result); off++)
2973
drizzle_column_seek(result, 0);
2974
for (uint32_t off= 0; off < drizzle_result_column_count(result); off++)
2923
2976
const char *buffer;
2924
2977
uint32_t data_length;
2988
3043
static int get_field_disp_length(drizzle_column_st *field)
2990
uint32_t length= column_names ? field->name_length : 0;
3045
uint32_t length= column_names ? strlen(drizzle_column_name(field)) : 0;
2993
length= max(length, field->length);
3048
length= max(length, drizzle_column_size(field));
2995
length= max(length, field->max_length);
3050
length= max(length, (uint32_t)drizzle_column_max_size(field));
2997
if (length < 4 && !(field->flags & NOT_NULL_FLAG))
3053
!(drizzle_column_flags(field) & DRIZZLE_COLUMN_FLAGS_NOT_NULL))
2998
3055
length= 4; /* Room for "NULL" */
3013
3071
unsigned int len= 0;
3014
3072
drizzle_column_st *field;
3015
drizzle_column_st_OFFSET offset;
3017
offset= drizzleclient_field_tell(result);
3075
offset= drizzle_column_current(result);
3018
3076
assert(offset == 0);
3020
while ((field= drizzleclient_fetch_field(result)) != NULL)
3078
while ((field= drizzle_column_next(result)) != NULL)
3021
3079
len+= get_field_disp_length(field) + 3; /* plus bar, space, & final space */
3023
(void) drizzleclient_field_seek(result, offset);
3081
(void) drizzle_column_seek(result, offset);
3025
3083
return len + 1; /* plus final bar. */
3059
3117
print_table_data_vertically(drizzle_result_st *result)
3062
uint32_t max_length=0;
3063
drizzle_column_st *field;
3120
drizzle_return_t ret;
3121
uint32_t max_length=0;
3122
drizzle_column_st *field;
3065
while ((field = drizzleclient_fetch_field(result)))
3124
while ((field = drizzle_column_next(result)))
3067
uint32_t length= field->name_length;
3126
uint32_t length= strlen(drizzle_column_name(field));
3068
3127
if (length > max_length)
3069
3128
max_length= length;
3070
field->max_length=length;
3129
drizzle_column_set_max_size(field, length);
3073
drizzleclient_field_seek(result,0);
3074
for (uint32_t row_count=1; (cur= drizzleclient_fetch_row(result)); row_count++)
3132
for (uint32_t row_count=1;; row_count++)
3076
if (interrupted_query)
3136
cur= drizzle_row_buffer(result, &ret);
3137
if (ret != DRIZZLE_RETURN_OK)
3139
(void)put_error(&con, result);
3144
cur= drizzle_row_next(result);
3146
if (cur == NULL || interrupted_query)
3078
drizzleclient_field_seek(result,0);
3148
drizzle_column_seek(result,0);
3079
3149
tee_fprintf(PAGER,
3080
3150
"*************************** %d. row ***************************\n", row_count);
3081
for (uint32_t off=0; off < drizzleclient_num_fields(result); off++)
3151
for (uint32_t off=0; off < drizzle_result_column_count(result); off++)
3083
field= drizzleclient_fetch_field(result);
3084
tee_fprintf(PAGER, "%*s: ",(int) max_length,field->name);
3153
field= drizzle_column_next(result);
3154
tee_fprintf(PAGER, "%*s: ",(int) max_length,drizzle_column_name(field));
3085
3155
tee_fprintf(PAGER, "%s\n",cur[off] ? (char*) cur[off] : "NULL");
3158
drizzle_row_free(result, cur);
3091
3163
/* print_warnings should be called right after executing a statement */
3093
static void print_warnings()
3165
static void print_warnings(uint32_t error_code)
3096
drizzle_result_st *result;
3168
drizzle_result_st result;
3098
3170
uint64_t num_rows;
3100
/* Save current error before calling "show warnings" */
3101
uint32_t error= drizzleclient_errno(&drizzle);
3171
uint32_t new_code= 0;
3103
3173
/* Get the warnings */
3104
3174
query= "show warnings";
3105
drizzleclient_real_query_for_lazy(query, strlen(query),&result);
3175
drizzleclient_real_query_for_lazy(query, strlen(query),&result,&new_code);
3106
3176
drizzleclient_store_result_for_lazy(&result);
3108
3178
/* Bail out when no warnings */
3109
if (!(num_rows= drizzleclient_num_rows(result)))
3179
if (!(num_rows= drizzle_result_row_count(&result)))
3112
cur= drizzleclient_fetch_row(result);
3182
cur= drizzle_row_next(&result);
3115
3185
Don't print a duplicate of the current error. It is possible for SHOW
3117
3187
messages. To be safe, skip printing the duplicate only if it is the only
3120
if (!cur || (num_rows == 1 && error == (uint32_t) strtoul(cur[1], NULL, 10)))
3190
if (!cur || (num_rows == 1 &&
3191
error_code == (uint32_t) strtoul((char *)cur[1], NULL, 10)))
3123
3196
/* Print the warnings */
3127
3200
tee_fprintf(PAGER, "%s (Code %s): %s\n", cur[0], cur[1], cur[2]);
3128
} while ((cur= drizzleclient_fetch_row(result)));
3201
} while ((cur= drizzle_row_next(&result)));
3132
drizzleclient_free_result(result);
3205
drizzle_result_free(&result);
3174
3247
print_tab_data(drizzle_result_st *result)
3177
drizzle_column_st *field;
3250
drizzle_return_t ret;
3251
drizzle_column_st *field;
3180
3254
if (opt_silent < 2 && column_names)
3183
while ((field = drizzleclient_fetch_field(result)))
3257
while ((field = drizzle_column_next(result)))
3186
3260
(void) tee_fputs("\t", PAGER);
3187
(void) tee_fputs(field->name, PAGER);
3261
(void) tee_fputs(drizzle_column_name(field), PAGER);
3189
3263
(void) tee_fputs("\n", PAGER);
3191
while ((cur = drizzleclient_fetch_row(result)))
3193
lengths= drizzleclient_fetch_lengths(result);
3194
safe_put_field(cur[0],lengths[0]);
3195
for (uint32_t off=1 ; off < drizzleclient_num_fields(result); off++)
3269
cur= drizzle_row_buffer(result, &ret);
3270
if (ret != DRIZZLE_RETURN_OK)
3272
(void)put_error(&con, result);
3277
cur= drizzle_row_next(result);
3282
lengths= drizzle_row_field_sizes(result);
3283
safe_put_field((char *)cur[0],lengths[0]);
3284
for (uint32_t off=1 ; off < drizzle_result_column_count(result); off++)
3197
3286
(void) tee_fputs("\t", PAGER);
3198
safe_put_field(cur[off], lengths[off]);
3287
safe_put_field((char *)cur[off], lengths[off]);
3200
3289
(void) tee_fputs("\n", PAGER);
3291
drizzle_row_free(result, cur);
3397
sprintf(buff,"Connection id: %u",drizzleclient_thread_id(&drizzle));
3488
sprintf(buff,"Connection id: %u",drizzle_con_thread_id(&con));
3398
3489
put_info(buff,INFO_INFO,0,0);
3399
3490
sprintf(buff,"Current database: %.128s\n",
3400
3491
current_db ? current_db : "*** NONE ***");
3546
3639
if (!connected && reconnect())
3547
3640
return opt_reconnect ? -1 : 1; // Fatal error
3548
if (drizzleclient_select_db(&drizzle,tmp))
3641
for (bool try_again= true; ; try_again= false)
3550
if (drizzleclient_errno(&drizzle) != CR_SERVER_GONE_ERROR)
3551
return put_error(&drizzle);
3554
return opt_reconnect ? -1 : 1; // Fatal error
3555
if (drizzleclient_select_db(&drizzle,tmp))
3556
return put_error(&drizzle);
3643
if (drizzle_select_db(&con,&result,tmp,&ret) == NULL ||
3644
ret != DRIZZLE_RETURN_OK)
3646
if (ret == DRIZZLE_RETURN_ERROR_CODE)
3648
int error= put_error(&con, &result);
3649
drizzle_result_free(&result);
3653
if (ret != DRIZZLE_RETURN_SERVER_GONE || !try_again)
3654
return put_error(&con, NULL);
3657
return opt_reconnect ? -1 : 1; // Fatal error
3558
3660
free(current_db);
3559
3661
current_db= strdup(tmp);
3647
3749
sql_connect(char *host,char *database,char *user,char *password,
3648
3750
uint32_t silent)
3752
drizzle_return_t ret;
3653
drizzleclient_close(&drizzle);
3655
drizzleclient_create(&drizzle);
3757
drizzle_con_free(&con);
3758
drizzle_free(&drizzle);
3760
drizzle_create(&drizzle);
3761
if (drizzle_con_add_tcp(&drizzle, &con, host, opt_drizzle_port, user,
3762
password, database, DRIZZLE_CON_NONE) == NULL)
3764
(void) put_error(&con, NULL);
3765
(void) fflush(stdout);
3769
/* XXX add this back in
3656
3770
if (opt_connect_timeout)
3658
3772
uint32_t timeout=opt_connect_timeout;
3659
3773
drizzleclient_options(&drizzle,DRIZZLE_OPT_CONNECT_TIMEOUT,
3660
3774
(char*) &timeout);
3663
drizzleclient_options(&drizzle,DRIZZLE_OPT_COMPRESS,NULL);
3664
if (opt_secure_auth)
3665
drizzleclient_options(&drizzle, DRIZZLE_SECURE_AUTH, (char *) &opt_secure_auth);
3778
/* XXX Do we need this?
3666
3779
if (safe_updates)
3668
3781
char init_command[100];
3672
3785
select_limit, max_join_size);
3673
3786
drizzleclient_options(&drizzle, DRIZZLE_INIT_COMMAND, init_command);
3675
if (!drizzleclient_connect(&drizzle, host, user, password,
3676
database, opt_drizzle_port, opt_drizzle_unix_port,
3677
connect_flag | DRIZZLE_CAPABILITIES_MULTI_STATEMENTS))
3789
if ((ret= drizzle_con_connect(&con)) != DRIZZLE_RETURN_OK)
3680
(drizzleclient_errno(&drizzle) != CR_CONN_HOST_ERROR &&
3681
drizzleclient_errno(&drizzle) != CR_CONNECTION_ERROR))
3791
if (!silent || (ret != DRIZZLE_RETURN_GETADDRINFO &&
3792
ret != DRIZZLE_RETURN_COULD_NOT_CONNECT))
3683
(void) put_error(&drizzle);
3794
(void) put_error(&con, NULL);
3684
3795
(void) fflush(stdout);
3685
3796
return ignore_errors ? -1 : 1; // Abort
3687
3798
return -1; // Retryable
3690
3802
drizzle.reconnect= debug_info_flag; // We want to know if this happens
3691
3804
build_completion_hash(opt_rehash, 1);
3697
3810
com_status(string *, const char *)
3701
drizzle_result_st *result;
3816
drizzle_result_st result;
3817
drizzle_return_t ret;
3703
3819
tee_puts("--------------", stdout);
3704
3820
usage(1); /* Print version */
3707
tee_fprintf(stdout, "\nConnection id:\t\t%lu\n",drizzleclient_thread_id(&drizzle));
3823
tee_fprintf(stdout, "\nConnection id:\t\t%lu\n",drizzle_con_thread_id(&con));
3709
3825
Don't remove "limit 1",
3710
3826
it is protection againts SQL_SELECT_LIMIT=0
3712
if (!drizzleclient_query(&drizzle,"select DATABASE(), USER() limit 1") &&
3713
(result=drizzleclient_use_result(&drizzle)))
3828
if (drizzle_query_str(&con,&result,"select DATABASE(), USER() limit 1",
3829
&ret) != NULL && ret == DRIZZLE_RETURN_OK &&
3830
drizzle_result_buffer(&result) == DRIZZLE_RETURN_OK)
3715
drizzle_row_t cur=drizzleclient_fetch_row(result);
3832
drizzle_row_t cur=drizzle_row_next(&result);
3718
tee_fprintf(stdout, "Current database:\t%s\n", cur[0] ? cur[0] : "");
3835
tee_fprintf(stdout, "Current database:\t%s\n", cur[0] ? (char *)cur[0] : "");
3719
3836
tee_fprintf(stdout, "Current user:\t\t%s\n", cur[1]);
3721
drizzleclient_free_result(result);
3838
drizzle_result_free(&result);
3723
3840
tee_puts("SSL:\t\t\tNot in use", stdout);
3739
3856
tee_fprintf(stdout, "Using outfile:\t\t'%s'\n", opt_outfile ? outfile : "");
3740
3857
tee_fprintf(stdout, "Using delimiter:\t%s\n", delimiter);
3741
3858
tee_fprintf(stdout, "Server version:\t\t%s\n", server_version_string(&con));
3742
tee_fprintf(stdout, "Protocol version:\t%d\n", drizzleclient_get_proto_info(&drizzle));
3743
tee_fprintf(stdout, "Connection:\t\t%s\n", drizzleclient_get_host_info(&drizzle));
3859
tee_fprintf(stdout, "Protocol version:\t%d\n", drizzle_con_protocol_version(&con));
3860
tee_fprintf(stdout, "Connection:\t\t%s\n", drizzle_con_host(&con));
3861
/* XXX need to save this from result
3744
3862
if ((id= drizzleclient_insert_id(&drizzle)))
3745
3863
tee_fprintf(stdout, "Insert id:\t\t%s\n", llstr(id, buff));
3747
/* "limit 1" is protection against SQL_SELECT_LIMIT=0 */
3748
if (!drizzleclient_query(&drizzle,"select @@character_set_client, @@character_set_connection, @@character_set_server, @@character_set_database limit 1") &&
3749
(result=drizzleclient_use_result(&drizzle)))
3751
drizzle_row_t cur=drizzleclient_fetch_row(result);
3754
tee_fprintf(stdout, "Server characterset:\t%s\n", cur[2] ? cur[2] : "");
3755
tee_fprintf(stdout, "Db characterset:\t%s\n", cur[3] ? cur[3] : "");
3756
tee_fprintf(stdout, "Client characterset:\t%s\n", cur[0] ? cur[0] : "");
3757
tee_fprintf(stdout, "Conn. characterset:\t%s\n", cur[1] ? cur[1] : "");
3759
drizzleclient_free_result(result);
3762
if (strstr(drizzleclient_get_host_info(&drizzle),"TCP/IP") || ! drizzle.unix_socket)
3763
tee_fprintf(stdout, "TCP port:\t\t%d\n", drizzle.port);
3866
if (strcmp(drizzle_con_uds(&con), ""))
3867
tee_fprintf(stdout, "UNIX socket:\t\t%s\n", drizzle_con_uds(&con));
3765
tee_fprintf(stdout, "UNIX socket:\t\t%s\n", drizzle.unix_socket);
3766
if (drizzle.net.compress)
3767
tee_fprintf(stdout, "Protocol:\t\tCompressed\n");
3869
tee_fprintf(stdout, "TCP port:\t\t%d\n", drizzle_con_port(&con));
3769
3871
if (safe_updates)
4092
const char *host_info = drizzleclient_get_host_info(&drizzle);
4093
if (strstr(host_info, "memory"))
4195
if (strcmp(drizzle_con_uds(&con), ""))
4095
processed_prompt->append(drizzle.host);
4197
char *pos=strrchr(drizzle_con_uds(&con),'/');
4198
processed_prompt->append(pos ? pos+1 : drizzle_con_uds(&con));
4097
else if (strstr(host_info,"TCP/IP") ||
4098
!drizzle.unix_socket)
4099
add_int_to_prompt(drizzle.port);
4102
char *pos=strrchr(drizzle.unix_socket,'/');
4103
processed_prompt->append(pos ? pos+1 : drizzle.unix_socket);
4201
add_int_to_prompt(drizzle_con_port(&con));