mirror of
https://github.com/tstack/lnav.git
synced 2024-09-11 13:05:51 +03:00
[tests] add some tests for recent additions
Add missing SQLite JSON functions to the help Fix some DB UI issues
This commit is contained in:
parent
3f33d9d17a
commit
b5e19ef3b0
1
.github/workflows/bins.yml
vendored
1
.github/workflows/bins.yml
vendored
@ -6,6 +6,7 @@ on:
|
||||
- master
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- 'test/**'
|
||||
- README.md
|
||||
- NEWS.md
|
||||
- .github/actions/muslbuilder/Dockerfile
|
||||
|
8
NEWS.md
8
NEWS.md
@ -30,6 +30,7 @@ Features:
|
||||
the logs for a container (e.g. `docker://my-container`) or
|
||||
files within a container (e.g.
|
||||
`docker://my-serv/var/log/dpkg.log`).
|
||||
* Added the SQLite JSON functions to the online help.
|
||||
|
||||
Bug Fixes:
|
||||
* When piping data into **lnav**'s stdin, the input used to
|
||||
@ -40,6 +41,13 @@ Bug Fixes:
|
||||
* Binary data piped into stdin should now be treated the same
|
||||
as if it was in a file that was passed on the command-line.
|
||||
|
||||
Interface changes:
|
||||
* The DB view now uses the "alt-text" theme style to draw
|
||||
alternating rows instead of being hard-coded to bold. The
|
||||
alternation is also now done in groups of two rows instead
|
||||
of only a single row. Numbers are also rendered using the
|
||||
"number" theme style as well.
|
||||
|
||||
Breaking changes:
|
||||
* Removed the `-w` command-line option. This option was
|
||||
useful when stdin was not automatically preserved. Since
|
||||
|
@ -133,10 +133,16 @@ struct line_range {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this->lr_end < rhs.lr_end) {
|
||||
// When the start is the same, the longer range has a lower priority
|
||||
// than the shorter range.
|
||||
if (rhs.lr_end == -1) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
if ((this->lr_end == -1) || (this->lr_end > rhs.lr_end)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool operator==(const struct line_range& rhs) const
|
||||
|
@ -36,6 +36,15 @@
|
||||
|
||||
using namespace lnav::roles::literals;
|
||||
|
||||
TEST_CASE("line_range")
|
||||
{
|
||||
line_range lr1{0, 95};
|
||||
line_range lr2{0, -1};
|
||||
|
||||
CHECK(lr2 < lr1);
|
||||
CHECK(!(lr1 < lr2));
|
||||
}
|
||||
|
||||
TEST_CASE("attr_line_t::basic-wrapping")
|
||||
{
|
||||
text_wrap_settings tws = {3, 21};
|
||||
|
@ -349,6 +349,9 @@ println(FILE* file, const attr_line_t& al)
|
||||
case role_t::VCR_TEXT:
|
||||
case role_t::VCR_IDENTIFIER:
|
||||
break;
|
||||
case role_t::VCR_ALT_ROW:
|
||||
line_style |= fmt::emphasis::bold;
|
||||
break;
|
||||
case role_t::VCR_SEARCH:
|
||||
line_style |= fmt::emphasis::reverse;
|
||||
break;
|
||||
|
@ -94,6 +94,10 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
curl_request(const curl_request&) = delete;
|
||||
curl_request(curl_request&&) = delete;
|
||||
void operator=(curl_request&&) = delete;
|
||||
|
||||
virtual ~curl_request() = default;
|
||||
|
||||
const std::string& get_name() const { return this->cr_name; }
|
||||
|
@ -40,7 +40,6 @@
|
||||
|
||||
const char db_label_source::NULL_STR[] = "<NULL>";
|
||||
|
||||
constexpr size_t MAX_COLUMN_WIDTH = 120;
|
||||
constexpr size_t MAX_JSON_WIDTH = 16 * 1024;
|
||||
|
||||
void
|
||||
@ -59,11 +58,11 @@ db_label_source::text_value_for_line(textview_curses& tc,
|
||||
return;
|
||||
}
|
||||
for (int lpc = 0; lpc < (int) this->dls_rows[row].size(); lpc++) {
|
||||
auto actual_col_size
|
||||
= std::min(MAX_COLUMN_WIDTH, this->dls_headers[lpc].hm_column_size);
|
||||
auto actual_col_size = std::min(this->dls_max_column_width,
|
||||
this->dls_headers[lpc].hm_column_size);
|
||||
auto cell_str = scrub_ws(this->dls_rows[row][lpc]);
|
||||
|
||||
truncate_to(cell_str, MAX_COLUMN_WIDTH);
|
||||
truncate_to(cell_str, this->dls_max_column_width);
|
||||
|
||||
auto cell_length
|
||||
= utf8_string_length(cell_str).unwrapOr(actual_col_size);
|
||||
@ -91,9 +90,16 @@ db_label_source::text_attrs_for_line(textview_curses& tc,
|
||||
if (row >= (int) this->dls_rows.size()) {
|
||||
return;
|
||||
}
|
||||
auto alt_row_index = row % 4;
|
||||
if (alt_row_index == 2 || alt_row_index == 3) {
|
||||
sa.emplace_back(lr2, VC_ROLE.value(role_t::VCR_ALT_ROW));
|
||||
}
|
||||
for (size_t lpc = 0; lpc < this->dls_headers.size() - 1; lpc++) {
|
||||
if (row % 2 == 0) {
|
||||
sa.emplace_back(lr2, VC_STYLE.value(text_attrs{A_BOLD}));
|
||||
const auto& hm = this->dls_headers[lpc];
|
||||
|
||||
if (hm.hm_graphable) {
|
||||
lr.lr_end += this->dls_cell_width[lpc];
|
||||
sa.emplace_back(lr, VC_ROLE.value(role_t::VCR_NUMBER));
|
||||
}
|
||||
lr.lr_start += this->dls_cell_width[lpc];
|
||||
lr.lr_end = lr.lr_start + 1;
|
||||
@ -412,11 +418,12 @@ db_overlay_source::list_value_for_overlay(const listview_curses& lv,
|
||||
|
||||
for (size_t lpc = 0; lpc < this->dos_labels->dls_headers.size(); lpc++)
|
||||
{
|
||||
auto actual_col_size = std::min(
|
||||
MAX_COLUMN_WIDTH, dls->dls_headers[lpc].hm_column_size);
|
||||
auto actual_col_size
|
||||
= std::min(dls->dls_max_column_width,
|
||||
dls->dls_headers[lpc].hm_column_size);
|
||||
std::string cell_title = dls->dls_headers[lpc].hm_name;
|
||||
|
||||
truncate_to(cell_title, MAX_COLUMN_WIDTH);
|
||||
truncate_to(cell_title, dls->dls_max_column_width);
|
||||
|
||||
auto cell_length
|
||||
= utf8_string_length(cell_title).unwrapOr(actual_col_size);
|
||||
|
@ -114,6 +114,7 @@ public:
|
||||
text_attrs hm_title_attrs;
|
||||
};
|
||||
|
||||
size_t dls_max_column_width{120};
|
||||
stacked_bar_chart<std::string> dls_chart;
|
||||
std::vector<header_meta> dls_headers;
|
||||
std::vector<std::vector<const char*>> dls_rows;
|
||||
|
@ -500,6 +500,8 @@ format_example_text_for_term(const help_text& ht,
|
||||
|
||||
ex_line.pad_to(50).with_attr_for_all(
|
||||
VC_ROLE.value(role_t::VCR_QUOTED_CODE));
|
||||
auto ex_result
|
||||
= eval(ht, ex).with_attr_for_all(SA_PREFORMATTED.value());
|
||||
alb.append("#")
|
||||
.append(fmt::to_string(count))
|
||||
.append(" ")
|
||||
@ -510,7 +512,7 @@ format_example_text_for_term(const help_text& ht,
|
||||
.append(ex_line, &tws.with_indent(3).with_padding_indent(3))
|
||||
.append("\n")
|
||||
.indent(3)
|
||||
.append(eval(ht, ex), &tws.with_indent(3))
|
||||
.append(ex_result, &tws.with_indent(0))
|
||||
.append("\n");
|
||||
|
||||
count += 1;
|
||||
|
@ -159,8 +159,8 @@ expr COLLATE *collation-name*
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT ('a2' < 'a10'), ('a2' < 'a10' COLLATE naturalnocase)
|
||||
('a2' < 'a10') ('a2' < 'a10' COLLATE naturalnocase)
|
||||
0 1
|
||||
('a2' < 'a10') ('a2' <⋯nocase)
|
||||
0 1
|
||||
|
||||
|
||||
----
|
||||
@ -677,9 +677,9 @@ avg(*X*)
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT ex_procname, avg(ex_duration) FROM lnav_example_log GROUP BY ex_procname
|
||||
ex_procname avg(ex_duration)
|
||||
gw 5
|
||||
hw 2
|
||||
ex_procname avg(ex_⋯ration)
|
||||
gw 5
|
||||
hw 2
|
||||
|
||||
**See Also**
|
||||
:ref:`abs`, :ref:`acos`, :ref:`acosh`, :ref:`asin`, :ref:`asinh`, :ref:`atan2`, :ref:`atan`, :ref:`atanh`, :ref:`atn2`, :ref:`ceil`, :ref:`degrees`, :ref:`exp`, :ref:`floor`, :ref:`log10`, :ref:`log`, :ref:`max`, :ref:`min`, :ref:`pi`, :ref:`power`, :ref:`radians`, :ref:`round`, :ref:`sign`, :ref:`square`, :ref:`sum`, :ref:`total`
|
||||
@ -1654,7 +1654,7 @@ jget(*json*, *ptr*, *\[default\]*)
|
||||
Hello
|
||||
|
||||
**See Also**
|
||||
:ref:`json_concat`, :ref:`json_contains`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`yaml_to_json`
|
||||
:ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
@ -1704,6 +1704,85 @@ joinpath(*path*)
|
||||
----
|
||||
|
||||
|
||||
.. _json:
|
||||
|
||||
json(*X*)
|
||||
^^^^^^^^^
|
||||
|
||||
Verifies that its argument is valid JSON and returns a minified version or throws an error.
|
||||
|
||||
**Parameters**
|
||||
* **X\*** --- The string to interpret as JSON.
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
|
||||
.. _json_array:
|
||||
|
||||
json_array(*X*)
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
Constructs a JSON array from its arguments.
|
||||
|
||||
**Parameters**
|
||||
* **X** --- The values of the JSON array
|
||||
|
||||
**Examples**
|
||||
To create an array of all types:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_array(NULL, 1, 2.1, 'three', json_array(4), json_object('five', 'six'))
|
||||
[null,1,2.1,"three",[4],{"five":"six"}]
|
||||
|
||||
To create an empty array:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_array()
|
||||
[]
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
|
||||
.. _json_array_length:
|
||||
|
||||
json_array_length(*X*, *\[P\]*)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Returns the length of a JSON array.
|
||||
|
||||
**Parameters**
|
||||
* **X\*** --- The JSON object.
|
||||
* **P** --- The path to the array in 'X'.
|
||||
|
||||
**Examples**
|
||||
To get the length of an array:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_array_length('[1, 2, 3]')
|
||||
3
|
||||
|
||||
To get the length of a nested array:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_array_length('{"arr": [1, 2, 3]}', '$.arr')
|
||||
3
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
|
||||
.. _json_concat:
|
||||
|
||||
json_concat(*json*, *value*)
|
||||
@ -1738,7 +1817,7 @@ json_concat(*json*, *value*)
|
||||
[1,2,3,4,5]
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_contains`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`yaml_to_json`
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
@ -1770,7 +1849,89 @@ json_contains(*json*, *value*)
|
||||
1
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_concat`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`yaml_to_json`
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
|
||||
.. _json_each:
|
||||
|
||||
json_each(*X*, *\[P\]*)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
A table-valued-function that returns the children of the top-level JSON value
|
||||
|
||||
**Parameters**
|
||||
* **X\*** --- The JSON value to query
|
||||
* **P** --- The path to the value to query
|
||||
|
||||
**Examples**
|
||||
To iterate over an array:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT * FROM json_each('[null,1,"two",{"three":4.5}]')
|
||||
key value type atom id parent fullkey path
|
||||
0 <NULL> null <NULL> 1 <NULL> $[0] $
|
||||
1 1 integer 1 2 <NULL> $[1] $
|
||||
2 two text two 3 <NULL> $[2] $
|
||||
3 {"three":4.5} object <NULL> 4 <NULL> $[3] $
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
|
||||
.. _json_extract:
|
||||
|
||||
json_extract(*X*, *P*)
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Returns the value(s) from the given JSON at the given path(s).
|
||||
|
||||
**Parameters**
|
||||
* **X\*** --- The JSON value.
|
||||
* **P** --- The path to extract.
|
||||
|
||||
**Examples**
|
||||
To get a number:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_extract('{"num": 1}', '$.num')
|
||||
1
|
||||
|
||||
To get two numbers:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_extract('{"num": 1, "val": 2}', '$.num', '$.val')
|
||||
[1,2]
|
||||
|
||||
To get an object:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_extract('{"obj": {"sub": 1}}', '$.obj')
|
||||
{"sub":1}
|
||||
|
||||
To get a JSON value using the short-hand:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT '{"a":"b"}' -> '$.a'
|
||||
"b"
|
||||
|
||||
To get a SQL value using the short-hand:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT '{"a":"b"}' ->> '$.a'
|
||||
b
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
@ -1801,7 +1962,7 @@ json_group_array(*value*)
|
||||
[1,2,3]
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_group_object`, :ref:`yaml_to_json`
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
@ -1833,7 +1994,316 @@ json_group_object(*name*, *value*)
|
||||
{"a":1,"b":2}
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_group_array`, :ref:`yaml_to_json`
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
|
||||
.. _json_insert:
|
||||
|
||||
json_insert(*X*, *P*, *Y*)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Inserts values into a JSON object/array at the given locations, if it does not already exist
|
||||
|
||||
**Parameters**
|
||||
* **X\*** --- The JSON value to update
|
||||
* **P\*** --- The path to the insertion point. A '#' array index means append the value
|
||||
* **Y\*** --- The value to insert
|
||||
|
||||
**Examples**
|
||||
To append to an array:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_insert('[1, 2]', '$[#]', 3)
|
||||
[1,2,3]
|
||||
|
||||
To update an object:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_insert('{"a": 1}', '$.b', 2)
|
||||
{"a":1,"b":2}
|
||||
|
||||
To ensure a value is set:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_insert('{"a": 1}', '$.a', 2)
|
||||
{"a":1}
|
||||
|
||||
To update multiple values:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_insert('{"a": 1}', '$.b', 2, '$.c', 3)
|
||||
{"a":1,"b":2,"c":3}
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
|
||||
.. _json_object:
|
||||
|
||||
json_object(*N*, *V*)
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Create a JSON object from the given arguments
|
||||
|
||||
**Parameters**
|
||||
* **N\*** --- The property name
|
||||
* **V\*** --- The property value
|
||||
|
||||
**Examples**
|
||||
To create an object:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_object('a', 1, 'b', 'c')
|
||||
{"a":1,"b":"c"}
|
||||
|
||||
To create an empty object:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_object()
|
||||
{}
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
|
||||
.. _json_quote:
|
||||
|
||||
json_quote(*X*)
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
Returns the JSON representation of the given value, if it is not already JSON
|
||||
|
||||
**Parameters**
|
||||
* **X\*** --- The value to convert
|
||||
|
||||
**Examples**
|
||||
To convert a string:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_quote('Hello, World!')
|
||||
"Hello, World!"
|
||||
|
||||
To pass through an existing JSON value:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_quote(json('"Hello, World!"'))
|
||||
"Hello, World!"
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
|
||||
.. _json_remove:
|
||||
|
||||
json_remove(*X*, *P*)
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Removes paths from a JSON value
|
||||
|
||||
**Parameters**
|
||||
* **X\*** --- The JSON value to update
|
||||
* **P** --- The paths to remove
|
||||
|
||||
**Examples**
|
||||
To remove elements of an array:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_remove('[1,2,3]', '$[1]', '$[1]')
|
||||
[1]
|
||||
|
||||
To remove object properties:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_remove('{"a":1,"b":2}', '$.b')
|
||||
{"a":1}
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
|
||||
.. _json_replace:
|
||||
|
||||
json_replace(*X*, *P*, *Y*)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Replaces existing values in a JSON object/array at the given locations
|
||||
|
||||
**Parameters**
|
||||
* **X\*** --- The JSON value to update
|
||||
* **P\*** --- The path to replace
|
||||
* **Y\*** --- The new value for the property
|
||||
|
||||
**Examples**
|
||||
To replace an existing value:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_replace('{"a": 1}', '$.a', 2)
|
||||
{"a":2}
|
||||
|
||||
To replace a value without creating a new property:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_replace('{"a": 1}', '$.a', 2, '$.b', 3)
|
||||
{"a":2}
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
|
||||
.. _json_set:
|
||||
|
||||
json_set(*X*, *P*, *Y*)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Inserts or replaces existing values in a JSON object/array at the given locations
|
||||
|
||||
**Parameters**
|
||||
* **X\*** --- The JSON value to update
|
||||
* **P\*** --- The path to the insertion point. A '#' array index means append the value
|
||||
* **Y\*** --- The value to set
|
||||
|
||||
**Examples**
|
||||
To replace an existing array element:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_set('[1, 2]', '$[1]', 3)
|
||||
[1,3]
|
||||
|
||||
To replace a value and create a new property:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_set('{"a": 1}', '$.a', 2, '$.b', 3)
|
||||
{"a":2,"b":3}
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
|
||||
.. _json_tree:
|
||||
|
||||
json_tree(*X*, *\[P\]*)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
A table-valued-function that recursively descends through a JSON value
|
||||
|
||||
**Parameters**
|
||||
* **X\*** --- The JSON value to query
|
||||
* **P** --- The path to the value to query
|
||||
|
||||
**Examples**
|
||||
To iterate over an array:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT key,value,type,atom,fullkey,path FROM json_tree('[null,1,"two",{"three":4.5}]')
|
||||
key value type atom fullkey path
|
||||
<NULL> [null,1⋯":4.5}] array <NULL> $ $
|
||||
0 <NULL> null <NULL> $[0] $
|
||||
1 1 integer 1 $[1] $
|
||||
2 two text two $[2] $
|
||||
3 {"three":4.5} object <NULL> $[3] $
|
||||
three 4.5 real 4.5 $[3].three $[3]
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
|
||||
.. _json_type:
|
||||
|
||||
json_type(*X*, *\[P\]*)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Returns the type of a JSON value
|
||||
|
||||
**Parameters**
|
||||
* **X\*** --- The JSON value to query
|
||||
* **P** --- The path to the value
|
||||
|
||||
**Examples**
|
||||
To get the type of a value:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_type('[null,1,2.1,"three",{"four":5}]')
|
||||
array
|
||||
|
||||
To get the type of an array element:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_type('[null,1,2.1,"three",{"four":5}]', '$[0]')
|
||||
null
|
||||
|
||||
To get the type of a string:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_type('[null,1,2.1,"three",{"four":5}]', '$[3]')
|
||||
text
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_valid`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
|
||||
.. _json_valid:
|
||||
|
||||
json_valid(*X*)
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
Tests if the given value is valid JSON
|
||||
|
||||
**Parameters**
|
||||
* **X\*** --- The value to check
|
||||
|
||||
**Examples**
|
||||
To check an empty string:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_valid('')
|
||||
0
|
||||
|
||||
To check a string:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT json_valid('"a"')
|
||||
1
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json`, :ref:`yaml_to_json`
|
||||
|
||||
----
|
||||
|
||||
@ -2817,9 +3287,9 @@ regexp_capture_into_json(*string*, *pattern*, *\[options\]*)
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT * FROM regexp_capture_into_json('a=1; b=2', '(\w+)=(\d+)')
|
||||
match_index content
|
||||
0 {"col_0":"a","col_1":1}
|
||||
1 {"col_0":"b","col_1":2}
|
||||
match_index content
|
||||
0 {"col_0⋯l_1":1}
|
||||
1 {"col_0⋯l_1":2}
|
||||
|
||||
**See Also**
|
||||
:ref:`anonymize`, :ref:`char`, :ref:`charindex`, :ref:`decode`, :ref:`encode`, :ref:`endswith`, :ref:`extract`, :ref:`group_concat`, :ref:`group_spooky_hash_agg`, :ref:`gunzip`, :ref:`gzip`, :ref:`humanize_duration`, :ref:`humanize_file_size`, :ref:`instr`, :ref:`leftstr`, :ref:`length`, :ref:`logfmt2json`, :ref:`lower`, :ref:`ltrim`, :ref:`padc`, :ref:`padl`, :ref:`padr`, :ref:`parse_url`, :ref:`printf`, :ref:`proper`, :ref:`regexp_capture`, :ref:`regexp_match`, :ref:`regexp_replace`, :ref:`replace`, :ref:`replicate`, :ref:`reverse`, :ref:`rightstr`, :ref:`rtrim`, :ref:`sparkline`, :ref:`spooky_hash`, :ref:`startswith`, :ref:`strfilter`, :ref:`substr`, :ref:`trim`, :ref:`unicode`, :ref:`unparse_url`, :ref:`upper`, :ref:`xpath`
|
||||
@ -3590,19 +4060,19 @@ timeslice(*time*, *slice*)
|
||||
|
||||
;SELECT timeslice(log_time_msecs, '5m') AS slice, count(1)
|
||||
FROM lnav_example_log GROUP BY slice
|
||||
slice count(1)
|
||||
2017-02-03 04:05:00.000 2
|
||||
2017-02-03 04:25:00.000 1
|
||||
2017-02-03 04:55:00.000 1
|
||||
slice count(1)
|
||||
2017-02⋯:00.000 2
|
||||
2017-02⋯:00.000 1
|
||||
2017-02⋯:00.000 1
|
||||
|
||||
To group log messages by those before 4:30am and after:
|
||||
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT timeslice(log_time_msecs, 'before 4:30am') AS slice, count(1) FROM lnav_example_log GROUP BY slice
|
||||
slice count(1)
|
||||
<NULL> 1
|
||||
2017-02-03 00:00:00.000 3
|
||||
slice count(1)
|
||||
<NULL> 1
|
||||
2017-02⋯:00.000 3
|
||||
|
||||
**See Also**
|
||||
:ref:`date`, :ref:`datetime`, :ref:`humanize_duration`, :ref:`julianday`, :ref:`strftime`, :ref:`time`, :ref:`timediff`
|
||||
@ -3809,9 +4279,9 @@ xpath(*xpath*, *xmldoc*)
|
||||
.. code-block:: custsqlite
|
||||
|
||||
;SELECT * FROM xpath('/abc/def', '<abc><def a="b">Hello</def><def>Bye</def></abc>')
|
||||
result node_path node_attr node_text
|
||||
<def a="b">Hello</def>␊ /abc/def[1] {"a":"b"} Hello
|
||||
<def>Bye</def>␊ /abc/def[2] {} Bye
|
||||
result node_path node_attr node_text
|
||||
<def a=⋯</def>␊ /abc/def[1] {"a":"b"} Hello
|
||||
<def>Bye</def>␊ /abc/def[2] {} Bye
|
||||
|
||||
To select all 'a' attributes on the path '/abc/def':
|
||||
|
||||
@ -3854,7 +4324,7 @@ yaml_to_json(*yaml*)
|
||||
{"abc": "def"}
|
||||
|
||||
**See Also**
|
||||
:ref:`jget`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_group_array`, :ref:`json_group_object`
|
||||
:ref:`jget`, :ref:`json_array_length`, :ref:`json_array`, :ref:`json_concat`, :ref:`json_contains`, :ref:`json_each`, :ref:`json_extract`, :ref:`json_group_array`, :ref:`json_group_object`, :ref:`json_insert`, :ref:`json_object`, :ref:`json_quote`, :ref:`json_remove`, :ref:`json_replace`, :ref:`json_set`, :ref:`json_tree`, :ref:`json_type`, :ref:`json_valid`, :ref:`json`
|
||||
|
||||
----
|
||||
|
||||
|
14
src/lnav.cc
14
src/lnav.cc
@ -202,21 +202,23 @@ const std::vector<std::string> lnav_zoom_strings = {
|
||||
};
|
||||
|
||||
static const std::vector<std::string> DEFAULT_DB_KEY_NAMES = {
|
||||
"match_index",
|
||||
"capture_index",
|
||||
"capture_count",
|
||||
"capture_index",
|
||||
"device",
|
||||
"id",
|
||||
"inode",
|
||||
"key",
|
||||
"match_index",
|
||||
"parent",
|
||||
"range_start",
|
||||
"range_stop",
|
||||
"inode",
|
||||
"device",
|
||||
"inode",
|
||||
"rowid",
|
||||
"st_dev",
|
||||
"st_gid",
|
||||
"st_ino",
|
||||
"st_mode",
|
||||
"st_rdev",
|
||||
"st_uid",
|
||||
"st_gid",
|
||||
};
|
||||
|
||||
static auto bound_pollable_supervisor
|
||||
|
@ -462,14 +462,15 @@ schema_foreign_key_list(void* ptr, int ncols, char** colvalues, char** colnames)
|
||||
void
|
||||
dump_sqlite_schema(sqlite3* db, std::string& schema_out)
|
||||
{
|
||||
struct sqlite_metadata_callbacks schema_sql_meta_callbacks
|
||||
= {schema_collation_list,
|
||||
schema_db_list,
|
||||
schema_table_list,
|
||||
schema_table_info,
|
||||
schema_foreign_key_list,
|
||||
&schema_out,
|
||||
{}};
|
||||
struct sqlite_metadata_callbacks schema_sql_meta_callbacks = {
|
||||
schema_collation_list,
|
||||
schema_db_list,
|
||||
schema_table_list,
|
||||
schema_table_info,
|
||||
schema_foreign_key_list,
|
||||
&schema_out,
|
||||
{},
|
||||
};
|
||||
|
||||
walk_sqlite_metadata(db, schema_sql_meta_callbacks);
|
||||
}
|
||||
@ -1038,7 +1039,8 @@ annotate_sql_statement(attr_line_t& al)
|
||||
&SQL_COMMENT_ATTR,
|
||||
},
|
||||
{
|
||||
lnav::pcre2pp::code::from_const(R"(\A(\*|<|>|=|!|\-|\+|\|\|))"),
|
||||
lnav::pcre2pp::code::from_const(
|
||||
R"(\A(\*|\->{1,2}|<|>|=|!|\-|\+|\|\|))"),
|
||||
&SQL_OPERATOR_ATTR,
|
||||
},
|
||||
{
|
||||
|
@ -749,7 +749,209 @@ register_sqlite_funcs(sqlite3* db, sqlite_registration_func_t* reg_funcs)
|
||||
"SELECT value FROM generate_series(10, 14, 2)",
|
||||
})
|
||||
.with_example({"To count down from five to 1",
|
||||
"SELECT value FROM generate_series(1, 5, -1)"})};
|
||||
"SELECT value FROM generate_series(1, 5, -1)"}),
|
||||
|
||||
help_text("json",
|
||||
"Verifies that its argument is valid JSON and returns a "
|
||||
"minified version or throws an error.")
|
||||
.sql_function()
|
||||
.with_parameter({"X", "The string to interpret as JSON."})
|
||||
.with_tags({"json"}),
|
||||
|
||||
help_text("json_array", "Constructs a JSON array from its arguments.")
|
||||
.sql_function()
|
||||
.with_parameter(
|
||||
help_text{"X", "The values of the JSON array"}.zero_or_more())
|
||||
.with_tags({"json"})
|
||||
.with_example({"To create an array of all types",
|
||||
"SELECT json_array(NULL, 1, 2.1, 'three', "
|
||||
"json_array(4), json_object('five', 'six'))"})
|
||||
.with_example({"To create an empty array", "SELECT json_array()"}),
|
||||
|
||||
help_text("json_array_length", "Returns the length of a JSON array.")
|
||||
.sql_function()
|
||||
.with_parameter({"X", "The JSON object."})
|
||||
.with_parameter(
|
||||
help_text{"P", "The path to the array in 'X'."}.optional())
|
||||
.with_tags({"json"})
|
||||
.with_example({"To get the length of an array",
|
||||
"SELECT json_array_length('[1, 2, 3]')"})
|
||||
.with_example(
|
||||
{"To get the length of a nested array",
|
||||
"SELECT json_array_length('{\"arr\": [1, 2, 3]}', '$.arr')"}),
|
||||
|
||||
help_text(
|
||||
"json_extract",
|
||||
"Returns the value(s) from the given JSON at the given path(s).")
|
||||
.sql_function()
|
||||
.with_parameter({"X", "The JSON value."})
|
||||
.with_parameter(
|
||||
help_text{"P", "The path to extract."}.one_or_more())
|
||||
.with_tags({"json"})
|
||||
.with_example({"To get a number",
|
||||
R"(SELECT json_extract('{"num": 1}', '$.num'))"})
|
||||
.with_example(
|
||||
{"To get two numbers",
|
||||
R"(SELECT json_extract('{"num": 1, "val": 2}', '$.num', '$.val'))"})
|
||||
.with_example(
|
||||
{"To get an object",
|
||||
R"(SELECT json_extract('{"obj": {"sub": 1}}', '$.obj'))"})
|
||||
#if SQLITE_VERSION_NUMBER >= 3038000
|
||||
.with_example({"To get a JSON value using the short-hand",
|
||||
R"(SELECT '{"a":"b"}' -> '$.a')"})
|
||||
.with_example({"To get a SQL value using the short-hand",
|
||||
R"(SELECT '{"a":"b"}' ->> '$.a')"})
|
||||
#endif
|
||||
,
|
||||
|
||||
help_text("json_insert",
|
||||
"Inserts values into a JSON object/array at the given "
|
||||
"locations, if it does not already exist")
|
||||
.sql_function()
|
||||
.with_parameter({"X", "The JSON value to update"})
|
||||
.with_parameter({"P",
|
||||
"The path to the insertion point. A '#' array "
|
||||
"index means append the value"})
|
||||
.with_parameter({"Y", "The value to insert"})
|
||||
.with_tags({"json"})
|
||||
.with_example({"To append to an array",
|
||||
R"(SELECT json_insert('[1, 2]', '$[#]', 3))"})
|
||||
.with_example({"To update an object",
|
||||
R"(SELECT json_insert('{"a": 1}', '$.b', 2))"})
|
||||
.with_example({"To ensure a value is set",
|
||||
R"(SELECT json_insert('{"a": 1}', '$.a', 2))"})
|
||||
.with_example(
|
||||
{"To update multiple values",
|
||||
R"(SELECT json_insert('{"a": 1}', '$.b', 2, '$.c', 3))"}),
|
||||
|
||||
help_text("json_replace",
|
||||
"Replaces existing values in a JSON object/array at the "
|
||||
"given locations")
|
||||
.sql_function()
|
||||
.with_parameter({"X", "The JSON value to update"})
|
||||
.with_parameter({"P", "The path to replace"})
|
||||
.with_parameter({"Y", "The new value for the property"})
|
||||
.with_tags({"json"})
|
||||
.with_example({"To replace an existing value",
|
||||
R"(SELECT json_replace('{"a": 1}', '$.a', 2))"})
|
||||
.with_example(
|
||||
{"To replace a value without creating a new property",
|
||||
R"(SELECT json_replace('{"a": 1}', '$.a', 2, '$.b', 3))"}),
|
||||
|
||||
help_text("json_set",
|
||||
"Inserts or replaces existing values in a JSON object/array "
|
||||
"at the given locations")
|
||||
.sql_function()
|
||||
.with_parameter({"X", "The JSON value to update"})
|
||||
.with_parameter({"P",
|
||||
"The path to the insertion point. A '#' array "
|
||||
"index means append the value"})
|
||||
.with_parameter({"Y", "The value to set"})
|
||||
.with_tags({"json"})
|
||||
.with_example({"To replace an existing array element",
|
||||
R"(SELECT json_set('[1, 2]', '$[1]', 3))"})
|
||||
.with_example(
|
||||
{"To replace a value and create a new property",
|
||||
R"(SELECT json_set('{"a": 1}', '$.a', 2, '$.b', 3))"}),
|
||||
|
||||
help_text("json_object",
|
||||
"Create a JSON object from the given arguments")
|
||||
.sql_function()
|
||||
.with_parameter({"N", "The property name"})
|
||||
.with_parameter({"V", "The property value"})
|
||||
.with_tags({"json"})
|
||||
.with_example(
|
||||
{"To create an object", "SELECT json_object('a', 1, 'b', 'c')"})
|
||||
.with_example(
|
||||
{"To create an empty object", "SELECT json_object()"}),
|
||||
|
||||
help_text("json_remove", "Removes paths from a JSON value")
|
||||
.sql_function()
|
||||
.with_parameter({"X", "The JSON value to update"})
|
||||
.with_parameter(help_text{"P", "The paths to remove"}.one_or_more())
|
||||
.with_tags({"json"})
|
||||
.with_example({"To remove elements of an array",
|
||||
"SELECT json_remove('[1,2,3]', '$[1]', '$[1]')"})
|
||||
.with_example({"To remove object properties",
|
||||
R"(SELECT json_remove('{"a":1,"b":2}', '$.b'))"}),
|
||||
|
||||
help_text("json_type", "Returns the type of a JSON value")
|
||||
.sql_function()
|
||||
.with_parameter({"X", "The JSON value to query"})
|
||||
.with_parameter(help_text{"P", "The path to the value"}.optional())
|
||||
.with_tags({"json"})
|
||||
.with_example(
|
||||
{"To get the type of a value",
|
||||
R"(SELECT json_type('[null,1,2.1,"three",{"four":5}]'))"})
|
||||
.with_example(
|
||||
{"To get the type of an array element",
|
||||
R"(SELECT json_type('[null,1,2.1,"three",{"four":5}]', '$[0]'))"})
|
||||
.with_example(
|
||||
{"To get the type of a string",
|
||||
R"(SELECT json_type('[null,1,2.1,"three",{"four":5}]', '$[3]'))"}),
|
||||
|
||||
help_text("json_valid", "Tests if the given value is valid JSON")
|
||||
.sql_function()
|
||||
.with_parameter({"X", "The value to check"})
|
||||
.with_tags({"json"})
|
||||
.with_example({"To check an empty string", "SELECT json_valid('')"})
|
||||
.with_example({"To check a string", R"(SELECT json_valid('"a"'))"}),
|
||||
|
||||
help_text("json_quote",
|
||||
"Returns the JSON representation of the given value, if it "
|
||||
"is not already JSON")
|
||||
.sql_function()
|
||||
.with_parameter({"X", "The value to convert"})
|
||||
.with_tags({"json"})
|
||||
.with_example(
|
||||
{"To convert a string", "SELECT json_quote('Hello, World!')"})
|
||||
.with_example({"To pass through an existing JSON value",
|
||||
R"(SELECT json_quote(json('"Hello, World!"')))"}),
|
||||
|
||||
help_text("json_each",
|
||||
"A table-valued-function that returns the children of the "
|
||||
"top-level JSON value")
|
||||
.sql_table_valued_function()
|
||||
.with_parameter({"X", "The JSON value to query"})
|
||||
.with_parameter(
|
||||
help_text{"P", "The path to the value to query"}.optional())
|
||||
.with_result({"key",
|
||||
"The array index for elements of an array or "
|
||||
"property names of the object"})
|
||||
.with_result({"value", "The value for the current element"})
|
||||
.with_result({"type", "The type of the current element"})
|
||||
.with_result(
|
||||
{"atom",
|
||||
"The SQL value of the element, if it is a primitive type"})
|
||||
.with_result({"fullkey", "The path to the current element"})
|
||||
.with_tags({"json"})
|
||||
.with_example(
|
||||
{"To iterate over an array",
|
||||
R"(SELECT * FROM json_each('[null,1,"two",{"three":4.5}]'))"}),
|
||||
|
||||
help_text("json_tree",
|
||||
"A table-valued-function that recursively descends through a "
|
||||
"JSON value")
|
||||
.sql_table_valued_function()
|
||||
.with_parameter({"X", "The JSON value to query"})
|
||||
.with_parameter(
|
||||
help_text{"P", "The path to the value to query"}.optional())
|
||||
.with_result({"key",
|
||||
"The array index for elements of an array or "
|
||||
"property names of the object"})
|
||||
.with_result({"value", "The value for the current element"})
|
||||
.with_result({"type", "The type of the current element"})
|
||||
.with_result(
|
||||
{"atom",
|
||||
"The SQL value of the element, if it is a primitive type"})
|
||||
.with_result({"fullkey", "The path to the current element"})
|
||||
.with_result({"path", "The path to the container of this element"})
|
||||
.with_tags({"json"})
|
||||
.with_example(
|
||||
{"To iterate over an array",
|
||||
R"(SELECT key,value,type,atom,fullkey,path FROM json_tree('[null,1,"two",{"three":4.5}]'))"})
|
||||
|
||||
};
|
||||
|
||||
if (!help_registration_done) {
|
||||
for (auto& ht : builtin_funcs) {
|
||||
|
@ -24,8 +24,7 @@
|
||||
},
|
||||
"alt-text": {
|
||||
"color": "#f6f6f6",
|
||||
"background-color": "$black",
|
||||
"bold": true
|
||||
"background-color": "#1c1c1c"
|
||||
},
|
||||
"ok": {
|
||||
"color": "$green",
|
||||
|
@ -823,8 +823,10 @@ execute_examples()
|
||||
db_overlay_source& dos = lnav_data.ld_db_overlay;
|
||||
textview_curses& db_tc = lnav_data.ld_views[LNV_DB];
|
||||
|
||||
auto old_width = dls.dls_max_column_width;
|
||||
dls.dls_max_column_width = 15;
|
||||
for (auto& help_iter : sqlite_function_help) {
|
||||
struct help_text& ht = *(help_iter.second);
|
||||
auto& ht = *(help_iter.second);
|
||||
|
||||
for (auto& ex : ht.ht_example) {
|
||||
std::string alt_msg;
|
||||
@ -878,6 +880,7 @@ execute_examples()
|
||||
}
|
||||
}
|
||||
}
|
||||
dls.dls_max_column_width = old_width;
|
||||
|
||||
dls.clear();
|
||||
}
|
||||
|
@ -552,6 +552,8 @@ EXPECTED_FILES = \
|
||||
$(srcdir)/%reldir%/test_sql_anno.sh_0a37c43350ddd7a2d0d75695be32fac083ad04a4.out \
|
||||
$(srcdir)/%reldir%/test_sql_anno.sh_1151e5b727f6b57070bf2c8f047f1d7e02b803a6.err \
|
||||
$(srcdir)/%reldir%/test_sql_anno.sh_1151e5b727f6b57070bf2c8f047f1d7e02b803a6.out \
|
||||
$(srcdir)/%reldir%/test_sql_anno.sh_1398146cf8b4f074ec8b9752f021cf47d011bebc.err \
|
||||
$(srcdir)/%reldir%/test_sql_anno.sh_1398146cf8b4f074ec8b9752f021cf47d011bebc.out \
|
||||
$(srcdir)/%reldir%/test_sql_anno.sh_1b29488b949c294479aa6054f80a35bc106b454b.err \
|
||||
$(srcdir)/%reldir%/test_sql_anno.sh_1b29488b949c294479aa6054f80a35bc106b454b.out \
|
||||
$(srcdir)/%reldir%/test_sql_anno.sh_331a152080d2e278b7cc0a37728eca1ded36ed72.err \
|
||||
@ -774,6 +776,8 @@ EXPECTED_FILES = \
|
||||
$(srcdir)/%reldir%/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.out \
|
||||
$(srcdir)/%reldir%/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.err \
|
||||
$(srcdir)/%reldir%/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_00363f89638cb968584afc1ca0a4f52b2cf7a2ae.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_00363f89638cb968584afc1ca0a4f52b2cf7a2ae.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_005b9365ac99596e539f47c9fe432668c209b21f.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_005b9365ac99596e539f47c9fe432668c209b21f.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_04712488fe50554eb36d3ced80f9a033602f3daa.err \
|
||||
@ -788,6 +792,8 @@ EXPECTED_FILES = \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_129e58679e72f3cc5864812026e49a7917baf3d0.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_151a0fd71ef6837c8cbd8a67e315019b5812b079.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_151a0fd71ef6837c8cbd8a67e315019b5812b079.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_1a1e07b6f72bce5402037761fa8afd66c05b4c34.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_1a1e07b6f72bce5402037761fa8afd66c05b4c34.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_1e7362ac3d9690b1b2cfbd320b6129c46ecfbb8a.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_1e7362ac3d9690b1b2cfbd320b6129c46ecfbb8a.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_211c5428db0590795072c31cb116ef35281e02b5.err \
|
||||
@ -810,6 +816,8 @@ EXPECTED_FILES = \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_5203db1a4a81e43a693f339fd26e1ed635da9d5a.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_5203db1a4a81e43a693f339fd26e1ed635da9d5a.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_57fc889eefb98571ecf3892ad670646613bf13a3.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_57fc889eefb98571ecf3892ad670646613bf13a3.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_5abe3717393fba14ec510a37b4b94fedc67aae8e.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_5abe3717393fba14ec510a37b4b94fedc67aae8e.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_5e436fbd4efb140600999c5208886a5a57b8a30e.err \
|
||||
@ -822,6 +830,8 @@ EXPECTED_FILES = \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_660288b48d9b30244621d873944938f7ef043976.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_6607c0dd8baff16930eb3e0daf6354af5b50052b.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_6607c0dd8baff16930eb3e0daf6354af5b50052b.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_68860c50e91cd6c1f2004ee0414a6e930ed42c87.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_68860c50e91cd6c1f2004ee0414a6e930ed42c87.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_69f5d49e62da48e188bd9d6af4bd3adeb21eb7d1.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_69f5d49e62da48e188bd9d6af4bd3adeb21eb7d1.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_6ac7ab1f90c064944ff66bef5974f050c8227d4b.err \
|
||||
@ -878,6 +888,8 @@ EXPECTED_FILES = \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_b2aafbcaa7befe426d3f9df71c24f16fdc9d2856.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_b81b27abfafbd357d41c407428d41ae0f4bb75e2.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_b81b27abfafbd357d41c407428d41ae0f4bb75e2.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_b8ebe81c4881f704624a65ec91be0868c310f6ed.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_b8ebe81c4881f704624a65ec91be0868c310f6ed.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_bfb7088916412360f77683009058b0747784630a.err \
|
||||
@ -890,6 +902,8 @@ EXPECTED_FILES = \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_c9e2f41431bef879364dc37a472ab01f64d89f89.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_cc53348c585ee71a7456157ad6b125689813bafe.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_cc53348c585ee71a7456157ad6b125689813bafe.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_cdc7b869132c33cae3c2565806c2396e1b4d6253.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_cdc7b869132c33cae3c2565806c2396e1b4d6253.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_ce9db1dbc2e5fee87247135d17787ff3af014d77.err \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_ce9db1dbc2e5fee87247135d17787ff3af014d77.out \
|
||||
$(srcdir)/%reldir%/test_sql_str_func.sh_d3367527118052081a541a660b091f6f495b1c0d.err \
|
||||
|
@ -1,4 +1,4 @@
|
||||
Feb 25 16:20:12 192.168.4.2 haproxy[7]: 87.183.41.77:50187 [25/Feb/2019:16:20:12.325] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 1859 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/pi_popup/1.1.0/magnific-popup.css?1550939704 HTTP/1.1"
|
||||
Feb 25 16:20:12 192.168.4.2 haproxy[7]: 95.216.197.33:56224 [25/Feb/2019:16:20:10.111] prod_http_in/sktst2: SSL handshake failure
|
||||
Feb 25 16:20:12 192.168.4.2 haproxy[7]: 87.183.41.77:50189 [25/Feb/2019:16:20:12.331] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 2496 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/core/core.css?1550939640 HTTP/1.1"
|
||||
Feb 25 16:20:12 192.168.4.2 haproxy[7]: 87.183.41.77:50187 [25/Feb/2019:16:20:12.325] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 1859 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/pi_popup/1.1.0/magnific-popup.css?1550939704 HTTP/1.1"
|
||||
Feb 25 16:20:12 192.168.4.2 haproxy[7]: 87.183.41.77:50188 [25/Feb/2019:16:20:12.321] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 5959 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/pi_fontawesome/css/font-awesome.css?1550939694 HTTP/1.1"
|
||||
|
@ -1,2 +1,2 @@
|
||||
[1m[4mfilepath [0m[1m[4m[7mlines [0m
|
||||
[1m[7mstdin [0m[1m[7m [0m[1m[7m 4[0m[1m [0m
|
||||
[7mstdin [0m[7m [0m[7m 4[0m
|
||||
|
@ -2669,8 +2669,11 @@ For support questions, email:
|
||||
[4mptr[0m The JSON-Pointer to lookup in the object.
|
||||
[4mdefault[0m The default value if the value was not found
|
||||
[4mSee Also[0m
|
||||
[1mjson_concat()[0m, [1mjson_contains()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m, [1myaml_to_json()[0m
|
||||
[1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m, [1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m,
|
||||
[1mjson_remove()[0m, [1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m,
|
||||
[1mjson_valid()[0m, [1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To get the root of a JSON value:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjget[0m[37m[40m([0m[35m[40m'1'[0m[37m[40m, [0m[35m[40m''[0m[37m[40m) [0m
|
||||
@ -2713,6 +2716,62 @@ For support questions, email:
|
||||
|
||||
|
||||
|
||||
[1m[4mjson[0m[4m([0m[4mX[0m[4m)[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Verifies that its argument is valid JSON and returns a minified
|
||||
version or throws an error.
|
||||
[4mParameter[0m
|
||||
[4mX[0m The string to interpret as JSON.
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m, [1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m,
|
||||
[1mjson_remove()[0m, [1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m,
|
||||
[1mjson_valid()[0m, [1myaml_to_json()[0m
|
||||
|
||||
[1m[4mjson_array[0m[4m([0m[4mX[0m[4m, ...)[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Constructs a JSON array from its arguments.
|
||||
[4mParameter[0m
|
||||
[4mX[0m The values of the JSON array
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m, [1mjson_contains()[0m,
|
||||
[1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m, [1mjson_group_object()[0m,
|
||||
[1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m, [1mjson_remove()[0m,
|
||||
[1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To create an array of all types:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_array[0m[37m[40m([0m[1m[36m[40mNULL[0m[37m[40m, [0m[1m[37m[40m1[0m[37m[40m, [0m[1m[37m[40m2.1[0m[37m[40m, [0m[35m[40m'three'[0m[37m[40m, [0m[1m[37m[40mjson_array[0m[37m[40m([0m[1m[37m[40m4[0m[37m[40m), [0m[1m[37m[40mjson_object[0m[37m[40m([0m[35m[40m'five'[0m[37m[40m, [0m[35m[40m'six'[0m[37m[40m))[0m
|
||||
|
||||
|
||||
#2 To create an empty array:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_array[0m[37m[40m() [0m
|
||||
|
||||
|
||||
|
||||
[1m[4mjson_array_length[0m[4m([0m[4mX[0m[4m, [[0m[4mP[0m[4m])[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Returns the length of a JSON array.
|
||||
[4mParameters[0m
|
||||
[4mX[0m The JSON object.
|
||||
[4mP[0m The path to the array in 'X'.
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_concat()[0m, [1mjson_contains()[0m,
|
||||
[1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m, [1mjson_group_object()[0m,
|
||||
[1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m, [1mjson_remove()[0m,
|
||||
[1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To get the length of an array:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_array_length[0m[37m[40m([0m[35m[40m'[1, 2, 3]'[0m[37m[40m) [0m
|
||||
|
||||
|
||||
#2 To get the length of a nested array:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_array_length[0m[37m[40m([0m[35m[40m'{"arr": [1, 2, 3]}'[0m[37m[40m, [0m[35m[40m'$.arr'[0m[37m[40m)[0m
|
||||
|
||||
|
||||
|
||||
[1m[4mjson_concat[0m[4m([0m[4mjson[0m[4m, [0m[4mvalue[0m[4m, ...)[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Returns an array with the given values concatenated onto the end.
|
||||
@ -2725,7 +2784,10 @@ For support questions, email:
|
||||
[4mjson[0m The initial JSON value.
|
||||
[4mvalue[0m The value(s) to add to the end of the array.
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson_contains()[0m, [1mjson_group_array()[0m, [1mjson_group_object()[0m,
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_contains()[0m,
|
||||
[1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m, [1mjson_group_object()[0m,
|
||||
[1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m, [1mjson_remove()[0m,
|
||||
[1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To append the number 4 to null:
|
||||
@ -2748,7 +2810,10 @@ For support questions, email:
|
||||
[4mjson[0m The JSON value to query.
|
||||
[4mvalue[0m The value to look for in the first argument
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson_concat()[0m, [1mjson_group_array()[0m, [1mjson_group_object()[0m,
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m, [1mjson_group_object()[0m,
|
||||
[1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m, [1mjson_remove()[0m,
|
||||
[1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To test if a JSON array contains the number 4:
|
||||
@ -2760,13 +2825,77 @@ For support questions, email:
|
||||
|
||||
|
||||
|
||||
[1m[4mjson_each[0m[4m([0m[4mX[0m[4m, [[0m[4mP[0m[4m])[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
A table-valued-function that returns the children of the top-level
|
||||
JSON value
|
||||
[4mParameters[0m
|
||||
[4mX[0m The JSON value to query
|
||||
[4mP[0m The path to the value to query
|
||||
[4mResults[0m
|
||||
[4mkey[0m The array index for elements of an array or
|
||||
property names of the object
|
||||
[4mvalue[0m The value for the current element
|
||||
[4mtype[0m The type of the current element
|
||||
[4matom[0m The SQL value of the element, if it is a
|
||||
primitive type
|
||||
[4mfullkey[0m The path to the current element
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m, [1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m,
|
||||
[1mjson_remove()[0m, [1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m,
|
||||
[1mjson_valid()[0m, [1myaml_to_json()[0m
|
||||
[4mExample[0m
|
||||
#1 To iterate over an array:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40m*[0m[37m[40m [0m[1m[36m[40mFROM[0m[37m[40m [0m[1m[37m[40mjson_each[0m[37m[40m([0m[35m[40m'[null,1,"two",{"three":4.5}]'[0m[37m[40m)[0m
|
||||
|
||||
|
||||
|
||||
[1m[4mjson_extract[0m[4m([0m[4mX[0m[4m, [0m[4mP[0m[4m, ...)[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Returns the value(s) from the given JSON at the given path(s).
|
||||
[4mParameters[0m
|
||||
[4mX[0m The JSON value.
|
||||
[4mP[0m The path to extract.
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_group_array()[0m, [1mjson_group_object()[0m,
|
||||
[1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m, [1mjson_remove()[0m,
|
||||
[1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To get a number:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_extract[0m[37m[40m([0m[35m[40m'{"num": 1}'[0m[37m[40m, [0m[35m[40m'$.num'[0m[37m[40m) [0m
|
||||
|
||||
|
||||
#2 To get two numbers:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_extract[0m[37m[40m([0m[35m[40m'{"num": 1, "val": 2}'[0m[37m[40m, [0m[35m[40m'$.num'[0m[37m[40m, [0m[35m[40m'$.val'[0m[37m[40m)[0m
|
||||
|
||||
|
||||
#3 To get an object:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_extract[0m[37m[40m([0m[35m[40m'{"obj": {"sub": 1}}'[0m[37m[40m, [0m[35m[40m'$.obj'[0m[37m[40m)[0m
|
||||
|
||||
|
||||
#4 To get a JSON value using the short-hand:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[35m[40m'{"a":"b"}'[0m[37m[40m [0m[1m[37m[40m->[0m[37m[40m [0m[35m[40m'$.a'[0m[37m[40m [0m
|
||||
|
||||
|
||||
#5 To get a SQL value using the short-hand:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[35m[40m'{"a":"b"}'[0m[37m[40m [0m[1m[37m[40m->>[0m[37m[40m [0m[35m[40m'$.a'[0m[37m[40m [0m
|
||||
|
||||
|
||||
|
||||
[1m[4mjson_group_array[0m[4m([0m[4mvalue[0m[4m, ...)[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Collect the given values from a query into a JSON array
|
||||
[4mParameter[0m
|
||||
[4mvalue[0m The values to append to the array
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson_concat()[0m, [1mjson_contains()[0m, [1mjson_group_object()[0m,
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_object()[0m,
|
||||
[1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m, [1mjson_remove()[0m,
|
||||
[1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To create an array from arguments:
|
||||
@ -2785,7 +2914,10 @@ For support questions, email:
|
||||
[4mname[0m The property name for the value
|
||||
[4mvalue[0m The value to add to the object
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson_concat()[0m, [1mjson_contains()[0m, [1mjson_group_array()[0m,
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m, [1mjson_remove()[0m,
|
||||
[1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To create an object from arguments:
|
||||
@ -2797,6 +2929,229 @@ For support questions, email:
|
||||
|
||||
|
||||
|
||||
[1m[4mjson_insert[0m[4m([0m[4mX[0m[4m, [0m[4mP[0m[4m, [0m[4mY[0m[4m)[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Inserts values into a JSON object/array at the given locations, if
|
||||
it does not already exist
|
||||
[4mParameters[0m
|
||||
[4mX[0m The JSON value to update
|
||||
[4mP[0m The path to the insertion point. A '#' array index means
|
||||
append the value
|
||||
[4mY[0m The value to insert
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m, [1mjson_object()[0m, [1mjson_quote()[0m, [1mjson_remove()[0m,
|
||||
[1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To append to an array:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_insert[0m[37m[40m([0m[35m[40m'[1, 2]'[0m[37m[40m, [0m[35m[40m'$[#]'[0m[37m[40m, [0m[1m[37m[40m3[0m[37m[40m) [0m
|
||||
|
||||
|
||||
#2 To update an object:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_insert[0m[37m[40m([0m[35m[40m'{"a": 1}'[0m[37m[40m, [0m[35m[40m'$.b'[0m[37m[40m, [0m[1m[37m[40m2[0m[37m[40m) [0m
|
||||
|
||||
|
||||
#3 To ensure a value is set:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_insert[0m[37m[40m([0m[35m[40m'{"a": 1}'[0m[37m[40m, [0m[35m[40m'$.a'[0m[37m[40m, [0m[1m[37m[40m2[0m[37m[40m) [0m
|
||||
|
||||
|
||||
#4 To update multiple values:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_insert[0m[37m[40m([0m[35m[40m'{"a": 1}'[0m[37m[40m, [0m[35m[40m'$.b'[0m[37m[40m, [0m[1m[37m[40m2[0m[37m[40m, [0m[35m[40m'$.c'[0m[37m[40m, [0m[1m[37m[40m3[0m[37m[40m)[0m
|
||||
|
||||
|
||||
|
||||
[1m[4mjson_object[0m[4m([0m[4mN[0m[4m, [0m[4mV[0m[4m)[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Create a JSON object from the given arguments
|
||||
[4mParameters[0m
|
||||
[4mN[0m The property name
|
||||
[4mV[0m The property value
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m, [1mjson_insert()[0m, [1mjson_quote()[0m, [1mjson_remove()[0m,
|
||||
[1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To create an object:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_object[0m[37m[40m([0m[35m[40m'a'[0m[37m[40m, [0m[1m[37m[40m1[0m[37m[40m, [0m[35m[40m'b'[0m[37m[40m, [0m[35m[40m'c'[0m[37m[40m) [0m
|
||||
|
||||
|
||||
#2 To create an empty object:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_object[0m[37m[40m() [0m
|
||||
|
||||
|
||||
|
||||
[1m[4mjson_quote[0m[4m([0m[4mX[0m[4m)[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Returns the JSON representation of the given value, if it is not
|
||||
already JSON
|
||||
[4mParameter[0m
|
||||
[4mX[0m The value to convert
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m, [1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_remove()[0m,
|
||||
[1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To convert a string:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_quote[0m[37m[40m([0m[35m[40m'Hello, World!'[0m[37m[40m) [0m
|
||||
|
||||
|
||||
#2 To pass through an existing JSON value:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_quote[0m[37m[40m([0m[1m[37m[40mjson[0m[37m[40m([0m[35m[40m'"Hello, World!"'[0m[37m[40m)) [0m
|
||||
|
||||
|
||||
|
||||
[1m[4mjson_remove[0m[4m([0m[4mX[0m[4m, [0m[4mP[0m[4m, ...)[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Removes paths from a JSON value
|
||||
[4mParameters[0m
|
||||
[4mX[0m The JSON value to update
|
||||
[4mP[0m The paths to remove
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m, [1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m,
|
||||
[1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To remove elements of an array:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_remove[0m[37m[40m([0m[35m[40m'[1,2,3]'[0m[37m[40m, [0m[35m[40m'$[1]'[0m[37m[40m, [0m[35m[40m'$[1]'[0m[37m[40m) [0m
|
||||
|
||||
|
||||
#2 To remove object properties:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_remove[0m[37m[40m([0m[35m[40m'{"a":1,"b":2}'[0m[37m[40m, [0m[35m[40m'$.b'[0m[37m[40m) [0m
|
||||
|
||||
|
||||
|
||||
[1m[4mjson_replace[0m[4m([0m[4mX[0m[4m, [0m[4mP[0m[4m, [0m[4mY[0m[4m)[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Replaces existing values in a JSON object/array at the given
|
||||
locations
|
||||
[4mParameters[0m
|
||||
[4mX[0m The JSON value to update
|
||||
[4mP[0m The path to replace
|
||||
[4mY[0m The new value for the property
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m, [1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m,
|
||||
[1mjson_remove()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To replace an existing value:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_replace[0m[37m[40m([0m[35m[40m'{"a": 1}'[0m[37m[40m, [0m[35m[40m'$.a'[0m[37m[40m, [0m[1m[37m[40m2[0m[37m[40m) [0m
|
||||
|
||||
|
||||
#2 To replace a value without creating a new property:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_replace[0m[37m[40m([0m[35m[40m'{"a": 1}'[0m[37m[40m, [0m[35m[40m'$.a'[0m[37m[40m, [0m[1m[37m[40m2[0m[37m[40m, [0m[35m[40m'$.b'[0m[37m[40m, [0m[1m[37m[40m3[0m[37m[40m)[0m
|
||||
|
||||
|
||||
|
||||
[1m[4mjson_set[0m[4m([0m[4mX[0m[4m, [0m[4mP[0m[4m, [0m[4mY[0m[4m)[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Inserts or replaces existing values in a JSON object/array at the
|
||||
given locations
|
||||
[4mParameters[0m
|
||||
[4mX[0m The JSON value to update
|
||||
[4mP[0m The path to the insertion point. A '#' array index means
|
||||
append the value
|
||||
[4mY[0m The value to set
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m, [1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m,
|
||||
[1mjson_remove()[0m, [1mjson_replace()[0m, [1mjson_tree()[0m, [1mjson_type()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To replace an existing array element:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_set[0m[37m[40m([0m[35m[40m'[1, 2]'[0m[37m[40m, [0m[35m[40m'$[1]'[0m[37m[40m, [0m[1m[37m[40m3[0m[37m[40m) [0m
|
||||
|
||||
|
||||
#2 To replace a value and create a new property:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_set[0m[37m[40m([0m[35m[40m'{"a": 1}'[0m[37m[40m, [0m[35m[40m'$.a'[0m[37m[40m, [0m[1m[37m[40m2[0m[37m[40m, [0m[35m[40m'$.b'[0m[37m[40m, [0m[1m[37m[40m3[0m[37m[40m) [0m
|
||||
|
||||
|
||||
|
||||
[1m[4mjson_tree[0m[4m([0m[4mX[0m[4m, [[0m[4mP[0m[4m])[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
A table-valued-function that recursively descends through a JSON
|
||||
value
|
||||
[4mParameters[0m
|
||||
[4mX[0m The JSON value to query
|
||||
[4mP[0m The path to the value to query
|
||||
[4mResults[0m
|
||||
[4mkey[0m The array index for elements of an array or
|
||||
property names of the object
|
||||
[4mvalue[0m The value for the current element
|
||||
[4mtype[0m The type of the current element
|
||||
[4matom[0m The SQL value of the element, if it is a
|
||||
primitive type
|
||||
[4mfullkey[0m The path to the current element
|
||||
[4mpath[0m The path to the container of this element
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m, [1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m,
|
||||
[1mjson_remove()[0m, [1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_type()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExample[0m
|
||||
#1 To iterate over an array:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[36m[40mkey[0m[37m[40m,[0m[37m[40mvalue[0m[37m[40m,[0m[37m[40mtype[0m[37m[40m,[0m[37m[40matom[0m[37m[40m,[0m[37m[40mfullkey[0m[37m[40m,[0m[37m[40mpath[0m[37m[40m [0m[1m[36m[40mFROM[0m[37m[40m [0m[1m[37m[40mjson_tree[0m[37m[40m([0m[35m[40m'[null,1,"two",{"three":4.5}]'[0m[37m[40m)[0m
|
||||
|
||||
|
||||
|
||||
[1m[4mjson_type[0m[4m([0m[4mX[0m[4m, [[0m[4mP[0m[4m])[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Returns the type of a JSON value
|
||||
[4mParameters[0m
|
||||
[4mX[0m The JSON value to query
|
||||
[4mP[0m The path to the value
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m, [1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m,
|
||||
[1mjson_remove()[0m, [1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_valid()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To get the type of a value:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_type[0m[37m[40m([0m[35m[40m'[null,1,2.1,"three",{"four":5}]'[0m[37m[40m)[0m
|
||||
|
||||
|
||||
#2 To get the type of an array element:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_type[0m[37m[40m([0m[35m[40m'[null,1,2.1,"three",{"four":5}]'[0m[37m[40m, [0m[35m[40m'$[0]'[0m[37m[40m)[0m
|
||||
|
||||
|
||||
#3 To get the type of a string:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_type[0m[37m[40m([0m[35m[40m'[null,1,2.1,"three",{"four":5}]'[0m[37m[40m, [0m[35m[40m'$[3]'[0m[37m[40m)[0m
|
||||
|
||||
|
||||
|
||||
[1m[4mjson_valid[0m[4m([0m[4mX[0m[4m)[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Tests if the given value is valid JSON
|
||||
[4mParameter[0m
|
||||
[4mX[0m The value to check
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m, [1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m,
|
||||
[1mjson_remove()[0m, [1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m,
|
||||
[1myaml_to_json()[0m
|
||||
[4mExamples[0m
|
||||
#1 To check an empty string:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_valid[0m[37m[40m([0m[35m[40m''[0m[37m[40m) [0m
|
||||
|
||||
|
||||
#2 To check a string:
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40mjson_valid[0m[37m[40m([0m[35m[40m'"a"'[0m[37m[40m) [0m
|
||||
|
||||
|
||||
|
||||
[1m[4mjulianday[0m[4m([0m[4mtimestring[0m[4m, [0m[4mmodifier[0m[4m, ...)[0m
|
||||
══════════════════════════════════════════════════════════════════════
|
||||
Returns the number of days since noon in Greenwich on November 24,
|
||||
@ -4306,8 +4661,11 @@ For support questions, email:
|
||||
[4mParameter[0m
|
||||
[4myaml[0m The YAML value to convert to JSON.
|
||||
[4mSee Also[0m
|
||||
[1mjget()[0m, [1mjson_concat()[0m, [1mjson_contains()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m
|
||||
[1mjget()[0m, [1mjson()[0m, [1mjson_array()[0m, [1mjson_array_length()[0m, [1mjson_concat()[0m,
|
||||
[1mjson_contains()[0m, [1mjson_each()[0m, [1mjson_extract()[0m, [1mjson_group_array()[0m,
|
||||
[1mjson_group_object()[0m, [1mjson_insert()[0m, [1mjson_object()[0m, [1mjson_quote()[0m,
|
||||
[1mjson_remove()[0m, [1mjson_replace()[0m, [1mjson_set()[0m, [1mjson_tree()[0m, [1mjson_type()[0m,
|
||||
[1mjson_valid()[0m
|
||||
[4mExample[0m
|
||||
#1 To convert the document "abc: def":
|
||||
[37m[40m;[0m[1m[36m[40mSELECT[0m[37m[40m [0m[1m[37m[40myaml_to_json[0m[37m[40m([0m[35m[40m'abc: def'[0m[37m[40m) [0m
|
||||
|
@ -1,2 +1,2 @@
|
||||
[1m[4mbasename(filepath) [0m[1m[4m descriptor [0m[1m[4m mimetype [0m[1m[4m content [0m
|
||||
[1mlogfile_syslog.1.gz[0m[1m [0m[1mnet.zlib.gzip.header[0m[1m [0m[1mapplication/json[0m[1m [0m[1m{"name":"logfile_syslog.1","mtime":"2007-11-03T09:23:00.000","comment":""} [0m
|
||||
logfile_syslog.1.gz net.zlib.gzip.header application/json {"name":"logfile_syslog.1","mtime":"2007-11-03T09:23:00.000","comment":""}
|
||||
|
@ -1,11 +1,11 @@
|
||||
[1m[4m log_time [0m[1m[4m log_body [0m
|
||||
[1m2022-09-19 09:24:04.000[0m[1m [0m[1mtid:1d1f - Mux ID not found in mapping dictionary [0m
|
||||
2022-09-19 09:24:04.000 tid:1d1f - Mux ID not found in mapping dictionary
|
||||
2022-09-19 09:24:04.000 tid:1d1f - Can't handle disconnect with invalid ecid
|
||||
[1m2022-09-19 09:24:20.000[0m[1m [0m[1mEntered:_AMMuxedDeviceDisconnected, mux-device:1003 [0m
|
||||
2022-09-19 09:24:20.000 Entered:_AMMuxedDeviceDisconnected, mux-device:1003
|
||||
[1m2022-09-19 09:24:20.000[0m[1m [0m[1mEntered:__thr_AMMuxedDeviceDisconnected, mux-device:1003 [0m
|
||||
[1m2022-09-19 09:24:20.000[0m[1m [0m[1mEntered:_AMMuxedDeviceDisconnected, mux-device:1003 [0m
|
||||
2022-09-19 09:24:20.000 Entered:__thr_AMMuxedDeviceDisconnected, mux-device:1003
|
||||
2022-09-19 09:24:20.000 Entered:__thr_AMMuxedDeviceDisconnected, mux-device:1003
|
||||
[1m2022-09-19 09:24:20.000[0m[1m [0m[1mtid:191f - Mux ID not found in mapping dictionary [0m
|
||||
2022-09-19 09:24:20.000 tid:1d1f - Mux ID not found in mapping dictionary
|
||||
[1m2022-09-19 09:24:20.000[0m[1m [0m[1mtid:191f - Can't handle disconnect with invalid ecid [0m
|
||||
[1m2022-09-19 09:24:20.000[0m[1m [0m[1mtid:1d1f - Mux ID not found in mapping dictionary [0m
|
||||
2022-09-19 09:24:20.000 tid:191f - Can't handle disconnect with invalid ecid
|
||||
2022-09-19 09:24:20.000 tid:1d1f - Can't handle disconnect with invalid ecid
|
||||
|
@ -1,4 +1,4 @@
|
||||
[1m[4mlog_line [0m[1m[4m log_comment [0m[1m[4mlog_tags [0m
|
||||
[1m 0[0m[1m [0m[1mHello, World![0m[1m [0m[1m["#foo"] [0m
|
||||
0 Hello, World! ["#foo"]
|
||||
1 <NULL> <NULL>
|
||||
[1m 2[0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
|
@ -1,2 +1,2 @@
|
||||
[1m[4mlog_line [0m[1m[4mlog_part [0m[1m[4m log_time [0m[1m[4m[7mlog_idle_msecs [0m[1m[4mlog_level [0m[1m[4mlog_mark [0m[1m[4mlog_comment [0m[1m[4mlog_tags [0m[1m[4mlog_filters [0m[1m[4m c_ip [0m[1m[4m[7mcs_bytes [0m[1m[4mcs_method [0m[1m[4mcs_uri_query [0m[1m[4m cs_uri_stem [0m[1m[4mcs_username [0m[1m[4m[7mcs_vars [0m[1m[4mcs_version [0m[1m[4ms_app [0m[1m[4ms_core [0m[1m[4ms_pid [0m[1m[4ms_req [0m[1m[4m[7ms_runtime [0m[1m[4m[7ms_switches [0m[1m[4ms_worker_reqs [0m[1m[4m[7msc_bytes [0m[1m[4m[7msc_header_bytes [0m[1m[4m[7msc_headers [0m[1m[4msc_status [0m
|
||||
[1m[7m 0[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2016-03-13 22:49:12.000[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m127.0.0.1[0m[1m[7m [0m[1m[7m 696[0m[1m[7m [0m[1m[7mPOST [0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m/update_metrics[0m[1m[7m [0m[1m[7m [0m[1m[7m [0m[1m[7m [0m[1m[7m 38[0m[1m[7m [0m[1m[7mH[0m[1m[7mTTP/1.1 [0m[1m[7m [0m[1m[7m0 [0m[1m[7m [0m[1m[7m [0m[1m[7m3 [0m[1m[7m [0m[1m[7m88185[0m[1m[7m [0m[1m[7m 1[0m[1m[7m [0m[1m[7m 0.129[0m[1m[7m [0m[1m[7m 1[0m[1m[7m [0m[1m[7m 1[0m[1m[7m [0m[1m[7m 47[0m[1m[7m [0m[1m[7m 378[0m[1m[7m [0m[1m[7m 9[0m[1m[7m [0m[1m[7m [0m[1m[7m [0m[1m 200 [0m
|
||||
[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2016-03-13 22:49:12.000[0m[7m [0m[1m[7m 0[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m127.0.0.1[0m[7m [0m[1m[7m 696[0m[7m [0m[7mPOST [0m[7m [0m[7m <NULL>[0m[7m [0m[7m/update_metrics[0m[7m [0m[7m [0m[7m [0m[7m [0m[1m[7m 38[0m[7m [0m[7mH[0m[7mTTP/1.1 [0m[7m [0m[7m0 [0m[7m [0m[7m [0m[7m3 [0m[7m [0m[7m88185[0m[7m [0m[7m 1[0m[7m [0m[1m[7m 0.129[0m[7m [0m[1m[7m 1[0m[7m [0m[7m 1[0m[7m [0m[1m[7m 47[0m[7m [0m[1m[7m 378[0m[7m [0m[1m[7m 9[0m[7m [0m[7m [0m[7m [0m 200
|
||||
|
@ -1,3 +1,3 @@
|
||||
[1m[4mid [0m[1m[4mfirst_name [0m[1m[4mlast_name [0m[1m[4m[7mage [0m
|
||||
[1m[7m [0m[1m0[0m[1m [0m[1mPhil [0m[1m [0m[1mMyman [0m[1m [0m[1m 30 [0m
|
||||
[7m [0m0 Phil Myman 30
|
||||
[7m 1[0m[7m [0m[7mLem [0m[7m [0m[7mHewitt [0m[7m [0m[7m 35[0m
|
||||
|
@ -1,3 +1,3 @@
|
||||
[1m[4mid [0m[1m[4mfirst_name [0m[1m[4mlast_name [0m[1m[4m[7mage [0m
|
||||
[1m[7m [0m[1m0[0m[1m [0m[1mPhil [0m[1m [0m[1mMyman [0m[1m [0m[1m 30 [0m
|
||||
[7m [0m0 Phil Myman 30
|
||||
[7m 1[0m[7m [0m[7mLem [0m[7m [0m[7mHewitt [0m[7m [0m[7m 35[0m
|
||||
|
@ -1,4 +1,4 @@
|
||||
[1m[4m log_time [0m
|
||||
2009-07-20 22:59:26.000
|
||||
2009-07-20 22:59:29.000
|
||||
2009-07-20 22:59:29.000
|
||||
[1m2009-07-20 22:59:29.000 [0m
|
||||
|
@ -1,4 +1,4 @@
|
||||
[1m[4m log_body [0m
|
||||
lookup(file): lookup for foobar failed
|
||||
attempting to mount entry /auto/opt
|
||||
lookup(file): lookup for opt failed
|
||||
[1mlookup(file): lookup for opt failed [0m
|
||||
|
@ -1,4 +1,4 @@
|
||||
[1m[4m log_time [0m
|
||||
2009-07-20 22:59:26.000
|
||||
2009-07-20 22:59:29.000
|
||||
2009-07-20 22:59:29.000
|
||||
[1m2009-07-20 22:59:29.000 [0m
|
||||
|
@ -1,5 +1,5 @@
|
||||
[1m[4mmatch_index [0m[1m[4m content [0m[1m[4m case match_index when 2 then replicate('abc', 1000) else '' end [0m
|
||||
[1m[7m [0m[1m 0[0m[1m [0m[1m{"col_0":10}[0m[1m [0m[1m [0m
|
||||
[7m [0m 0 {"col_0":10}
|
||||
[7m 1[0m[7m [0m[7m{"col_0":50}[0m[7m [0m[7m [0m
|
||||
[1m[7m 2[0m[1m[7m [0m[1m[7m{"col_0":50}[0m[1m[7m [0m[1m[7mabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc⋯bcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc [0m
|
||||
[7m 3[0m[7m [0m[7m{"col_0":50}[0m[7m [0m[7m [0m
|
||||
[1m[7m 3[0m[1m[7m [0m[1m[7m{"col_0":50}[0m[1m[7m [0m[1m[7m [0m
|
||||
|
@ -1,4 +1,4 @@
|
||||
[1m[4m log_time [0m
|
||||
2009-07-20 22:59:26.000
|
||||
2009-07-20 22:59:29.000
|
||||
2009-07-20 22:59:29.000
|
||||
[1m2009-07-20 22:59:29.000 [0m
|
||||
|
@ -1,3 +1,3 @@
|
||||
[1m[4mlog_line [0m[1m[4m col_0 [0m
|
||||
[1m 0[0m[1m [0m[1meth0.IPv4 [0m
|
||||
0 eth0.IPv4
|
||||
7 eth0.IPv4
|
||||
|
@ -0,0 +1,9 @@
|
||||
SELECT json_object('abc', 'def') ->> '$.abc'
|
||||
sql_keyword ------
|
||||
sql_func ------------------------
|
||||
sql_ident -----------
|
||||
sql_string -----
|
||||
sql_comma -
|
||||
sql_string -----
|
||||
sql_oper ---
|
||||
sql_string -------
|
@ -1,3 +1,3 @@
|
||||
[1m[4mlog_line [0m[1m[4mlog_part [0m[1m[4m log_time [0m[1m[4m[7mlog_idle_msecs [0m[1m[4mlog_level [0m[1m[4mlog_mark [0m[1m[4mlog_comment [0m[1m[4mlog_tags [0m[1m[4mlog_filters [0m[1m[4mlog_msg_format [0m
|
||||
[1m[7m [0m[1m 1[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2009-07-20 22:59:29.000[0m[1m [0m[1m 3000[0m[1m [0m[1merror [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m [0m
|
||||
[7m 3[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2013-02-15 06:00:31.000[0m[7m [0m[7m 112777262000[0m[7m [0m[7merror [0m[7m [0m[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m [0m
|
||||
[7m [0m 1 <NULL> 2009-07-20 22:59:29.000 [1m 3000[0m error 0 <NULL> <NULL> <NULL>
|
||||
[7m 3[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2013-02-15 06:00:31.000[0m[7m [0m[1m[7m 112777262000[0m[7m [0m[7merror [0m[7m [0m[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m [0m
|
||||
|
@ -1,5 +1,5 @@
|
||||
[1m[4mlog_line [0m[1m[4mlog_part [0m[1m[4m log_time [0m[1m[4m[7mlog_idle_msecs [0m[1m[4mlog_level [0m[1m[4mlog_mark [0m[1m[4mlog_comment [0m[1m[4mlog_tags [0m[1m[4mlog_filters [0m[1m[4m c_ip [0m[1m[4mcs_method [0m[1m[4mcs_referer [0m[1m[4mcs_uri_query [0m[1m[4m cs_uri_stem [0m[1m[4mcs_user_agent [0m[1m[4mcs_username [0m[1m[4mcs_version [0m[1m[4m[7msc_bytes [0m[1m[4msc_status [0m[1m[4mcs_host [0m[1m[4m log_unique_path [0m
|
||||
[1m[7m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2009-07-20 22:59:26.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m192.168.202.254[0m[1m [0m[1mGET [0m[1m [0m[1m- [0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m/vmw/cgi/tramp [0m[1m [0m[1mgPXE/0.9.7 [0m[1m [0m[1m- [0m[1m [0m[1mHTTP/1.0 [0m[1m [0m[1m 134[0m[1m [0m[1m 200[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1mlogfile_access_log.0 [0m
|
||||
[7m [0m[7m [0m 1 <NULL> 2009-07-20 22:59:29.000 3000 error 0 <NULL> <NULL> <NULL> 192.168.202.254 GET - <NULL> /vmw/vSphere/default/vmkboot.gz gPXE/0.9.7 - HTTP/1.0 46210 404 <NULL> logfile_access_log.0
|
||||
[7m [0m 0 <NULL> 2009-07-20 22:59:26.000 [1m 0[0m info 0 <NULL> <NULL> <NULL> 192.168.202.254 GET - <NULL> /vmw/cgi/tramp gPXE/0.9.7 - HTTP/1.0 [1m 134[0m 200 <NULL> logfile_access_log.0
|
||||
[7m [0m[7m [0m 1 <NULL> 2009-07-20 22:59:29.000 [1m 3000[0m error 0 <NULL> <NULL> <NULL> 192.168.202.254 GET - <NULL> /vmw/vSphere/default/vmkboot.gz gPXE/0.9.7 - HTTP/1.0 [1m 46210[0m 404 <NULL> logfile_access_log.0
|
||||
[1m[7m [0m[1m 2[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2009-07-20 22:59:29.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m192.168.202.254[0m[1m [0m[1mGET [0m[1m [0m[1m- [0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m/vmw/vSphere/default/vmkernel.gz[0m[1m [0m[1mgPXE/0.9.7 [0m[1m [0m[1m- [0m[1m [0m[1mHTTP/1.0 [0m[1m [0m[1m 78929[0m[1m [0m[1m 200[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1mlogfile_access_log.0 [0m
|
||||
[7m 3[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2013-02-15 06:00:31.000[0m[7m [0m[7m 112777262000[0m[7m [0m[7merror [0m[7m [0m[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m10.112.81.15 [0m[7m [0m[7m<NULL> [0m[7m [0m[7m- [0m[7m [0m[7m <NULL>[0m[7m [0m[7m<NULL> [0m[7m [0m[7m- [0m[7m [0m[7m- [0m[7m [0m[7m<NULL> [0m[7m [0m[7m 0[0m[7m [0m[7m 400[0m[7m [0m[7m <NULL>[0m[7m [0m[7mlogfile_access_log.[0m1
|
||||
[1m[7m 3[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2013-02-15 06:00:31.000[0m[1m[7m [0m[1m[7m 112777262000[0m[1m[7m [0m[1m[7merror [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m10.112.81.15 [0m[1m[7m [0m[1m[7m<NULL> [0m[1m[7m [0m[1m[7m- [0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m<NULL> [0m[1m[7m [0m[1m[7m- [0m[1m[7m [0m[1m[7m- [0m[1m[7m [0m[1m[7m<NULL> [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m 400[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7mlogfile_access_log.[0m[1m1 [0m
|
||||
|
@ -1,2 +1,2 @@
|
||||
[1m[4m[7m$id [0m[1m[4m[7m$parent [0m[1m[4m[7m$notused [0m[1m[4m replace($detail, 'SCAN TABLE', 'SCAN') [0m
|
||||
[1m[7m 2[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7mSCAN all_logs VIRTUAL TABLE INDEX 1:SEARCH all_logs USING log_level <[0m[1m ? [0m
|
||||
[1m[7m 2[0m[7m [0m[1m[7m 0[0m[7m [0m[1m[7m 0[0m[7m [0m[7mSCAN all_logs VIRTUAL TABLE INDEX 1:SEARCH all_logs USING log_level <[0m ?
|
||||
|
@ -1,5 +1,5 @@
|
||||
[1m[4mlog_line [0m[1m[4mlog_part [0m[1m[4m log_time [0m[1m[4m[7mlog_idle_msecs [0m[1m[4mlog_level [0m[1m[4mlog_mark [0m[1m[4mlog_comment [0m[1m[4mlog_tags [0m[1m[4mlog_filters [0m[1m[4mlog_msg_format [0m[1m[4mlog_format [0m
|
||||
[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2009-07-20 22:59:26.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m [0m[1m [0m[1maccess_log [0m
|
||||
[7m [0m 1 <NULL> 2009-07-20 22:59:29.000 3000 error 0 <NULL> <NULL> <NULL> access_log
|
||||
0 <NULL> 2009-07-20 22:59:26.000 [1m 0[0m info 0 <NULL> <NULL> <NULL> access_log
|
||||
[7m [0m 1 <NULL> 2009-07-20 22:59:29.000 [1m 3000[0m error 0 <NULL> <NULL> <NULL> access_log
|
||||
[1m 2[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2009-07-20 22:59:29.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m [0m[1m [0m[1maccess_log [0m
|
||||
[7m 3[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2013-02-15 06:00:31.000[0m[7m [0m[7m 112777262000[0m[7m [0m[7merror [0m[7m [0m[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m [0m[7m [0m[7maccess_log[0m
|
||||
[1m[7m 3[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2013-02-15 06:00:31.000[0m[1m[7m [0m[1m[7m 112777262000[0m[1m[7m [0m[1m[7merror [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m [0m[1m[7m [0m[1m[7maccess_log[0m[1m [0m
|
||||
|
@ -1,3 +1,3 @@
|
||||
[1m[4mlog_line [0m[1m[4mlog_part [0m[1m[4m log_time [0m[1m[4m[7mlog_idle_msecs [0m[1m[4mlog_level [0m[1m[4mlog_mark [0m[1m[4mlog_comment [0m[1m[4mlog_tags [0m[1m[4mlog_filters [0m[1m[4mlog_msg_format [0m
|
||||
[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2009-07-20 22:59:26.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m [0m
|
||||
2 <NULL> 2009-07-20 22:59:29.000 0 info 0 <NULL> <NULL> <NULL>
|
||||
0 <NULL> 2009-07-20 22:59:26.000 [1m 0[0m info 0 <NULL> <NULL> <NULL>
|
||||
2 <NULL> 2009-07-20 22:59:29.000 [1m 0[0m info 0 <NULL> <NULL> <NULL>
|
||||
|
@ -1,2 +1,2 @@
|
||||
[1m[4m[7m$id [0m[1m[4m[7m$parent [0m[1m[4m[7m$notused [0m[1m[4m replace($detail, 'SCAN TABLE', 'SCAN') [0m
|
||||
[1m[7m 2[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7mSCAN all_logs VIRTUAL TABLE INDEX 1:SEARCH all_logs USING log_format =[0m[1m ? [0m
|
||||
[1m[7m 2[0m[7m [0m[1m[7m 0[0m[7m [0m[1m[7m 0[0m[7m [0m[7mSCAN all_logs VIRTUAL TABLE INDEX 1:SEARCH all_logs USING log_format =[0m ?
|
||||
|
@ -1,2 +1,2 @@
|
||||
[1m[4m[7m$id [0m[1m[4m[7m$parent [0m[1m[4m[7m$notused [0m[1m[4m replace($detail, 'SCAN TABLE', 'SCAN') [0m
|
||||
[1m[7m 2[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7mSCAN access_log VIRTUAL TABLE INDEX 1:SEARCH access_log USING log_path GLOB[0m[1m ? [0m
|
||||
[1m[7m 2[0m[7m [0m[1m[7m 0[0m[7m [0m[1m[7m 0[0m[7m [0m[7mSCAN access_log VIRTUAL TABLE INDEX 1:SEARCH access_log USING log_path GLOB[0m ?
|
||||
|
@ -1,5 +1,5 @@
|
||||
[1m[4mlog_line [0m[1m[4mlog_part [0m[1m[4m log_time [0m[1m[4m[7mlog_idle_msecs [0m[1m[4mlog_level [0m[1m[4mlog_mark [0m[1m[4mlog_comment [0m[1m[4mlog_tags [0m[1m[4mlog_filters [0m[1m[4mlog_msg_format [0m
|
||||
[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2009-07-20 22:59:26.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m [0m
|
||||
[7m [0m 1 <NULL> 2009-07-20 22:59:29.000 3000 error 0 <NULL> <NULL> <NULL>
|
||||
0 <NULL> 2009-07-20 22:59:26.000 [1m 0[0m info 0 <NULL> <NULL> <NULL>
|
||||
[7m [0m 1 <NULL> 2009-07-20 22:59:29.000 [1m 3000[0m error 0 <NULL> <NULL> <NULL>
|
||||
[1m 2[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2009-07-20 22:59:29.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m [0m
|
||||
[7m 3[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2013-02-15 06:00:31.000[0m[7m [0m[7m 112777262000[0m[7m [0m[7merror [0m[7m [0m[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m [0m
|
||||
[1m[7m 3[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2013-02-15 06:00:31.000[0m[1m[7m [0m[1m[7m 112777262000[0m[1m[7m [0m[1m[7merror [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m [0m[1m [0m
|
||||
|
@ -1,4 +1,4 @@
|
||||
[1m[4mmatch_index [0m[1m[4mcapture_index [0m[1m[4mcapture_name [0m[1m[4mcapture_count [0m[1m[4mrange_start [0m[1m[4mrange_stop [0m[1m[4mcontent [0m
|
||||
[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 3[0m[1m [0m[1m 1[0m[1m [0m[1m 9[0m[1m [0m[1mabc=def; [0m
|
||||
0 0 <NULL> 3 1 9 abc=def;
|
||||
0 1 <NULL> 3 1 4 abc
|
||||
[1m 0[0m[1m [0m[1m 2[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 3[0m[1m [0m[1m 5[0m[1m [0m[1m 8[0m[1m [0m[1mdef [0m
|
||||
|
@ -1,2 +1,2 @@
|
||||
[1m[4mmatch_index [0m[1m[4m content [0m
|
||||
[1m[7m 0[0m[1m[7m [0m[1m[7m{"key":"foo","value":4670}[0m[1m [0m
|
||||
[7m 0[0m[7m [0m[7m{"key":"foo","value":4670}[0m
|
||||
|
@ -1,2 +1,2 @@
|
||||
[1m[4mmatch_index [0m[1m[4m content [0m
|
||||
[1m 0[0m[1m [0m[1m{"key":"foo","value":"123e"} [0m
|
||||
0 {"key":"foo","value":"123e"}
|
||||
|
@ -1,2 +1,2 @@
|
||||
[1m[4mmatch_index [0m[1m[4m content [0m
|
||||
[1m 0[0m[1m [0m[1m{"col_0":"abc","col_1":"def"} [0m
|
||||
0 {"col_0":"abc","col_1":"def"}
|
||||
|
@ -1,2 +1,2 @@
|
||||
[1m[4mmatch_index [0m[1m[4m content [0m
|
||||
[1m 0[0m[1m [0m[1m{"key":"foo","value":"0x123e"} [0m
|
||||
0 {"key":"foo","value":"0x123e"}
|
||||
|
@ -1,2 +1,2 @@
|
||||
[1m[4mlog_line [0m[1m[4mlog_part [0m[1m[4m log_time [0m[1m[4m[7mlog_idle_msecs [0m[1m[4mlog_level [0m[1m[4mlog_mark [0m[1m[4mlog_comment [0m[1m[4mlog_tags [0m[1m[4mlog_filters [0m[1m[4m comp [0m[1m[4m opid [0m[1m[4m tid [0m[1m[4m user [0m[1m[4m item [0m[1m[4mprc [0m[1m[4mreason [0m[1m[4m req [0m[1m[4m sid [0m[1m[4m src [0m[1m[4m sub [0m[1m[4mvpxa_update [0m[1m[4m line [0m[1m[4m file [0m[1m[4mmatch_index [0m[1m[4m lro_id [0m[1m[4m entity [0m[1m[4m operation [0m[1m[4m SessionId [0m[1m[4m SessionSubId [0m
|
||||
[1m[7m 2[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 11:58:12.376[0m[1m[7m [0m[1m[7m 182[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7me3979f6[0m[1m[7m [0m[1m[7m45709[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7mvpxd[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7mOriginator@6876[0m[1m[7m [0m[1m[7mvpxLro[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7mlro-846064[0m[1m[7m [0m[1m[7mSessionManager[0m[1m[7m [0m[1m[7mvim.SessionManager.sessionIsActive[0m[1m[7m [0m[1m[7m52626140-422b-6287-b4e4-344192c6a01d[0m[1m[7m [0m[1m[7m523e0a4b-6e83-6bcd-9342-22502dd89866[0m[1m [0m
|
||||
[7m 2[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 11:58:12.376[0m[7m [0m[1m[7m 182[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7me3979f6[0m[7m [0m[7m45709[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7mvpxd[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7mOriginator@6876[0m[7m [0m[7mvpxLro[0m[7m [0m[7m <NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7m 0[0m[7m [0m[7mlro-846064[0m[7m [0m[7mSessionManager[0m[7m [0m[7mvim.SessionManager.sessionIsActive[0m[7m [0m[7m52626140-422b-6287-b4e4-344192c6a01d[0m[7m [0m[7m523e0a4b-6e83-6bcd-9342-22502dd89866[0m
|
||||
|
@ -1,12 +1,12 @@
|
||||
[1m[4mlog_line [0m[1m[4mlog_part [0m[1m[4m log_time [0m[1m[4m[7mlog_idle_msecs [0m[1m[4mlog_level [0m[1m[4mlog_mark [0m[1m[4mlog_comment [0m[1m[4mlog_tags [0m[1m[4mlog_filters [0m[1m[4mmatch_index [0m[1m[4m name [0m
|
||||
[1m[7m 2[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-08-16 00:32:15.000[0m[1m[7m [0m[1m[7m 199000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7mcom.apple.cdscheduler[0m[1m [0m
|
||||
5 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 0 com.apple.install
|
||||
[7m 2[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-08-16 00:32:15.000[0m[7m [0m[1m[7m 199000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m 0[0m[7m [0m[7mcom.apple.cdscheduler[0m
|
||||
5 <NULL> 2022-08-16 00:32:15.000 [1m 0[0m info 0 <NULL> <NULL> <NULL> 0 com.apple.install
|
||||
[1m 8[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2022-08-16 00:32:15.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 0[0m[1m [0m[1mcom.apple.authd [0m
|
||||
8 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 1 com.apple.asl
|
||||
[1m 8[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2022-08-16 00:32:15.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 2[0m[1m [0m[1mcom.apple.asl [0m
|
||||
8 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 3 com.apple.authd
|
||||
[1m 8[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2022-08-16 00:32:15.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 1[0m[1m [0m[1mcom.apple.asl [0m
|
||||
8 <NULL> 2022-08-16 00:32:15.000 [1m 0[0m info 0 <NULL> <NULL> <NULL> 2 com.apple.asl
|
||||
8 <NULL> 2022-08-16 00:32:15.000 [1m 0[0m info 0 <NULL> <NULL> <NULL> 3 com.apple.authd
|
||||
[1m 11[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2022-08-16 00:32:15.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 0[0m[1m [0m[1mcom.apple.authd [0m
|
||||
11 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 1 com.apple.asl
|
||||
[1m 11[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2022-08-16 00:32:15.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 2[0m[1m [0m[1mcom.apple.asl [0m
|
||||
11 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 3 com.apple.authd
|
||||
[1m 11[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2022-08-16 00:32:15.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 1[0m[1m [0m[1mcom.apple.asl [0m
|
||||
11 <NULL> 2022-08-16 00:32:15.000 [1m 0[0m info 0 <NULL> <NULL> <NULL> 2 com.apple.asl
|
||||
11 <NULL> 2022-08-16 00:32:15.000 [1m 0[0m info 0 <NULL> <NULL> <NULL> 3 com.apple.authd
|
||||
[1m 14[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2022-08-16 00:32:15.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 0[0m[1m [0m[1mcom.apple.authd [0m
|
||||
|
@ -1,4 +1,4 @@
|
||||
[1m[4mlog_line [0m[1m[4mlog_part [0m[1m[4m log_time [0m[1m[4m[7mlog_idle_msecs [0m[1m[4mlog_level [0m[1m[4mlog_mark [0m[1m[4mlog_comment [0m[1m[4mlog_tags [0m[1m[4mlog_filters [0m[1m[4mmatch_index [0m[1m[4muser [0m[1m[4mpid [0m[1m[4m[7mcpu_pct [0m[1m[4m[7mmem_pct [0m[1m[4m[7mvsz [0m[1m[4m[7mrss [0m[1m[4mtty [0m[1m[4mstat [0m[1m[4mstart_time [0m[1m[4mcpu_time [0m[1m[4m cmd [0m[1m[4m cmd_name [0m[1m[4mcmd_args [0m
|
||||
[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2022-06-02 00:01:01.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 1[0m[1m [0m[1mroot[0m[1m [0m[1m 2[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mS [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[kthreadd][0m[1m [0m[1m[kthreadd][0m[1m [0m[1m <[0m[1mNULL[0m[1m> [0m
|
||||
[7m 12[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:02:01.000[0m[7m [0m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m 1[0m[7m [0m[7mroot[0m[7m [0m[7m 2[0m[7m [0m[7m 0[0m[7m [0m[7m 0[0m[7m [0m[7m 0[0m[7m [0m[7m 0[0m[7m [0m[7m? [0m[7m [0m[7mS [0m[7m [0m[7mJun01 [0m[7m [0m[7m0:00 [0m[7m [0m[7m[kthreadd][0m[7m [0m[7m[kthreadd][0m[7m [0m[7m <N[0mULL>
|
||||
0 <NULL> 2022-06-02 00:01:01.000 [1m 0[0m info 0 <NULL> <NULL> <NULL> 1 root 2 [1m 0[0m [1m 0[0m [1m 0[0m [1m 0[0m ? S Jun01 0:00 [kthreadd] [kthreadd] <NULL>
|
||||
[7m 12[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:02:01.000[0m[7m [0m[1m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m 1[0m[7m [0m[7mroot[0m[7m [0m[7m 2[0m[7m [0m[1m[7m 0[0m[7m [0m[1m[7m 0[0m[7m [0m[1m[7m 0[0m[7m [0m[1m[7m 0[0m[7m [0m[7m? [0m[7m [0m[7mS [0m[7m [0m[7mJun01 [0m[7m [0m[7m0:00 [0m[7m [0m[7m[kthreadd][0m[7m [0m[7m[kthreadd][0m[7m [0m[7m <N[0mULL>
|
||||
[1m[7m 30[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:03:01.000[0m[1m[7m [0m[1m[7m 60000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m 1[0m[1m[7m [0m[1m[7mroot[0m[1m[7m [0m[1m[7m 2[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m? [0m[1m[7m [0m[1m[7mS [0m[1m[7m [0m[1m[7mJun01 [0m[1m[7m [0m[1m[7m0:00 [0m[1m[7m [0m[1m[7m[kthreadd][0m[1m[7m [0m[1m[7m[kthreadd][0m[1m[7m [0m[1m[7m <N[0m[1mULL> [0m
|
||||
|
@ -1,24 +1,24 @@
|
||||
[1m[4mlog_line [0m[1m[4mlog_part [0m[1m[4m log_time [0m[1m[4m[7mlog_idle_msecs [0m[1m[4mlog_level [0m[1m[4mlog_mark [0m[1m[4mlog_comment [0m[1m[4mlog_tags [0m[1m[4mlog_filters [0m[1m[4mmatch_index [0m[1m[4muser [0m[1m[4mpid [0m[1m[4m[7mcpu_pct [0m[1m[4m[7mmem_pct [0m[1m[4m[7m vsz [0m[1m[4m[7mrss [0m[1m[4mtty [0m[1m[4mstat [0m[1m[4mstart_time [0m[1m[4mcpu_time [0m[1m[4m cmd [0m[1m[4m cmd_name [0m[1m[4m cmd_args [0m
|
||||
[1m[7m 0[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:01:01.000[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7mroot[0m[1m[7m [0m[1m[7m 1[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m158392[0m[1m[7m [0m[1m[7m7792[0m[1m[7m [0m[1m[7m? [0m[1m[7m [0m[1m[7mSs [0m[1m[7m [0m[1m[7mJun01 [0m[1m[7m [0m[1m[7m0:14 [0m[1m[7m [0m[1m[7m/lib/systemd/systemd --switche[0m[1m[7md-root --sy[0m[1mstem --deserialize 16[0m[1m [0m[1m/lib/systemd/systemd [0m[1m [0m[1m--switched-root --system --deserialize 16 [0m
|
||||
0 <NULL> 2022-06-02 00:01:01.000 0 info 0 <NULL> <NULL> <NULL> 1 root 2 0 0 0 0 ? S Jun01 0:00 [kthreadd] [kthreadd] <NULL>
|
||||
[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:01:01.000[0m[7m [0m[1m[7m 0[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m 0[0m[7m [0m[7mroot[0m[7m [0m[7m 1[0m[7m [0m[1m[7m 0[0m[7m [0m[1m[7m 0[0m[7m [0m[1m[7m158392[0m[7m [0m[1m[7m7792[0m[7m [0m[7m? [0m[7m [0m[7mSs [0m[7m [0m[7mJun01 [0m[7m [0m[7m0:14 [0m[7m [0m[7m/lib/systemd/systemd --switche[0m[7md-root --sy[0mstem --deserialize 16 /lib/systemd/systemd --switched-root --system --deserialize 16
|
||||
0 <NULL> 2022-06-02 00:01:01.000 [1m 0[0m info 0 <NULL> <NULL> <NULL> 1 root 2 [1m 0[0m [1m 0[0m [1m 0[0m [1m 0[0m ? S Jun01 0:00 [kthreadd] [kthreadd] <NULL>
|
||||
[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2022-06-02 00:01:01.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 2[0m[1m [0m[1mroot[0m[1m [0m[1m 3[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mI< [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[rcu_gp] [0m[1m [0m[1m[rcu_gp] [0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
0 <NULL> 2022-06-02 00:01:01.000 0 info 0 <NULL> <NULL> <NULL> 3 root 4 0 0 0 0 ? I< Jun01 0:00 [rcu_par_gp] [rcu_par_gp] <NULL>
|
||||
[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2022-06-02 00:01:01.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 4[0m[1m [0m[1mroot[0m[1m [0m[1m 6[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mI< [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[kworker/0:0H-kblockd] [0m[1m [0m[1m[kworker/0:0H-kblockd][0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
[7m 12[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:02:01.000[0m[7m [0m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0m[7mNULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m 0[0m[7m [0m[7mroot[0m[7m [0m[7m 1[0m[7m [0m[7m 0[0m[7m [0m[7m 0[0m[7m [0m[7m158392[0m[7m [0m[7m7792[0m[7m [0m[7m? [0m[7m [0m[7mSs [0m[7m [0m[7mJun01 [0m[7m [0m[7m0:14 [0m[7m [0m[7m/lib/systemd/systemd --switched-root --system --deserialize 16[0m[7m [0m[7m/lib/systemd/systemd [0m[7m [0m[7m--switched-root --system -[0m[7m-deserializ[0me 16
|
||||
[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2022-06-02 00:01:01.000[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 3[0m[1m [0m[1mroot[0m[1m [0m[1m 4[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mI< [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[rcu_par_gp] [0m[1m [0m[1m[rcu_par_gp] [0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
0 <NULL> 2022-06-02 00:01:01.000 [1m 0[0m info 0 <NULL> <NULL> <NULL> 4 root 6 [1m 0[0m [1m 0[0m [1m 0[0m [1m 0[0m ? I< Jun01 0:00 [kworker/0:0H-kblockd] [kworker/0:0H-kblockd] <NULL>
|
||||
[7m 12[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:02:01.000[0m[7m [0m[1m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0m[7mNULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m 0[0m[7m [0m[7mroot[0m[7m [0m[7m 1[0m[7m [0m[1m[7m 0[0m[7m [0m[1m[7m 0[0m[7m [0m[1m[7m158392[0m[7m [0m[1m[7m7792[0m[7m [0m[7m? [0m[7m [0m[7mSs [0m[7m [0m[7mJun01 [0m[7m [0m[7m0:14 [0m[7m [0m[7m/lib/systemd/systemd --switched-root --system --deserialize 16[0m[7m [0m[7m/lib/systemd/systemd [0m[7m [0m[7m--switched-root --system -[0m[7m-deserializ[0me 16
|
||||
[1m[7m 12[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:02:01.000[0m[1m[7m [0m[1m[7m 60000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 1[0m[1m [0m[1mroot[0m[1m [0m[1m 2[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mS [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[kthreadd] [0m[1m [0m[1m[kthreadd] [0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
[7m 12[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:02:01.000[0m[7m [0m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 2 root 3 0 0 0 0 ? I< Jun01 0:00 [rcu_gp] [rcu_gp] <NULL>
|
||||
[1m[7m 12[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:02:01.000[0m[1m[7m [0m[1m[7m 60000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 3[0m[1m [0m[1mroot[0m[1m [0m[1m 4[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mI< [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[rcu_par_gp] [0m[1m [0m[1m[rcu_par_gp] [0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
[7m 12[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:02:01.000[0m[7m [0m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 4 root 6 0 0 0 0 ? I< Jun01 0:00 [kworker/0:0H-kblockd] [kworker/0:0H-kblockd] <NULL>
|
||||
[1m[7m 12[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:02:01.000[0m[1m[7m [0m[1m[7m 60000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 2[0m[1m [0m[1mroot[0m[1m [0m[1m 3[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mI< [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[rcu_gp] [0m[1m [0m[1m[rcu_gp] [0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
[7m 12[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:02:01.000[0m[7m [0m[1m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 3 root 4 [1m 0[0m [1m 0[0m [1m 0[0m [1m 0[0m ? I< Jun01 0:00 [rcu_par_gp] [rcu_par_gp] <NULL>
|
||||
[7m 12[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:02:01.000[0m[7m [0m[1m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 4 root 6 [1m 0[0m [1m 0[0m [1m 0[0m [1m 0[0m ? I< Jun01 0:00 [kworker/0:0H-kblockd] [kworker/0:0H-kblockd] <NULL>
|
||||
[1m[7m 12[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:02:01.000[0m[1m[7m [0m[1m[7m 60000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 5[0m[1m [0m[1mroot[0m[1m [0m[1m 8[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mI< [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[mm_percpu_wq] [0m[1m [0m[1m[mm_percpu_wq] [0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
[7m 12[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:02:01.000[0m[7m [0m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 6 root 9 0 0 0 0 ? S Jun01 0:00 [ksoftirqd/0] [ksoftirqd/0] <NULL>
|
||||
[1m[7m 12[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:02:01.000[0m[1m[7m [0m[1m[7m 60000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 7[0m[1m [0m[1mroot[0m[1m [0m[1m 10[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mI [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:23 [0m[1m [0m[1m[rcu_sched] [0m[1m [0m[1m[rcu_sched] [0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
[7m 12[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:02:01.000[0m[7m [0m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 8 root 11 0 0 0 0 ? I Jun01 0:00 [rcu_bh] [rcu_bh] <NULL>
|
||||
[1m[7m 12[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:02:01.000[0m[1m[7m [0m[1m[7m 60000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 6[0m[1m [0m[1mroot[0m[1m [0m[1m 9[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mS [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[ksoftirqd/0] [0m[1m [0m[1m[ksoftirqd/0] [0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
[7m 12[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:02:01.000[0m[7m [0m[1m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 7 root 10 [1m 0[0m [1m 0[0m [1m 0[0m [1m 0[0m ? I Jun01 0:23 [rcu_sched] [rcu_sched] <NULL>
|
||||
[7m 12[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:02:01.000[0m[7m [0m[1m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 8 root 11 [1m 0[0m [1m 0[0m [1m 0[0m [1m 0[0m ? I Jun01 0:00 [rcu_bh] [rcu_bh] <NULL>
|
||||
[1m[7m 12[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:02:01.000[0m[1m[7m [0m[1m[7m 60000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 9[0m[1m [0m[1mroot[0m[1m [0m[1m 12[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mS [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[migration/0] [0m[1m [0m[1m[migration/0] [0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
[7m 12[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:02:01.000[0m[7m [0m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 10 root 14 0 0 0 0 ? S Jun01 0:00 [cpuhp/0] [cpuhp/0] <NULL>
|
||||
[1m[7m 30[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:03:01.000[0m[1m[7m [0m[1m[7m 60000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1m[7mNULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7mroot[0m[1m[7m [0m[1m[7m 1[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m158392[0m[1m[7m [0m[1m[7m7792[0m[1m[7m [0m[1m[7m? [0m[1m[7m [0m[1m[7mSs [0m[1m[7m [0m[1m[7mJun01 [0m[1m[7m [0m[1m[7m0:14 [0m[1m[7m [0m[1m[7m/lib/systemd/systemd --switched-root --system --deserialize 16[0m[1m[7m [0m[1m[7m/lib/systemd/systemd [0m[1m[7m [0m[1m[7m--switched-root --system -[0m[1m[7m-deserializ[0m[1me 16 [0m
|
||||
[7m 30[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:03:01.000[0m[7m [0m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 1 root 2 0 0 0 0 ? S Jun01 0:00 [kthreadd] [kthreadd] <NULL>
|
||||
[1m[7m 12[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:02:01.000[0m[1m[7m [0m[1m[7m 60000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 10[0m[1m [0m[1mroot[0m[1m [0m[1m 14[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mS [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[cpuhp/0] [0m[1m [0m[1m[cpuhp/0] [0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
[7m 30[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:03:01.000[0m[7m [0m[1m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0m[7mNULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m 0[0m[7m [0m[7mroot[0m[7m [0m[7m 1[0m[7m [0m[1m[7m 0[0m[7m [0m[1m[7m 0[0m[7m [0m[1m[7m158392[0m[7m [0m[1m[7m7792[0m[7m [0m[7m? [0m[7m [0m[7mSs [0m[7m [0m[7mJun01 [0m[7m [0m[7m0:14 [0m[7m [0m[7m/lib/systemd/systemd --switched-root --system --deserialize 16[0m[7m [0m[7m/lib/systemd/systemd [0m[7m [0m[7m--switched-root --system -[0m[7m-deserializ[0me 16
|
||||
[7m 30[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:03:01.000[0m[7m [0m[1m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 1 root 2 [1m 0[0m [1m 0[0m [1m 0[0m [1m 0[0m ? S Jun01 0:00 [kthreadd] [kthreadd] <NULL>
|
||||
[1m[7m 30[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:03:01.000[0m[1m[7m [0m[1m[7m 60000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 2[0m[1m [0m[1mroot[0m[1m [0m[1m 3[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mI< [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[rcu_gp] [0m[1m [0m[1m[rcu_gp] [0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
[7m 30[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:03:01.000[0m[7m [0m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 3 root 4 0 0 0 0 ? I< Jun01 0:00 [rcu_par_gp] [rcu_par_gp] <NULL>
|
||||
[1m[7m 30[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:03:01.000[0m[1m[7m [0m[1m[7m 60000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 4[0m[1m [0m[1mroot[0m[1m [0m[1m 6[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mI< [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[kworker/0:0H-kblockd] [0m[1m [0m[1m[kworker/0:0H-kblockd][0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
[7m 30[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:03:01.000[0m[7m [0m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 5 root 8 0 0 0 0 ? I< Jun01 0:00 [mm_percpu_wq] [mm_percpu_wq] <NULL>
|
||||
[1m[7m 30[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:03:01.000[0m[1m[7m [0m[1m[7m 60000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 3[0m[1m [0m[1mroot[0m[1m [0m[1m 4[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mI< [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[rcu_par_gp] [0m[1m [0m[1m[rcu_par_gp] [0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
[7m 30[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:03:01.000[0m[7m [0m[1m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 4 root 6 [1m 0[0m [1m 0[0m [1m 0[0m [1m 0[0m ? I< Jun01 0:00 [kworker/0:0H-kblockd] [kworker/0:0H-kblockd] <NULL>
|
||||
[7m 30[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 00:03:01.000[0m[7m [0m[1m[7m 60000[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <[0mNULL> <NULL> <NULL> 5 root 8 [1m 0[0m [1m 0[0m [1m 0[0m [1m 0[0m ? I< Jun01 0:00 [mm_percpu_wq] [mm_percpu_wq] <NULL>
|
||||
[1m[7m 30[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 00:03:01.000[0m[1m[7m [0m[1m[7m 60000[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m 6[0m[1m [0m[1mroot[0m[1m [0m[1m 9[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m 0[0m[1m [0m[1m? [0m[1m [0m[1mS [0m[1m [0m[1mJun01 [0m[1m [0m[1m0:00 [0m[1m [0m[1m[ksoftirqd/0] [0m[1m [0m[1m[ksoftirqd/0] [0m[1m [0m[1m<[0m[1mNULL[0m[1m> [0m
|
||||
|
@ -1,6 +1,6 @@
|
||||
[1m[4mlog_line [0m[1m[4mlog_part [0m[1m[4m log_time [0m[1m[4m[7mlog_idle_msecs [0m[1m[4mlog_level [0m[1m[4mlog_mark [0m[1m[4mlog_comment [0m[1m[4mlog_tags [0m[1m[4mlog_filters [0m[1m[4m comp [0m[1m[4m opid [0m[1m[4m tid [0m[1m[4m user [0m[1m[4m item [0m[1m[4mprc [0m[1m[4mreason [0m[1m[4m req [0m[1m[4m sid [0m[1m[4m src [0m[1m[4m sub [0m[1m[4mvpxa_update [0m[1m[4m line [0m[1m[4m file [0m[1m[4mmatch_index [0m[1m[4m lro_id [0m[1m[4m entity [0m[1m[4m operation [0m[1m[4m SessionId [0m[1m[4m SessionSubId [0m[1m[4m log_body [0m
|
||||
[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2022-06-02 11:58:12.193[0m[1m [0m[1m 0[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1m7e1280cf [0m[1m [0m[1m45715[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1mvpxd[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1mOriginator@6876[0m[1m [0m[1mvpxLro[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1m 0[0m[1m [0m[1mlro-846063[0m[1m [0m[1mSessionManager [0m[1m [0m[1mvim.SessionManager.sessionIsActive [0m[1m [0m[1m528e6e0c-246d-58b5-3234-278c6e0c5d0d[0m[1m [0m[1m52c289ac-2563-48d5-8a8e-f178da022c0d[0m[1m [0m[1m[VpxLRO] -- BEGIN lro-846063 -- SessionManager -- vim.Sessio⋯8b5-3234-278c6e0c5d0d(52c289ac-2563-48d5-8a8e-f178da022c0d) [0m
|
||||
[7m 2[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 11:58:12.376[0m[7m [0m[7m 182[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7me3979f6 [0m[7m [0m[7m45709[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7mvpxd[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7mOriginator@6876[0m[7m [0m[7mvpxLro[0m[7m [0m[7m <NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7m 0[0m[7m [0m[7mlro-846064[0m[7m [0m[7mSessionManager [0m[7m [0m[7mvim.SessionManager.sessionIsActive [0m[7m [0m[7m52626140-422b-6287-b4e4-344192c6a01d[0m[7m [0m[7m523e0a4b-6e83-6bcd-9342-22502dd89866[0m[7m [0m[7m[VpxLRO] -- BEGIN lro-846[0m064 -- SessionManager -- vim.Sessio⋯287-b4e4-344192c6a01d(523e0a4b-6e83-6bcd-9342-22502dd89866)
|
||||
0 <NULL> 2022-06-02 11:58:12.193 [1m 0[0m info 0 <NULL> <NULL> <NULL> <NULL> 7e1280cf 45715 <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro <NULL> <NULL> <NULL> 0 lro-846063 SessionManager vim.SessionManager.sessionIsActive 528e6e0c-246d-58b5-3234-278c6e0c5d0d 52c289ac-2563-48d5-8a8e-f178da022c0d [VpxLRO] -- BEGIN lro-846063 -- SessionManager -- vim.Sessio⋯8b5-3234-278c6e0c5d0d(52c289ac-2563-48d5-8a8e-f178da022c0d)
|
||||
[7m 2[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 11:58:12.376[0m[7m [0m[1m[7m 182[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7me3979f6 [0m[7m [0m[7m45709[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7mvpxd[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7mOriginator@6876[0m[7m [0m[7mvpxLro[0m[7m [0m[7m <NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7m 0[0m[7m [0m[7mlro-846064[0m[7m [0m[7mSessionManager [0m[7m [0m[7mvim.SessionManager.sessionIsActive [0m[7m [0m[7m52626140-422b-6287-b4e4-344192c6a01d[0m[7m [0m[7m523e0a4b-6e83-6bcd-9342-22502dd89866[0m[7m [0m[7m[VpxLRO] -- BEGIN lro-846[0m064 -- SessionManager -- vim.Sessio⋯287-b4e4-344192c6a01d(523e0a4b-6e83-6bcd-9342-22502dd89866)
|
||||
[1m[7m 4[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 11:58:12.623[0m[1m[7m [0m[1m[7m 246[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7ml3wrhr4o-cbf-h5:70001034-60[0m[1m[7m [0m[1m[7m47524[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7mvpxd[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7mOriginator@6876[0m[1m[7m [0m[1m[7mvpxLro[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7mlro-846066[0m[1m[7m [0m[1m[7mChangeLogCollector[0m[1m[7m [0m[1m[7mvim.cdc.ChangeLogCollector.waitForChanges[0m[1m[7m [0m[1m[7m526861fc-0c28-1930-ae5e-d8c2772bf8c2[0m[1m[7m [0m[1m[7m52a7a308-9646-c054-f1e7-16131c1a7db6[0m[1m[7m [0m[1m[7m[VpxLRO] -- BEGIN lro-846066 -- ChangeLogCollector -- vim.c⋯1930-ae5e-d8c2772bf8c2(52a7a308-9646-c054-f1e7-16131c1a7db6) [0m
|
||||
[7m 6[0m[7m [0m[7m <NULL>[0m[7m [0m[7m2022-06-02 11:58:12.736[0m[7m [0m[7m 113[0m[7m [0m[7minfo [0m[7m [0m[7m 0[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m <NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7m499b440 [0m[7m [0m[7m48432[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7mvpxd[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7mOriginator@6876[0m[7m [0m[7mvpxLro[0m[7m [0m[7m <NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7m<NULL>[0m[7m [0m[7m 0[0m[7m [0m[7mlro-846067[0m[7m [0mSessionManager vim.SessionManager.sessionIsActive 521fe9f6-d061-11a2-ac86-badb3c071373 524cba9b-2cc4-9b70-32e4-421452a404d7 [VpxLRO] -- BEGIN lro-846067 -- SessionManager -- vim.Sessio⋯1a2-ac86-badb3c071373(524cba9b-2cc4-9b70-32e4-421452a404d7)
|
||||
[1m[7m 8[0m[1m[7m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m2022-06-02 11:58:12.740[0m[1m [0m[1m 4[0m[1m [0m[1minfo [0m[1m [0m[1m 0[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1m55a419df [0m[1m [0m[1m48035[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1mvpxd[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1mOriginator@6876[0m[1m [0m[1mvpxLro[0m[1m [0m[1m <[0m[1mNULL[0m[1m>[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1m<[0m[1mNULL[0m[1m>[0m[1m [0m[1m 0[0m[1m [0m[1mlro-846068[0m[1m [0m[1mSessionManager [0m[1m [0m[1mvim.SessionManager.sessionIsActive [0m[1m [0m[1m52585600-b0bc-76b1-c4d5-4d7708671c5e[0m[1m [0m[1m523b68ba-e312-9909-a3ca-39cc86aaf206[0m[1m [0m[1m[VpxLRO] -- BEGIN lro-846068 -- SessionManager -- vim.Sessio⋯6b1-c4d5-4d7708671c5e(523b68ba-e312-9909-a3ca-39cc86aaf206) [0m
|
||||
[1m[7m 6[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m2022-06-02 11:58:12.736[0m[1m[7m [0m[1m[7m 113[0m[1m[7m [0m[1m[7minfo [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m499b440 [0m[1m[7m [0m[1m[7m48432[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7mvpxd[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7mOriginator@6876[0m[1m[7m [0m[1m[7mvpxLro[0m[1m[7m [0m[1m[7m <NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m<NULL>[0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7mlro-846067[0m[1m[7m [0m[1mSessionManager [0m[1m [0m[1mvim.SessionManager.sessionIsActive [0m[1m [0m[1m521fe9f6-d061-11a2-ac86-badb3c071373[0m[1m [0m[1m524cba9b-2cc4-9b70-32e4-421452a404d7[0m[1m [0m[1m[VpxLRO] -- BEGIN lro-846067 -- SessionManager -- vim.Sessio⋯1a2-ac86-badb3c071373(524cba9b-2cc4-9b70-32e4-421452a404d7) [0m
|
||||
[7m 8[0m[7m [0m <NULL> 2022-06-02 11:58:12.740 [1m 4[0m info 0 <NULL> <NULL> <NULL> <NULL> 55a419df 48035 <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro <NULL> <NULL> <NULL> 0 lro-846068 SessionManager vim.SessionManager.sessionIsActive 52585600-b0bc-76b1-c4d5-4d7708671c5e 523b68ba-e312-9909-a3ca-39cc86aaf206 [VpxLRO] -- BEGIN lro-846068 -- SessionManager -- vim.Sessio⋯6b1-c4d5-4d7708671c5e(523b68ba-e312-9909-a3ca-39cc86aaf206)
|
||||
|
@ -0,0 +1,2 @@
|
||||
Row 0:
|
||||
Column parse_url('https://example.com/sea%26rch?flag&flag2&=def&flag3=abc+def#frag1%20space'): {"scheme":"https","username":null,"password":null,"host":"example.com","port":null,"path":"/sea&rch","query":"flag&flag2&=def&flag3=abc+def","parameters":{"flag":null,"flag2":null,"":"def","flag3":"abc def"},"fragment":"frag1 space"}
|
@ -0,0 +1 @@
|
||||
error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"unexpected JSON value","attrs":[]},"reason":{"str":"","attrs":[]},"snippets":[{"source":"arg","line":1,"content":{"str":"123","attrs":[{"start":0,"end":-1,"type":"role","value":40}]}}],"help":{"str":"Available Properties\n scheme \n username \n password \n host \n port \n path \n query \n parameters/ \n fragment","attrs":[{"start":0,"end":20,"type":"role","value":59},{"start":23,"end":29,"type":"role","value":47},{"start":33,"end":41,"type":"role","value":47},{"start":45,"end":53,"type":"role","value":47},{"start":57,"end":61,"type":"role","value":47},{"start":65,"end":69,"type":"role","value":47},{"start":73,"end":77,"type":"role","value":47},{"start":81,"end":86,"type":"role","value":47},{"start":90,"end":100,"type":"role","value":47},{"start":100,"end":101,"type":"role","value":47},{"start":105,"end":113,"type":"role","value":47}]}}
|
@ -0,0 +1 @@
|
||||
error: sqlite3_exec failed -- lnav-error:{"level":"warning","message":{"str":"unexpected value for property “/unknown”","attrs":[{"start":33,"end":41,"type":"role","value":47}]},"reason":{"str":"","attrs":[]},"snippets":[{"source":"arg","line":1,"content":{"str":"{\"unknown\":\"abc\"}","attrs":[{"start":0,"end":-1,"type":"role","value":40}]}}],"help":{"str":"Available Properties\n scheme \n username \n password \n host \n port \n path \n query \n parameters/ \n fragment","attrs":[{"start":0,"end":20,"type":"role","value":59},{"start":23,"end":29,"type":"role","value":47},{"start":33,"end":41,"type":"role","value":47},{"start":45,"end":53,"type":"role","value":47},{"start":57,"end":61,"type":"role","value":47},{"start":65,"end":69,"type":"role","value":47},{"start":73,"end":77,"type":"role","value":47},{"start":81,"end":86,"type":"role","value":47},{"start":90,"end":100,"type":"role","value":47},{"start":100,"end":101,"type":"role","value":47},{"start":105,"end":113,"type":"role","value":47}]}}
|
@ -0,0 +1 @@
|
||||
error: sqlite3_exec failed -- lnav-error:{"level":"warning","message":{"str":"unexpected value for property “/#”","attrs":[{"start":33,"end":35,"type":"role","value":47}]},"reason":{"str":"","attrs":[]},"snippets":[{"source":"arg","line":1,"content":{"str":"[1, 2, 3]","attrs":[{"start":0,"end":-1,"type":"role","value":40}]}}],"help":{"str":"Available Properties\n scheme \n username \n password \n host \n port \n path \n query \n parameters/ \n fragment","attrs":[{"start":0,"end":20,"type":"role","value":59},{"start":23,"end":29,"type":"role","value":47},{"start":33,"end":41,"type":"role","value":47},{"start":45,"end":53,"type":"role","value":47},{"start":57,"end":61,"type":"role","value":47},{"start":65,"end":69,"type":"role","value":47},{"start":73,"end":77,"type":"role","value":47},{"start":81,"end":86,"type":"role","value":47},{"start":90,"end":100,"type":"role","value":47},{"start":100,"end":101,"type":"role","value":47},{"start":105,"end":113,"type":"role","value":47}]}}
|
@ -0,0 +1,2 @@
|
||||
Row 0:
|
||||
Column unparse_url(NULL): (null)
|
@ -0,0 +1,2 @@
|
||||
Row 0:
|
||||
Column unparse_url('{}'): (null)
|
@ -1,3 +1,3 @@
|
||||
[1m[4mview_name [0m[1m[4m[7mfilter_id [0m[1m[4m[7menabled [0m[1m[4mtype [0m[1m[4mlanguage [0m[1m[4mpattern [0m
|
||||
[1m[7ml[0m[1m[7mo[0m[1mg [0m[1m [0m[1m 1[0m[1m [0m[1m 1[0m[1m [0m[1min [0m[1m [0m[1mregex [0m[1m [0m[1mvmk [0m
|
||||
[7mlog [0m[7m [0m[7m 2[0m[7m [0m[7m [0m[7m [0m 1 in regex vmk1
|
||||
[7ml[0m[7mo[0mg [1m 1[0m [1m 1[0m in regex vmk
|
||||
[7mlog [0m[7m [0m[1m[7m 2[0m[7m [0m[1m[7m [0m[1m[7m [0m[1m 1[0m in regex vmk1
|
||||
|
@ -1,2 +1,2 @@
|
||||
[1m[4mview_name [0m[1m[4m[7mfilter_id [0m[1m[4m[7menabled [0m[1m[4mtype [0m[1m[4mlanguage [0m[1m[4mpattern [0m
|
||||
[1m[7mlog [0m[1m[7m [0m[1m[7m 0[0m[1m[7m [0m[1m[7m 1[0m[1m[7m [0m[1m[7mout [0m[1m[7m [0m[1m[7msql [0m[1m[7m [0m[1m[7m1 [0m[1m [0m
|
||||
[7mlog [0m[7m [0m[1m[7m 0[0m[7m [0m[1m[7m 1[0m[7m [0m[7mout [0m[7m [0m[7msql [0m[7m [0m[7m1 [0m
|
||||
|
@ -1,2 +1,2 @@
|
||||
[1m[4mview_name [0m[1m[4m[7mfilter_id [0m[1m[4m[7menabled [0m[1m[4mtype [0m[1m[4mlanguage [0m[1m[4mpattern [0m
|
||||
[1m[7ml[0m[1m[7mo[0m[1mg [0m[1m [0m[1m 1[0m[1m [0m[1m 1[0m[1m [0m[1min [0m[1m [0m[1mregex [0m[1m [0m[1mvmk [0m
|
||||
[7ml[0m[7mo[0mg [1m 1[0m [1m 1[0m in regex vmk
|
||||
|
@ -1,2 +1,2 @@
|
||||
[1m[4m filepath [0m[1m[4m descriptor [0m[1m[4m mimetype [0m[1m[4m content [0m
|
||||
[1m{test_dir}/textfile_0.md[0m[1m [0m[1mnet.daringfireball.markdown.frontmatter[0m[1m [0m[1mapplication/json[0m[1m [0m[1m{␊ "comment": "This is JSON front-matter"␊} [0m
|
||||
{test_dir}/textfile_0.md net.daringfireball.markdown.frontmatter application/json {␊ "comment": "This is JSON front-matter"␊}
|
||||
|
@ -48,3 +48,5 @@ run_cap_test ./drive_sql_anno \
|
||||
"SELECT * from vmw_log, regexp_capture(log_body, '--> /SessionStats/SessionPool/Session/(?<line>[abc]+)')"
|
||||
|
||||
run_cap_test ./drive_sql_anno "SELECT * FROM foo.bar"
|
||||
|
||||
run_cap_test ./drive_sql_anno "SELECT json_object('abc', 'def') ->> '$.abc'"
|
||||
|
@ -145,6 +145,10 @@ run_cap_test env TEST_COMMENT=parse_url6 ./drive_sql <<'EOF'
|
||||
SELECT parse_url('https://example.com/sea%26rch?flag&flag2&=def#frag1%20space')
|
||||
EOF
|
||||
|
||||
run_cap_test env TEST_COMMENT=parse_url7 ./drive_sql <<'EOF'
|
||||
SELECT parse_url('https://example.com/sea%26rch?flag&flag2&=def&flag3=abc+def#frag1%20space')
|
||||
EOF
|
||||
|
||||
|
||||
run_cap_test env TEST_COMMENT=unparse_url3 ./drive_sql <<'EOF'
|
||||
SELECT unparse_url(parse_url('https://example.com/search?flag'))
|
||||
@ -162,6 +166,26 @@ run_cap_test env TEST_COMMENT=unparse_url6 ./drive_sql <<'EOF'
|
||||
SELECT unparse_url(parse_url('https://example.com/search?flag&flag2&=def#frag1%20space'))
|
||||
EOF
|
||||
|
||||
run_cap_test env TEST_COMMENT=unparse_url7 ./drive_sql <<'EOF'
|
||||
SELECT unparse_url(NULL)
|
||||
EOF
|
||||
|
||||
run_cap_test env TEST_COMMENT=unparse_url8 ./drive_sql <<'EOF'
|
||||
SELECT unparse_url(123)
|
||||
EOF
|
||||
|
||||
run_cap_test env TEST_COMMENT=unparse_url9 ./drive_sql <<'EOF'
|
||||
SELECT unparse_url('[1, 2, 3]')
|
||||
EOF
|
||||
|
||||
run_cap_test env TEST_COMMENT=unparse_url10 ./drive_sql <<'EOF'
|
||||
SELECT unparse_url(json_object('unknown', 'abc'))
|
||||
EOF
|
||||
|
||||
run_cap_test env TEST_COMMENT=unparse_url11 ./drive_sql <<'EOF'
|
||||
SELECT unparse_url('{}')
|
||||
EOF
|
||||
|
||||
run_cap_test ${lnav_test} -n \
|
||||
-c ';SELECT log_body, extract(log_body) from vmw_log' \
|
||||
-c ':write-json-to -' \
|
||||
|
Loading…
Reference in New Issue
Block a user