| 397 | } // end of GetColumns |
| 398 | |
| 399 | bool 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; |
nothing calls this directly
no test coverage detected