summaryrefslogtreecommitdiff
path: root/sql/my_json_writer.h
diff options
context:
space:
mode:
Diffstat (limited to 'sql/my_json_writer.h')
-rw-r--r--sql/my_json_writer.h186
1 files changed, 127 insertions, 59 deletions
diff --git a/sql/my_json_writer.h b/sql/my_json_writer.h
index f7ae58d9bc8..bc8002de529 100644
--- a/sql/my_json_writer.h
+++ b/sql/my_json_writer.h
@@ -256,63 +256,51 @@ public:
void init(Json_writer *my_writer) { writer= my_writer; }
void add_str(const char* val)
{
- if (unlikely(writer))
writer->add_str(val);
}
void add_str(const char* val, size_t length)
{
- if (unlikely(writer))
writer->add_str(val, length);
}
void add_str(const String &str)
{
- if (unlikely(writer))
writer->add_str(str.ptr(), str.length());
}
void add_str(const LEX_CSTRING &str)
{
- if (unlikely(writer))
writer->add_str(str.str, str.length);
}
void add_str(Item *item)
{
- if (unlikely(writer))
writer->add_str(item);
}
void add_ll(longlong val)
{
- if (unlikely(writer))
writer->add_ll(val);
}
void add_size(longlong val)
{
- if (unlikely(writer))
writer->add_size(val);
}
void add_double(double val)
{
- if (unlikely(writer))
writer->add_double(val);
}
void add_bool(bool val)
{
- if (unlikely(writer))
writer->add_bool(val);
}
void add_null()
{
- if (unlikely(writer))
writer->add_null();
}
void add_table_name(const JOIN_TAB *tab)
{
- if (unlikely(writer))
writer->add_table_name(tab);
}
void add_table_name(const TABLE* table)
{
- if (unlikely(writer))
writer->add_table_name(table);
}
};
@@ -355,55 +343,90 @@ class Json_writer_object : public Json_writer_struct
private:
void add_member(const char *name)
{
- if (unlikely(my_writer))
- my_writer->add_member(name);
+ my_writer->add_member(name);
}
public:
- explicit Json_writer_object(THD *thd);
- explicit Json_writer_object(THD *thd, const char *str);
+ explicit Json_writer_object(THD *thd)
+ : Json_writer_struct(thd)
+ {
+ if (unlikely(my_writer))
+ my_writer->start_object();
+ }
+
+ explicit Json_writer_object(THD* thd, const char *str)
+ : Json_writer_struct(thd)
+ {
+ if (unlikely(my_writer))
+ my_writer->add_member(str).start_object();
+ }
+
+ ~Json_writer_object()
+ {
+ if (my_writer && !closed)
+ my_writer->end_object();
+ closed= TRUE;
+ }
Json_writer_object& add(const char *name, bool value)
{
DBUG_ASSERT(!closed);
- add_member(name);
- context.add_bool(value);
+ if (my_writer)
+ {
+ add_member(name);
+ context.add_bool(value);
+ }
return *this;
}
Json_writer_object& add(const char *name, ulonglong value)
{
DBUG_ASSERT(!closed);
- add_member(name);
- context.add_ll(static_cast<longlong>(value));
+ if (my_writer)
+ {
+ add_member(name);
+ context.add_ll(static_cast<longlong>(value));
+ }
return *this;
}
Json_writer_object& add(const char *name, longlong value)
{
DBUG_ASSERT(!closed);
- add_member(name);
- context.add_ll(value);
+ if (my_writer)
+ {
+ add_member(name);
+ context.add_ll(value);
+ }
return *this;
}
Json_writer_object& add(const char *name, double value)
{
DBUG_ASSERT(!closed);
- add_member(name);
- context.add_double(value);
+ if (my_writer)
+ {
+ add_member(name);
+ context.add_double(value);
+ }
return *this;
}
#ifndef _WIN64
Json_writer_object& add(const char *name, size_t value)
{
DBUG_ASSERT(!closed);
- add_member(name);
- context.add_ll(static_cast<longlong>(value));
+ if (my_writer)
+ {
+ add_member(name);
+ context.add_ll(static_cast<longlong>(value));
+ }
return *this;
}
#endif
Json_writer_object& add(const char *name, const char *value)
{
DBUG_ASSERT(!closed);
- add_member(name);
- context.add_str(value);
+ if (my_writer)
+ {
+ add_member(name);
+ context.add_str(value);
+ }
return *this;
}
Json_writer_object& add(const char *name, const char *value, size_t num_bytes)
@@ -415,46 +438,64 @@ public:
Json_writer_object& add(const char *name, const LEX_CSTRING &value)
{
DBUG_ASSERT(!closed);
- add_member(name);
- context.add_str(value.str, value.length);
+ if (my_writer)
+ {
+ add_member(name);
+ context.add_str(value.str, value.length);
+ }
return *this;
}
Json_writer_object& add(const char *name, Item *value)
{
DBUG_ASSERT(!closed);
- add_member(name);
- context.add_str(value);
+ if (my_writer)
+ {
+ add_member(name);
+ context.add_str(value);
+ }
return *this;
}
Json_writer_object& add_null(const char*name)
{
DBUG_ASSERT(!closed);
- add_member(name);
- context.add_null();
+ if (my_writer)
+ {
+ add_member(name);
+ context.add_null();
+ }
return *this;
}
Json_writer_object& add_table_name(const JOIN_TAB *tab)
{
DBUG_ASSERT(!closed);
- add_member("table");
- context.add_table_name(tab);
+ if (my_writer)
+ {
+ add_member("table");
+ context.add_table_name(tab);
+ }
return *this;
}
Json_writer_object& add_table_name(const TABLE *table)
{
DBUG_ASSERT(!closed);
- add_member("table");
- context.add_table_name(table);
+ if (my_writer)
+ {
+ add_member("table");
+ context.add_table_name(table);
+ }
return *this;
}
Json_writer_object& add_select_number(uint select_number)
{
DBUG_ASSERT(!closed);
- add_member("select_id");
- if (unlikely(select_number >= INT_MAX))
- context.add_str("fake");
- else
- context.add_ll(static_cast<longlong>(select_number));
+ if (my_writer)
+ {
+ add_member("select_id");
+ if (unlikely(select_number >= INT_MAX))
+ context.add_str("fake");
+ else
+ context.add_ll(static_cast<longlong>(select_number));
+ }
return *this;
}
void end()
@@ -464,7 +505,6 @@ public:
my_writer->end_object();
closed= TRUE;
}
- ~Json_writer_object();
};
@@ -479,8 +519,25 @@ public:
class Json_writer_array : public Json_writer_struct
{
public:
- Json_writer_array(THD *thd);
- Json_writer_array(THD *thd, const char *str);
+ Json_writer_array(THD *thd): Json_writer_struct(thd)
+ {
+ if (unlikely(my_writer))
+ my_writer->start_array();
+ }
+
+ Json_writer_array(THD *thd, const char *str) : Json_writer_struct(thd)
+ {
+ if (unlikely(my_writer))
+ my_writer->add_member(str).start_array();
+ }
+ ~Json_writer_array()
+ {
+ if (unlikely(my_writer && !closed))
+ {
+ my_writer->end_array();
+ closed= TRUE;
+ }
+ }
void end()
{
DBUG_ASSERT(!closed);
@@ -492,78 +549,89 @@ public:
Json_writer_array& add(bool value)
{
DBUG_ASSERT(!closed);
- context.add_bool(value);
+ if (my_writer)
+ context.add_bool(value);
return *this;
}
Json_writer_array& add(ulonglong value)
{
DBUG_ASSERT(!closed);
- context.add_ll(static_cast<longlong>(value));
+ if (my_writer)
+ context.add_ll(static_cast<longlong>(value));
return *this;
}
Json_writer_array& add(longlong value)
{
DBUG_ASSERT(!closed);
- context.add_ll(value);
+ if (my_writer)
+ context.add_ll(value);
return *this;
}
Json_writer_array& add(double value)
{
DBUG_ASSERT(!closed);
- context.add_double(value);
+ if (my_writer)
+ context.add_double(value);
return *this;
}
#ifndef _WIN64
Json_writer_array& add(size_t value)
{
DBUG_ASSERT(!closed);
- context.add_ll(static_cast<longlong>(value));
+ if (my_writer)
+ context.add_ll(static_cast<longlong>(value));
return *this;
}
#endif
Json_writer_array& add(const char *value)
{
DBUG_ASSERT(!closed);
- context.add_str(value);
+ if (my_writer)
+ context.add_str(value);
return *this;
}
Json_writer_array& add(const char *value, size_t num_bytes)
{
DBUG_ASSERT(!closed);
- context.add_str(value, num_bytes);
+ if (my_writer)
+ context.add_str(value, num_bytes);
return *this;
}
Json_writer_array& add(const LEX_CSTRING &value)
{
DBUG_ASSERT(!closed);
- context.add_str(value.str, value.length);
+ if (my_writer)
+ context.add_str(value.str, value.length);
return *this;
}
Json_writer_array& add(Item *value)
{
DBUG_ASSERT(!closed);
- context.add_str(value);
+ if (my_writer)
+ context.add_str(value);
return *this;
}
Json_writer_array& add_null()
{
DBUG_ASSERT(!closed);
- context.add_null();
+ if (my_writer)
+ context.add_null();
return *this;
}
Json_writer_array& add_table_name(const JOIN_TAB *tab)
{
DBUG_ASSERT(!closed);
- context.add_table_name(tab);
+ if (my_writer)
+ context.add_table_name(tab);
return *this;
}
Json_writer_array& add_table_name(const TABLE *table)
{
DBUG_ASSERT(!closed);
- context.add_table_name(table);
+ if (my_writer)
+ context.add_table_name(table);
return *this;
}
- ~Json_writer_array();
};
/*