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

Method MakeTopTree

storage/connect/tabjson.cpp:1176–1243  ·  view source on GitHub ↗

/ Make the top tree from the object path. */ /

Source from the content-addressed store, hash-verified

1174/* Make the top tree from the object path. */
1175/***********************************************************************/
1176bool TDBJSN::MakeTopTree(PGLOBAL g, PJSON jsp)
1177{
1178 if (Objname) {
1179 if (!Val) {
1180 // Parse and allocate Objname item(s)
1181 char *p, *objpath = PlugDup(g, Objname);
1182 char *sep = (char*)(Sep == ':' ? ":[" : ".[");
1183 int i;
1184 bool bp = false, b = false;
1185 PJOB objp;
1186 PJAR arp;
1187 PJVAL val = NULL;
1188
1189 Top = NULL;
1190
1191 for (; objpath; objpath = p, bp = b) {
1192 if ((p = strpbrk(objpath + 1, sep))) {
1193 b = (*p == '[');
1194 *p++ = 0;
1195 } // endif p
1196
1197 if (!bp && *objpath != '[' && !IsNum(objpath)) {
1198 objp = new(g) JOBJECT;
1199
1200 if (!Top)
1201 Top = objp;
1202
1203 if (val)
1204 val->SetValue(objp);
1205
1206 val = new(g) JVALUE;
1207 objp->SetKeyValue(g, val, objpath);
1208 } else {
1209 if (bp || *objpath == '[') {
1210 // Old style
1211 if (objpath[strlen(objpath) - 1] != ']') {
1212 snprintf(g->Message, sizeof(g->Message), "Invalid Table path %s", Objname);
1213 return true;
1214 } else if (!bp)
1215 objpath++;
1216
1217 } // endif bp
1218
1219 arp = new(g) JARRAY;
1220
1221 if (!Top)
1222 Top = arp;
1223
1224 if (val)
1225 val->SetValue(arp);
1226
1227 val = new(g) JVALUE;
1228 i = atoi(objpath) - B;
1229 arp->SetArrayValue(g, val, i);
1230 arp->InitArray(g);
1231 } // endif objpath
1232
1233 } // endfor p

Callers

nothing calls this directly

Calls 7

PlugDupFunction · 0.85
IsNumFunction · 0.85
atoiFunction · 0.85
InitArrayMethod · 0.80
SetValueMethod · 0.45
SetKeyValueMethod · 0.45
SetArrayValueMethod · 0.45

Tested by

no test coverage detected