summaryrefslogtreecommitdiff
path: root/ndb/src
diff options
context:
space:
mode:
authorunknown <tomas@poseidon.mysql.com>2007-03-09 00:55:46 +0700
committerunknown <tomas@poseidon.mysql.com>2007-03-09 00:55:46 +0700
commit4556d04e8d9b5ebf18371c5480cbae84e1ee9fc8 (patch)
treee2c451c8a5be685cf1ff69ad5b7fe75df34bf2b6 /ndb/src
parent11f05ff33cc7ce5d056142bbb9faf3322dea6860 (diff)
parent8927dc83c976396655de9307a0ba735836313d62 (diff)
downloadmariadb-git-4556d04e8d9b5ebf18371c5480cbae84e1ee9fc8.tar.gz
Merge poseidon.mysql.com:/home/tomas/mysql-5.0-telco-gca-ndb_restore
into poseidon.mysql.com:/home/tomas/mysql-5.0-ndb ndb/include/util/OutputStream.hpp: Auto merged ndb/tools/restore/Restore.hpp: manual merge ndb/tools/restore/restore_main.cpp: manual merge
Diffstat (limited to 'ndb/src')
-rw-r--r--ndb/src/ndbapi/NdbRecAttr.cpp144
1 files changed, 118 insertions, 26 deletions
diff --git a/ndb/src/ndbapi/NdbRecAttr.cpp b/ndb/src/ndbapi/NdbRecAttr.cpp
index abfbd76d2c3..a0c394603c5 100644
--- a/ndb/src/ndbapi/NdbRecAttr.cpp
+++ b/ndb/src/ndbapi/NdbRecAttr.cpp
@@ -140,8 +140,24 @@ NdbRecAttr::receive_data(const Uint32 * data, Uint32 sz){
return false;
}
+NdbRecordPrintFormat::NdbRecordPrintFormat()
+{
+ fields_terminated_by= ";";
+ start_array_enclosure= "[";
+ end_array_enclosure= "]";
+ fields_enclosed_by= "";
+ fields_optionally_enclosed_by= "\"";
+ lines_terminated_by= "\n";
+ hex_prefix= "H'";
+ null_string= "[NULL]";
+ hex_format= 0;
+}
+NdbRecordPrintFormat::~NdbRecordPrintFormat() {}
+static const NdbRecordPrintFormat default_print_format;
+
static void
-ndbrecattr_print_string(NdbOut& out, const char *type,
+ndbrecattr_print_string(NdbOut& out, const NdbRecordPrintFormat &f,
+ const char *type, bool is_binary,
const char *aref, unsigned sz)
{
const unsigned char* ref = (const unsigned char*)aref;
@@ -150,6 +166,25 @@ ndbrecattr_print_string(NdbOut& out, const char *type,
for (i=sz-1; i >= 0; i--)
if (ref[i] == 0) sz--;
else break;
+ if (!is_binary)
+ {
+ // trailing spaces are not printed
+ for (i=sz-1; i >= 0; i--)
+ if (ref[i] == 32) sz--;
+ else break;
+ }
+ if (is_binary && f.hex_format)
+ {
+ if (sz == 0)
+ {
+ out.print("0x0");
+ return;
+ }
+ out.print("0x");
+ for (len = 0; len < (int)sz; len++)
+ out.print("%02X", (int)ref[len]);
+ return;
+ }
if (sz == 0) return; // empty
for (len=0; len < (int)sz && ref[i] != 0; len++)
@@ -170,37 +205,68 @@ ndbrecattr_print_string(NdbOut& out, const char *type,
for (i= len+1; ref[i] != 0; i++)
out.print("%u]",len-i);
assert((int)sz > i);
- ndbrecattr_print_string(out,type,aref+i,sz-i);
+ ndbrecattr_print_string(out,f,type,is_binary,aref+i,sz-i);
}
}
-NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
+NdbOut&
+ndbrecattr_print_formatted(NdbOut& out, const NdbRecAttr &r,
+ const NdbRecordPrintFormat &f)
{
if (r.isNULL())
{
- out << "[NULL]";
+ out << f.null_string;
return out;
}
const NdbDictionary::Column* c = r.getColumn();
uint length = c->getLength();
- if (length > 1)
- out << "[";
-
- for (Uint32 j = 0; j < length; j++)
{
- if (j > 0)
- out << " ";
-
+ const char *fields_optionally_enclosed_by;
+ if (f.fields_enclosed_by[0] == '\0')
+ fields_optionally_enclosed_by=
+ f.fields_optionally_enclosed_by;
+ else
+ fields_optionally_enclosed_by= "";
+ out << f.fields_enclosed_by;
+ Uint32 j;
switch(r.getType()){
case NdbDictionary::Column::Bigunsigned:
out << r.u_64_value();
break;
case NdbDictionary::Column::Bit:
- out << hex << "H'" << r.u_32_value() << dec;
+ out << f.hex_prefix << "0x";
+ if (length < 33)
+ {
+ out.print("%X", r.u_32_value());
+ }
+ else if (length < 65)
+ {
+ out.print("%llX", r.u_64_value());
+ }
+ else
+ {
+ const unsigned char *buf = (unsigned char *)r.aRef();
+ int k = 4*((length+31)/32);
+ while (k > 0 && (*(buf + --k) == 0));
+ do
+ {
+ out.print("%X", (Uint32)*(buf + k--));
+ }
+ while (k >= 0);
+ }
break;
case NdbDictionary::Column::Unsigned:
- out << r.u_32_value();
+ if (length > 1)
+ out << f.start_array_enclosure;
+ out << *(Uint32*)r.aRef();
+ for (j = 1; j < length; j++)
+ out << " " << *((Uint32*)r.aRef() + j);
+ if (length > 1)
+ out << f.end_array_enclosure;
+ break;
+ case NdbDictionary::Column::Mediumunsigned:
+ out << r.u_medium_value();
break;
case NdbDictionary::Column::Smallunsigned:
out << r.u_short_value();
@@ -214,6 +280,9 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
case NdbDictionary::Column::Int:
out << r.int32_value();
break;
+ case NdbDictionary::Column::Mediumint:
+ out << r.medium_value();
+ break;
case NdbDictionary::Column::Smallint:
out << r.short_value();
break;
@@ -221,25 +290,37 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
out << (int) r.char_value();
break;
case NdbDictionary::Column::Binary:
+ if (!f.hex_format)
+ out << fields_optionally_enclosed_by;
j = r.arraySize();
- ndbrecattr_print_string(out,"Binary", r.aRef(), j);
+ ndbrecattr_print_string(out,f,"Binary", true, r.aRef(), j);
+ if (!f.hex_format)
+ out << fields_optionally_enclosed_by;
break;
case NdbDictionary::Column::Char:
+ out << fields_optionally_enclosed_by;
j = length;
- ndbrecattr_print_string(out,"Char", r.aRef(), r.arraySize());
+ ndbrecattr_print_string(out,f,"Char", false, r.aRef(), r.arraySize());
+ out << fields_optionally_enclosed_by;
break;
case NdbDictionary::Column::Varchar:
{
+ out << fields_optionally_enclosed_by;
unsigned len = *(const unsigned char*)r.aRef();
- ndbrecattr_print_string(out,"Varchar", r.aRef()+1,len);
+ ndbrecattr_print_string(out,f,"Varchar", false, r.aRef()+1,len);
j = length;
+ out << fields_optionally_enclosed_by;
}
break;
case NdbDictionary::Column::Varbinary:
{
+ if (!f.hex_format)
+ out << fields_optionally_enclosed_by;
unsigned len = *(const unsigned char*)r.aRef();
- ndbrecattr_print_string(out,"Varbinary", r.aRef()+1,len);
+ ndbrecattr_print_string(out,f,"Varbinary", true, r.aRef()+1,len);
j = length;
+ if (!f.hex_format)
+ out << fields_optionally_enclosed_by;
}
break;
case NdbDictionary::Column::Float:
@@ -368,16 +449,26 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
break;
case NdbDictionary::Column::Longvarchar:
{
+ out << fields_optionally_enclosed_by;
+ unsigned len = uint2korr(r.aRef());
+ ndbrecattr_print_string(out,f,"Longvarchar", false, r.aRef()+2,len);
+ j = length;
+ out << fields_optionally_enclosed_by;
+ }
+ break;
+ case NdbDictionary::Column::Longvarbinary:
+ {
+ if (!f.hex_format)
+ out << fields_optionally_enclosed_by;
unsigned len = uint2korr(r.aRef());
- ndbrecattr_print_string(out,"Longvarchar", r.aRef()+2,len);
+ ndbrecattr_print_string(out,f,"Longvarbinary", true, r.aRef()+2,len);
j = length;
+ if (!f.hex_format)
+ out << fields_optionally_enclosed_by;
}
break;
case NdbDictionary::Column::Undefined:
- case NdbDictionary::Column::Mediumint:
- case NdbDictionary::Column::Mediumunsigned:
- case NdbDictionary::Column::Longvarbinary:
unknown:
//default: /* no print functions for the rest, just print type */
out << (int) r.getType();
@@ -386,16 +477,17 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
out << " " << j << " times";
break;
}
- }
-
- if (length > 1)
- {
- out << "]";
+ out << f.fields_enclosed_by;
}
return out;
}
+NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
+{
+ return ndbrecattr_print_formatted(out, r, default_print_format);
+}
+
Int64
NdbRecAttr::int64_value() const
{