MCPcopy Create free account
hub / github.com/MariaDB/server / Find

Method Find

storage/connect/tabbson.cpp:399–529  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

397} // end of GetColumns
398
399bool BSONDISC::Find(PGLOBAL g, PBVAL jvp, PCSZ key, int j)
400{
401 char *p, *pc = colname + strlen(colname), buf[32];
402 int ars;
403 size_t n;
404 PBVAL job;
405 PBVAL jar;
406
407 if (jvp && !bp->IsJson(jvp)) {
408 if (JsonAllPath() && !fmt[bf])
409 safe_strcat(fmt, sizeof(fmt), colname);
410
411 jcol.Type = (JTYP)jvp->Type;
412
413 switch (jvp->Type) {
414 case TYPE_STRG:
415 case TYPE_DTM:
416 jcol.Len = (int)strlen(bp->GetString(jvp));
417 break;
418 case TYPE_INTG:
419 case TYPE_BINT:
420 jcol.Len = (int)strlen(bp->GetString(jvp, buf));
421 break;
422 case TYPE_DBL:
423 case TYPE_FLOAT:
424 jcol.Len = (int)strlen(bp->GetString(jvp, buf));
425 jcol.Scale = jvp->Nd;
426 break;
427 case TYPE_BOOL:
428 jcol.Len = 1;
429 break;
430 default:
431 jcol.Len = 0;
432 break;
433 } // endswitch Type
434
435 jcol.Scale = jvp->Nd;
436 jcol.Cbn = jvp->Type == TYPE_NULL;
437 } else if (!jvp || bp->IsValueNull(jvp)) {
438 jcol.Type = TYPE_UNKNOWN;
439 jcol.Len = jcol.Scale = 0;
440 jcol.Cbn = true;
441 } else if (j < lvl && !Stringified(strfy, colname)) {
442 if (!fmt[bf])
443 safe_strcat(fmt, sizeof(fmt), colname);
444
445 p = fmt + strlen(fmt);
446 jsp = jvp;
447
448 switch (jsp->Type) {
449 case TYPE_JOB:
450 job = jsp;
451
452 for (PBPR jrp = bp->GetObject(job); jrp; jrp = bp->GetNext(jrp)) {
453 PCSZ k = bp->GetKey(jrp);
454
455 if (*k != '$') {
456 n = sizeof(fmt) - strlen(fmt) - 1;

Callers

nothing calls this directly

Calls 12

JsonAllPathFunction · 0.85
safe_strcatFunction · 0.85
StringifiedFunction · 0.85
IsJsonMethod · 0.80
IsValueNullMethod · 0.80
GetKeyMethod · 0.80
GetVlpMethod · 0.80
GetArraySizeMethod · 0.80
GetStringMethod · 0.45
GetObjectMethod · 0.45
GetNextMethod · 0.45
GetArrayValueMethod · 0.45

Tested by

no test coverage detected