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

Method SetValue

storage/connect/bson.cpp:1618–1687  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1616} // end of SetValue;
1617
1618PBVAL BJSON::SetValue(PBVAL vlp, PVAL valp)
1619{
1620 if (!vlp)
1621 vlp = NewVal();
1622
1623 if (!valp || valp->IsNull()) {
1624 vlp->Type = TYPE_NULL;
1625 } else switch (valp->GetType()) {
1626 case TYPE_DATE:
1627 if (((DTVAL*)valp)->IsFormatted())
1628 vlp->To_Val = DupStr(valp->GetCharValue());
1629 else {
1630 char buf[32];
1631
1632 vlp->To_Val = DupStr(valp->GetCharString(buf));
1633 } // endif Formatted
1634
1635 vlp->Type = TYPE_DTM;
1636 break;
1637 case TYPE_STRING:
1638 vlp->To_Val = DupStr(valp->GetCharValue());
1639 vlp->Type = TYPE_STRG;
1640 break;
1641 case TYPE_DOUBLE:
1642 case TYPE_DECIM:
1643 { double d = valp->GetFloatValue();
1644 int nd = (IsTypeNum(valp->GetType())) ? valp->GetValPrec() : 0;
1645
1646 if (nd > 0 && nd <= 6 && d >= FLT_MIN && d <= FLT_MAX) {
1647 vlp->F = (float)valp->GetFloatValue();
1648 vlp->Type = TYPE_FLOAT;
1649 } else {
1650 double* dp = (double*)BsonSubAlloc(sizeof(double));
1651
1652 *dp = d;
1653 vlp->To_Val = MOF(dp);
1654 vlp->Type = TYPE_DBL;
1655 } // endif Nd
1656
1657 vlp->Nd = MY_MIN(nd, 16);
1658 } break;
1659 case TYPE_TINY:
1660 vlp->B = valp->GetTinyValue() != 0;
1661 vlp->Type = TYPE_BOOL;
1662 break;
1663 case TYPE_INT:
1664 vlp->N = valp->GetIntValue();
1665 vlp->Type = TYPE_INTG;
1666 break;
1667 case TYPE_BIGINT:
1668 if (valp->GetBigintValue() >= INT_MIN32 &&
1669 valp->GetBigintValue() <= INT_MAX32) {
1670 vlp->N = valp->GetIntValue();
1671 vlp->Type = TYPE_INTG;
1672 } else {
1673 longlong* llp = (longlong*)BsonSubAlloc(sizeof(longlong));
1674
1675 *llp = valp->GetBigintValue();

Callers

nothing calls this directly

Calls 9

IsTypeNumFunction · 0.70
IsNullMethod · 0.45
GetTypeMethod · 0.45
GetCharValueMethod · 0.45
GetCharStringMethod · 0.45
GetFloatValueMethod · 0.45
GetTinyValueMethod · 0.45
GetIntValueMethod · 0.45
GetBigintValueMethod · 0.45

Tested by

no test coverage detected