summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorcmiller@zippy.(none) <>2006-04-16 17:17:36 -0400
committercmiller@zippy.(none) <>2006-04-16 17:17:36 -0400
commit7d282984f3df174c66f99f3af0a97d1a6c076526 (patch)
treeb40174b3cbc583c8d1182864e3a22242236cde4d /client
parent8a7adb196d0e6dd5a5d2a9059510d184df79b504 (diff)
downloadmariadb-git-7d282984f3df174c66f99f3af0a97d1a6c076526.tar.gz
Only expand the empty string to the letters "NULL" if the column
does not have "NOT NULL" attribute set. Also, calculate the padding characters more safely, so that a negative number doesn't cause it to print MAXINT-n spaces.
Diffstat (limited to 'client')
-rw-r--r--client/mysql.cc18
1 files changed, 10 insertions, 8 deletions
diff --git a/client/mysql.cc b/client/mysql.cc
index cd4cbf49918..8589bdb05ed 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -2268,8 +2268,10 @@ print_table_data(MYSQL_RES *result)
MYSQL_ROW cur;
MYSQL_FIELD *field;
bool *num_flag;
+ bool *not_null_flag;
num_flag=(bool*) my_alloca(sizeof(bool)*mysql_num_fields(result));
+ not_null_flag=(bool*) my_alloca(sizeof(bool)*mysql_num_fields(result));
if (info_flag)
{
print_field_types(result);
@@ -2287,7 +2289,7 @@ print_table_data(MYSQL_RES *result)
length=max(length,field->max_length);
if (length < 4 && !IS_NOT_NULL(field->flags))
length=4; // Room for "NULL"
- field->max_length=length+1;
+ field->max_length=length;
separator.fill(separator.length()+length+2,'-');
separator.append('+');
}
@@ -2299,10 +2301,11 @@ print_table_data(MYSQL_RES *result)
(void) tee_fputs("|", PAGER);
for (uint off=0; (field = mysql_fetch_field(result)) ; off++)
{
- tee_fprintf(PAGER, " %-*s|",(int) min(field->max_length,
+ tee_fprintf(PAGER, " %-*s |",(int) min(field->max_length,
MAX_COLUMN_LENGTH),
field->name);
num_flag[off]= IS_NUM(field->type);
+ not_null_flag[off]= IS_NOT_NULL(field->flags);
}
(void) tee_fputs("\n", PAGER);
tee_puts((char*) separator.ptr(), PAGER);
@@ -2322,7 +2325,8 @@ print_table_data(MYSQL_RES *result)
uint visible_length;
uint extra_padding;
- if (lengths[off] == 0)
+ /* If this column may have a null value, use "NULL" for empty. */
+ if (! not_null_flag[off] && (lengths[off] == 0))
{
buffer= "NULL";
data_length= 4;
@@ -2362,6 +2366,7 @@ print_table_data(MYSQL_RES *result)
}
tee_puts((char*) separator.ptr(), PAGER);
my_afree((gptr) num_flag);
+ my_afree((gptr) not_null_flag);
}
@@ -2376,11 +2381,8 @@ tee_print_sized_data(const char *data, unsigned int data_length, unsigned int to
unsigned int i;
const char *p;
- total_bytes_to_send -= 1;
- /* Off by one, perhaps mistakenly accounting for a terminating NUL. */
-
if (right_justified)
- for (i= 0; i < (total_bytes_to_send - data_length); i++)
+ for (i= data_length; i < total_bytes_to_send; i++)
tee_putc((int)' ', PAGER);
for (i= 0, p= data; i < data_length; i+= 1, p+= 1)
@@ -2392,7 +2394,7 @@ tee_print_sized_data(const char *data, unsigned int data_length, unsigned int to
}
if (! right_justified)
- for (i= 0; i < (total_bytes_to_send - data_length); i++)
+ for (i= data_length; i < total_bytes_to_send; i++)
tee_putc((int)' ', PAGER);
}