101
102
NdbRecAttr::clone() const {
102
103
NdbRecAttr * ret = new NdbRecAttr(0);
104
109
ret->theAttrId = theAttrId;
105
110
ret->m_size_in_bytes = m_size_in_bytes;
106
111
ret->m_column = m_column;
152
NdbRecordPrintFormat::NdbRecordPrintFormat()
154
fields_terminated_by= ";";
155
start_array_enclosure= "[";
156
end_array_enclosure= "]";
157
fields_enclosed_by= "";
158
fields_optionally_enclosed_by= "\"";
159
lines_terminated_by= "\n";
161
null_string= "[NULL]";
164
NdbRecordPrintFormat::~NdbRecordPrintFormat() {}
165
static const NdbRecordPrintFormat default_print_format;
142
ndbrecattr_print_string(NdbOut& out, const char *type,
168
ndbrecattr_print_string(NdbOut& out, const NdbRecordPrintFormat &f,
169
const char *type, bool is_binary,
143
170
const char *aref, unsigned sz)
145
172
const unsigned char* ref = (const unsigned char*)aref;
148
175
for (i=sz-1; i >= 0; i--)
149
176
if (ref[i] == 0) sz--;
180
// trailing spaces are not printed
181
for (i=sz-1; i >= 0; i--)
182
if (ref[i] == 32) sz--;
185
if (is_binary && f.hex_format)
193
for (len = 0; len < (int)sz; len++)
194
out.print("%02X", (int)ref[len]);
151
197
if (sz == 0) return; // empty
153
199
for (len=0; len < (int)sz && ref[i] != 0; len++)
168
214
for (i= len+1; ref[i] != 0; i++)
169
215
out.print("%u]",len-i);
170
216
assert((int)sz > i);
171
ndbrecattr_print_string(out,type,aref+i,sz-i);
217
ndbrecattr_print_string(out,f,type,is_binary,aref+i,sz-i);
175
NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
222
ndbrecattr_print_formatted(NdbOut& out, const NdbRecAttr &r,
223
const NdbRecordPrintFormat &f)
227
out << f.null_string;
183
231
const NdbDictionary::Column* c = r.getColumn();
184
232
uint length = c->getLength();
188
for (Uint32 j = 0; j < length; j++)
234
const char *fields_optionally_enclosed_by;
235
if (f.fields_enclosed_by[0] == '\0')
236
fields_optionally_enclosed_by=
237
f.fields_optionally_enclosed_by;
239
fields_optionally_enclosed_by= "";
240
out << f.fields_enclosed_by;
193
242
switch(r.getType()){
194
243
case NdbDictionary::Column::Bigunsigned:
195
244
out << r.u_64_value();
197
246
case NdbDictionary::Column::Bit:
198
out << hex << "H'" << r.u_32_value() << dec;
247
out << f.hex_prefix << "0x";
249
const Uint32 *buf = (Uint32 *)r.aRef();
250
int k = (length+31)/32;
251
while (k > 0 && (buf[--k] == 0));
252
out.print("%X", buf[k]);
254
out.print("%.8X", buf[--k]);
200
257
case NdbDictionary::Column::Unsigned:
201
out << *((Uint32*)r.aRef() + j);
259
out << f.start_array_enclosure;
260
out << *(Uint32*)r.aRef();
261
for (j = 1; j < length; j++)
262
out << " " << *((Uint32*)r.aRef() + j);
264
out << f.end_array_enclosure;
266
case NdbDictionary::Column::Mediumunsigned:
267
out << r.u_medium_value();
203
269
case NdbDictionary::Column::Smallunsigned:
204
270
out << r.u_short_value();
219
288
out << (int) r.char_value();
221
290
case NdbDictionary::Column::Binary:
292
out << fields_optionally_enclosed_by;
222
293
j = r.get_size_in_bytes();
223
ndbrecattr_print_string(out,"Binary", r.aRef(), j);
294
ndbrecattr_print_string(out,f,"Binary", true, r.aRef(), j);
296
out << fields_optionally_enclosed_by;
225
298
case NdbDictionary::Column::Char:
299
out << fields_optionally_enclosed_by;
226
300
j = r.get_size_in_bytes();
227
ndbrecattr_print_string(out,"Char", r.aRef(), j);
301
ndbrecattr_print_string(out,f,"Char", false, r.aRef(), j);
302
out << fields_optionally_enclosed_by;
229
304
case NdbDictionary::Column::Varchar:
306
out << fields_optionally_enclosed_by;
231
307
unsigned len = *(const unsigned char*)r.aRef();
232
ndbrecattr_print_string(out,"Varchar", r.aRef()+1,len);
308
ndbrecattr_print_string(out,f,"Varchar", false, r.aRef()+1,len);
310
out << fields_optionally_enclosed_by;
236
313
case NdbDictionary::Column::Varbinary:
316
out << fields_optionally_enclosed_by;
238
317
unsigned len = *(const unsigned char*)r.aRef();
239
ndbrecattr_print_string(out,"Varbinary", r.aRef()+1,len);
318
ndbrecattr_print_string(out,f,"Varbinary", true, r.aRef()+1,len);
321
out << fields_optionally_enclosed_by;
243
324
case NdbDictionary::Column::Float:
367
448
case NdbDictionary::Column::Longvarchar:
369
unsigned len = uint2korr(r.aRef());
370
ndbrecattr_print_string(out,"Longvarchar", r.aRef()+2,len);
450
out << fields_optionally_enclosed_by;
451
unsigned len = uint2korr(r.aRef());
452
ndbrecattr_print_string(out,f,"Longvarchar", false, r.aRef()+2,len);
454
out << fields_optionally_enclosed_by;
457
case NdbDictionary::Column::Longvarbinary:
460
out << fields_optionally_enclosed_by;
461
unsigned len = uint2korr(r.aRef());
462
ndbrecattr_print_string(out,f,"Longvarbinary", true, r.aRef()+2,len);
465
out << fields_optionally_enclosed_by;
375
469
case NdbDictionary::Column::Undefined:
376
case NdbDictionary::Column::Mediumint:
377
case NdbDictionary::Column::Mediumunsigned:
378
case NdbDictionary::Column::Longvarbinary:
380
471
//default: /* no print functions for the rest, just print type */
381
472
out << (int) r.getType();
384
475
out << " " << j << " times";
478
out << f.fields_enclosed_by;
484
NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
486
return ndbrecattr_print_formatted(out, r, default_print_format);
398
490
NdbRecAttr::int64_value() const
425
517
memcpy(&val,theRef,sizeof(val));
522
NdbRecAttr::medium_value() const
524
return sint3korr((unsigned char *)theRef);
528
NdbRecAttr::u_medium_value() const
530
return uint3korr((unsigned char*)theRef);