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

Method set_value

sql/sql_acl.cc:1799–1848  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1797 return true;
1798 }
1799 enum json_types set_value(const char *key,
1800 const char *val, size_t vlen, bool string) const
1801 {
1802 int value_len;
1803 const char *value_start;
1804 enum json_types value_type;
1805 json_engine_t temp_je;
1806 MEM_ROOT current_mem_root;
1807
1808 init_alloc_root(PSI_INSTRUMENT_MEM, &current_mem_root,
1809 BLOCK_SIZE_JSON_DYN_ARRAY, 0, MYF(0));
1810
1811 mem_root_dynamic_array_init(&current_mem_root, PSI_INSTRUMENT_MEM,
1812 &temp_je.stack,
1813 sizeof(int), NULL,
1814 JSON_DEPTH_DEFAULT, JSON_DEPTH_INC, MYF(0));
1815
1816 String str, *res= m_table->field[2]->val_str(&str);
1817 if (!res || !res->length())
1818 (res= &str)->set(STRING_WITH_LEN("{}"), m_table->field[2]->charset());
1819 value_type= json_get_object_key(res->ptr(), res->end(), key,
1820 &value_start, &value_len);
1821 if (value_type == JSV_BAD_JSON)
1822 {
1823 free_root(&current_mem_root, MYF(0));
1824 return value_type; // invalid
1825 }
1826 StringBuffer<JSON_SIZE> json(res->charset());
1827 json.copy(res->ptr(), value_start - res->ptr(), res->charset());
1828 if (value_type == JSV_NOTHING)
1829 {
1830 if (value_len)
1831 json.append(',');
1832 json.append('"');
1833 json.append(key, strlen(key));
1834 json.append(STRING_WITH_LEN("\":"));
1835 if (string)
1836 json.append('"');
1837 }
1838 else
1839 value_start+= value_len;
1840 json.append(val, vlen);
1841 if (!value_type && string)
1842 json.append('"');
1843 json.append(value_start, res->end() - value_start);
1844 DBUG_ASSERT((json_valid(json.ptr(), json.length(), json.charset(), &temp_je)));
1845 m_table->field[2]->store(json.ptr(), json.length(), json.charset());
1846 free_root(&current_mem_root, MYF(0));
1847 return value_type;
1848 }
1849 bool set_str_value(const char *key, const char *val, size_t vlen) const
1850 {
1851 char buf[JSON_SIZE];

Callers

nothing calls this directly

Calls 14

init_alloc_rootFunction · 0.85
json_get_object_keyFunction · 0.85
free_rootFunction · 0.85
json_validFunction · 0.85
val_strMethod · 0.45
lengthMethod · 0.45
setMethod · 0.45
charsetMethod · 0.45
ptrMethod · 0.45
endMethod · 0.45
copyMethod · 0.45

Tested by

no test coverage detected