| 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, ¤t_mem_root, |
| 1809 | BLOCK_SIZE_JSON_DYN_ARRAY, 0, MYF(0)); |
| 1810 | |
| 1811 | mem_root_dynamic_array_init(¤t_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(¤t_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(¤t_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]; |
nothing calls this directly
no test coverage detected