@ -544,7 +544,7 @@ you can attach another database and create tables in that database.
For example, if you wanted to save the results from the earlier
example of a top ten query into the "/tmp/topten.db" file, you can do:
▌ [37m [40m; [0m [1m [36m [40mATTACH [0m [37m [40m [0m [1m [36m [40mDATABASE [0m [37m [40m [0m [37 m [40m'/tmp/topten.db' [0m [37m [40m [0m [1m [36m [40mAS [0m [37m [40m [0m [37m [40mtopten [0m [37m [40m; [0m
▌ [37m [40m; [0m [1m [36m [40mATTACH [0m [37m [40m [0m [1m [36m [40mDATABASE [0m [37m [40m [0m [35 m [40m'/tmp/topten.db' [0m [37m [40m [0m [1m [36m [40mAS [0m [37m [40m [0m [37m [40mtopten [0m [37m [40m; [0m
▌ [37m [40m; [0m [1m [36m [40mCREATE [0m [37m [40m [0m [1m [36m [40mTABLE [0m [37m [40m [0m [37m [40mtopten [0m [1m [36m [40m.foo [0m [37m [40m [0m [1m [36m [40mAS [0m [37m [40m [0m [1m [36m [40mSELECT [0m [37m [40m [0m [37m [40mcs_uri_stem [0m [37m [40m, [0m [1m [37m [40mcount [0m [37m [40m( [0m [1m [37m [40m* [0m [37m [40m) [0m [1m [36m [40mAS [0m [37m [40m [0m [37m [40mtotal [0m [37m [40m [0m
▌ [37m [40m [0m [1m [36m [40mFROM [0m [37m [40m [0m [37m [40maccess_log [0m [37m [40m [0m [1m [36m [40mGROUP [0m [37m [40m [0m [1m [36m [40mBY [0m [37m [40m [0m [37m [40mcs_uri_stem [0m [37m [40m [0m [1m [36m [40mORDER [0m [37m [40m [0m [1m [36m [40mBY [0m [37m [40m [0m [37m [40mtotal [0m [37m [40m [0m [1m [36m [40mDESC [0m [37m [40m [0m
▌ [37m [40m [0m [1m [36m [40mLIMIT [0m [37m [40m 10; [0m
@ -621,16 +621,16 @@ Access to lnav's environment variables is also available via the
read and written to using SQL SELECT, INSERT, UPDATE, and DELETE
statements. For example, to set the "FOO" variable to the value "BAR":
▌ [37m [40m; [0m [1m [36m [40mINSERT [0m [37m [40m [0m [1m [36m [40mINTO [0m [37m [40m [0m [37m [40menviron [0m [37m [40m [0m [1m [36m [40mSELECT [0m [37m [40m [0m [37m [40m'FOO' [0m [37m [40m, [0m [37 m [40m'BAR' [0m [37m [40m; [0m
▌ [37m [40m; [0m [1m [36m [40mINSERT [0m [37m [40m [0m [1m [36m [40mINTO [0m [37m [40m [0m [37m [40menviron [0m [37m [40m [0m [1m [36m [40mSELECT [0m [37m [40m [0m [35m [40m'FOO' [0m [37m [40m, [0m [35 m [40m'BAR' [0m [37m [40m; [0m
As a more complex example, you can set the variable "LAST" to the last
syslog line number by doing:
▌ [37m [40m; [0m [1m [36m [40mINSERT [0m [37m [40m [0m [1m [36m [40mINTO [0m [37m [40m [0m [37m [40menviron [0m [37m [40m [0m [1m [36m [40mSELECT [0m [37m [40m [0m [37 m [40m'LAST' [0m [37m [40m, ( [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mmax [0m [37m [40m( [0m [37m [40mlog_line [0m [37m [40m) [0m [1m [36m [40mFROM [0m [37m [40m [0m [37m [40msyslog_log [0m [37m [40m); [0m
▌ [37m [40m; [0m [1m [36m [40mINSERT [0m [37m [40m [0m [1m [36m [40mINTO [0m [37m [40m [0m [37m [40menviron [0m [37m [40m [0m [1m [36m [40mSELECT [0m [37m [40m [0m [35 m [40m'LAST' [0m [37m [40m, ( [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mmax [0m [37m [40m( [0m [37m [40mlog_line [0m [37m [40m) [0m [1m [36m [40mFROM [0m [37m [40m [0m [37m [40msyslog_log [0m [37m [40m); [0m
A delete will unset the environment variable:
▌ [37m [40m; [0m [1m [36m [40mDELETE [0m [37m [40m [0m [1m [36m [40mFROM [0m [37m [40m [0m [37m [40menviron [0m [37m [40m [0m [1m [36m [40mWHERE [0m [37m [40m [0m [37m [40mname [0m [1m [37m [40m= [0m [37 m [40m'LAST' [0m [37m [40m; [0m
▌ [37m [40m; [0m [1m [36m [40mDELETE [0m [37m [40m [0m [1m [36m [40mFROM [0m [37m [40m [0m [37m [40menviron [0m [37m [40m [0m [1m [36m [40mWHERE [0m [37m [40m [0m [37m [40mname [0m [1m [37m [40m= [0m [35 m [40m'LAST' [0m [37m [40m; [0m
The table allows you to easily use the results of a SQL query in lnav
commands, which is especially useful when scripting lnav.
@ -966,12 +966,12 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1m:hide-lines-before [0m, [1m:hide-unmarked-lines [0m, [1m:toggle-filtering [0m
[4mExamples [0m
#1 To set a filter expression that matched syslog messages from 'syslogd':
[37m [40m: [0m [1m [36m [40mfilter-expr [0m [37m [40m [0m [37m [40m:log_procname [0m [37m [40m [0m [1m [37m [40m= [0m [37m [40m [0m [37 m [40m'syslogd' [0m [37m [40m [0m
[37m [40m: [0m [1m [36m [40mfilter-expr [0m [37m [40m [0m [37m [40m:log_procname [0m [37m [40m [0m [1m [37m [40m= [0m [37m [40m [0m [35 m [40m'syslogd' [0m [37m [40m [0m
#2 To set a filter expression that matches log messages where 'id' is followed by a
number and contains the string 'foo':
[37m [40m: [0m [1m [36m [40mfilter-expr [0m [37m [40m [0m [37m [40m:log_body [0m [37m [40m [0m [1m [36m [40mREGEXP [0m [37m [40m [0m [37 m [40m'id\d+' [0m [37m [40m [0m [1m [36m [40mAND [0m [37m [40m [0m [37m [40m:log_body [0m [37m [40m [0m [1m [36m [40mREGEXP [0m [37m [40m [0m [37 m [40m'foo' [0m
[37m [40m: [0m [1m [36m [40mfilter-expr [0m [37m [40m [0m [37m [40m:log_body [0m [37m [40m [0m [1m [36m [40mREGEXP [0m [37m [40m [0m [35 m [40m'id\d+' [0m [37m [40m [0m [1m [36m [40mAND [0m [37m [40m [0m [37m [40m:log_body [0m [37m [40m [0m [1m [36m [40mREGEXP [0m [37m [40m [0m [35 m [40m'foo' [0m
@ -1140,7 +1140,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1m:clear-mark-expr [0m, [1m:hide-unmarked-lines [0m, [1m:mark [0m, [1m:next-mark [0m, [1m:prev-mark [0m
[4mExample [0m
#1 To mark lines from 'dhclient' that mention 'eth0':
[37m [40m: [0m [1m [36m [40mmark-expr [0m [37m [40m [0m [37m [40m:log_procname [0m [37m [40m [0m [1m [37m [40m= [0m [37m [40m [0m [37 m [40m'dhclient' [0m [37m [40m [0m [1m [36m [40mAND [0m [37m [40m [0m [37m [40m:log_body [0m [37m [40m [0m [1m [36m [40mLIKE [0m [37m [40m [0m [37 m [40m'%eth0%' [0m
[37m [40m: [0m [1m [36m [40mmark-expr [0m [37m [40m [0m [37m [40m:log_procname [0m [37m [40m [0m [1m [37m [40m= [0m [37m [40m [0m [35 m [40m'dhclient' [0m [37m [40m [0m [1m [36m [40mAND [0m [37m [40m [0m [37m [40m:log_body [0m [37m [40m [0m [1m [36m [40mLIKE [0m [37m [40m [0m [35 m [40m'%eth0%' [0m
@ -1904,27 +1904,27 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mdirname() [0m, [1mjoinpath() [0m, [1mreadlink() [0m, [1mrealpath() [0m
[4mExamples [0m
#1 To get the base of a plain file name:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mbasename [0m [37m [40m( [0m [37 m [40m'foobar' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mbasename [0m [37m [40m( [0m [35 m [40m'foobar' [0m [37m [40m) [0m
#2 To get the base of a path:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mbasename [0m [37m [40m( [0m [37 m [40m'foo/bar' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mbasename [0m [37m [40m( [0m [35 m [40m'foo/bar' [0m [37m [40m) [0m
#3 To get the base of a directory:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mbasename [0m [37m [40m( [0m [37 m [40m'foo/bar/' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mbasename [0m [37m [40m( [0m [35 m [40m'foo/bar/' [0m [37m [40m) [0m
#4 To get the base of an empty string:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mbasename [0m [37m [40m( [0m [37 m [40m'' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mbasename [0m [37m [40m( [0m [35 m [40m'' [0m [37m [40m) [0m
#5 To get the base of a Windows path:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mbasename [0m [37m [40m( [0m [37 m [40m'foo\bar' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mbasename [0m [37m [40m( [0m [35 m [40m'foo\bar' [0m [37m [40m) [0m
#6 To get the base of the root directory:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mbasename [0m [37m [40m( [0m [37 m [40m'/' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mbasename [0m [37m [40m( [0m [35 m [40m'/' [0m [37m [40m) [0m
@ -1990,11 +1990,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExamples [0m
#1 To search for the string 'abc' within 'abcabc' and starting at position 2:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mcharindex [0m [37m [40m( [0m [37m [40m'abc' [0m [37m [40m, [0m [37 m [40m'abcabc' [0m [37m [40m, 2) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mcharindex [0m [37m [40m( [0m [35m [40m'abc' [0m [37m [40m, [0m [35 m [40m'abcabc' [0m [37m [40m, 2) [0m
#2 To search for the string 'abc' within 'abcdef' and starting at position 2:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mcharindex [0m [37m [40m( [0m [37m [40m'abc' [0m [37m [40m, [0m [37 m [40m'abcdef' [0m [37m [40m, 2) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mcharindex [0m [37m [40m( [0m [35m [40m'abc' [0m [37m [40m, [0m [35 m [40m'abcdef' [0m [37m [40m, 2) [0m
@ -2047,15 +2047,15 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mdatetime() [0m, [1mjulianday() [0m, [1mstrftime() [0m, [1mtime() [0m, [1mtimediff() [0m, [1mtimeslice() [0m
[4mExamples [0m
#1 To get the date portion of the timestamp '2017-01-02T03:04:05':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdate [0m [37m [40m( [0m [37 m [40m'2017-01-02T03:04:05' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdate [0m [37m [40m( [0m [35 m [40m'2017-01-02T03:04:05' [0m [37m [40m) [0m
#2 To get the date portion of the timestamp '2017-01-02T03:04:05' plus one day:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdate [0m [37m [40m( [0m [37m [40m'2017-01-02T03:04:05' [0m [37m [40m, [0m [37 m [40m'+1 day' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdate [0m [37m [40m( [0m [35m [40m'2017-01-02T03:04:05' [0m [37m [40m, [0m [35 m [40m'+1 day' [0m [37m [40m) [0m
#3 To get the date portion of the epoch timestamp 1491341842:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdate [0m [37m [40m(1491341842, [0m [37 m [40m'unixepoch' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdate [0m [37m [40m(1491341842, [0m [35 m [40m'unixepoch' [0m [37m [40m) [0m
@ -2070,16 +2070,16 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mdate() [0m, [1mjulianday() [0m, [1mstrftime() [0m, [1mtime() [0m, [1mtimediff() [0m, [1mtimeslice() [0m
[4mExamples [0m
#1 To get the date and time portion of the timestamp '2017-01-02T03:04:05':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdatetime [0m [37m [40m( [0m [37 m [40m'2017-01-02T03:04:05' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdatetime [0m [37m [40m( [0m [35 m [40m'2017-01-02T03:04:05' [0m [37m [40m) [0m
#2 To get the date and time portion of the timestamp '2017-01-02T03:04:05' plus one
minute:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdatetime [0m [37m [40m( [0m [37m [40m'2017-01-02T03:04:05' [0m [37m [40m, [0m [37 m [40m'+1 minute' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdatetime [0m [37m [40m( [0m [35m [40m'2017-01-02T03:04:05' [0m [37m [40m, [0m [35 m [40m'+1 minute' [0m [37m [40m) [0m
#3 To get the date and time portion of the epoch timestamp 1491341842:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdatetime [0m [37m [40m(1491341842, [0m [37 m [40m'unixepoch' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdatetime [0m [37m [40m(1491341842, [0m [35 m [40m'unixepoch' [0m [37m [40m) [0m
@ -2115,23 +2115,23 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mbasename() [0m, [1mjoinpath() [0m, [1mreadlink() [0m, [1mrealpath() [0m
[4mExamples [0m
#1 To get the directory of a relative file path:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdirname [0m [37m [40m( [0m [37 m [40m'foo/bar' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdirname [0m [37m [40m( [0m [35 m [40m'foo/bar' [0m [37m [40m) [0m
#2 To get the directory of an absolute file path:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdirname [0m [37m [40m( [0m [37 m [40m'/foo/bar' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdirname [0m [37m [40m( [0m [35 m [40m'/foo/bar' [0m [37m [40m) [0m
#3 To get the directory of a file in the root directory:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdirname [0m [37m [40m( [0m [37 m [40m'/bar' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdirname [0m [37m [40m( [0m [35 m [40m'/bar' [0m [37m [40m) [0m
#4 To get the directory of a Windows path:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdirname [0m [37m [40m( [0m [37 m [40m'foo\bar' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdirname [0m [37m [40m( [0m [35 m [40m'foo\bar' [0m [37m [40m) [0m
#5 To get the directory of an empty path:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdirname [0m [37m [40m( [0m [37 m [40m'' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mdirname [0m [37m [40m( [0m [35 m [40m'' [0m [37m [40m) [0m
@ -2151,11 +2151,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExamples [0m
#1 To test if the string 'notbad.jpg' ends with '.jpg':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mendswith [0m [37m [40m( [0m [37m [40m'notbad.jpg' [0m [37m [40m, [0m [37 m [40m'.jpg' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mendswith [0m [37m [40m( [0m [35m [40m'notbad.jpg' [0m [37m [40m, [0m [35 m [40m'.jpg' [0m [37m [40m) [0m
#2 To test if the string 'notbad.png' starts with '.jpg':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mendswith [0m [37m [40m( [0m [37m [40m'notbad.png' [0m [37m [40m, [0m [37 m [40m'.jpg' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mendswith [0m [37m [40m( [0m [35m [40m'notbad.png' [0m [37m [40m, [0m [35 m [40m'.jpg' [0m [37m [40m) [0m
@ -2190,11 +2190,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExamples [0m
#1 To extract key/value pairs from a string:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mextract [0m [37m [40m( [0m [37 m [40m'foo=1 bar=2 name="Rolo Tomassi"' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mextract [0m [37m [40m( [0m [35 m [40m'foo=1 bar=2 name="Rolo Tomassi"' [0m [37m [40m) [0m
#2 To extract columnar data from a string:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mextract [0m [37m [40m( [0m [37 m [40m'1.0 abc 2.0' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mextract [0m [37m [40m( [0m [35 m [40m'1.0 abc 2.0' [0m [37m [40m) [0m
@ -2257,7 +2257,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mgethostbyname() [0m
[4mExample [0m
#1 To get the hostname for the IP '127.0.0.1':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mgethostbyaddr [0m [37m [40m( [0m [37m [40m' [0m [37m [40m127.0.0.1 [0m [37 m [40m' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mgethostbyaddr [0m [37m [40m( [0m [35m [40m' [0m [35m [40m127.0.0.1 [0m [35 m [40m' [0m [37m [40m) [0m
@ -2270,7 +2270,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mgethostbyaddr() [0m
[4mExample [0m
#1 To get the IP address for 'localhost':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mgethostbyname [0m [37m [40m( [0m [37 m [40m'localhost' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mgethostbyname [0m [37m [40m( [0m [35 m [40m'localhost' [0m [37m [40m) [0m
@ -2283,7 +2283,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[4mExample [0m
#1 To test if the string 'abc' matches the glob 'a*':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [36m [40mglob [0m [37m [40m( [0m [37m [40m'a*' [0m [37m [40m, [0m [37 m [40m'abc' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [36m [40mglob [0m [37m [40m( [0m [35m [40m'a*' [0m [37m [40m, [0m [35 m [40m'abc' [0m [37m [40m) [0m
@ -2309,7 +2309,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
#2 To join the values of the column 'ex_procname' using the string ', ':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mgroup_concat [0m [37m [40m( [0m [37m [40mex_procname [0m [37m [40m, [0m [37 m [40m', ' [0m [37m [40m) [0m [1m [36m [40mFROM [0m [37m [40m [0m [37m [40mlnav_example_log [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mgroup_concat [0m [37m [40m( [0m [37m [40mex_procname [0m [37m [40m, [0m [35 m [40m', ' [0m [37m [40m) [0m [1m [36m [40mFROM [0m [37m [40m [0m [37m [40mlnav_example_log [0m
#3 To concatenate the distinct values of the column 'ex_procname' from the table
@ -2333,7 +2333,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExample [0m
#1 To produce a hash of all of the values of 'column1':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mgroup_spooky_hash [0m [37m [40m( [0m [37m [40mcolumn1 [0m [37m [40m) [0m [1m [36m [40mFROM [0m [37m [40m ( [0m [1m [36m [40mVALUES [0m [37m [40m ( [0m [37m [40m'abc' [0m [37m [40m), ( [0m [37 m [40m'123' [0m [37m [40m)) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mgroup_spooky_hash [0m [37m [40m( [0m [37m [40mcolumn1 [0m [37m [40m) [0m [1m [36m [40mFROM [0m [37m [40m ( [0m [1m [36m [40mVALUES [0m [37m [40m ( [0m [35m [40m'abc' [0m [37m [40m), ( [0m [35 m [40m'123' [0m [37m [40m)) [0m
@ -2375,7 +2375,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[4mExample [0m
#1 To get the hexadecimal rendering of the string 'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mhex [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mhex [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m) [0m
@ -2430,7 +2430,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mstrfilter() [0m, [1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExample [0m
#1 To test get the position of 'b' in the string 'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40minstr [0m [37m [40m( [0m [37m [40m'abc' [0m [37m [40m, [0m [37 m [40m'b' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40minstr [0m [37m [40m( [0m [35m [40m'abc' [0m [37m [40m, [0m [35 m [40m'b' [0m [37m [40m) [0m
@ -2446,15 +2446,15 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mjson_group_object() [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 [37m [40m'1' [0m [37m [40m, [0m [37 m [40m'' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjget [0m [37m [40m( [0m [35m [40m'1' [0m [37m [40m, [0m [35 m [40m'' [0m [37m [40m) [0m
#2 To get the property named 'b' in a JSON object:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjget [0m [37m [40m( [0m [37m [40m'{ "a": 1, "b": 2 }' [0m [37m [40m, [0m [37 m [40m'/b' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjget [0m [37m [40m( [0m [35m [40m'{ "a": 1, "b": 2 }' [0m [37m [40m, [0m [35 m [40m'/b' [0m [37m [40m) [0m
#3 To get the 'msg' property and return a default if it does not exist:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjget [0m [37m [40m( [0m [1m [36m [40mnull [0m [37m [40m, [0m [37m [40m'/msg' [0m [37m [40m, [0m [37 m [40m'Hello' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjget [0m [37m [40m( [0m [1m [36m [40mnull [0m [37m [40m, [0m [35m [40m'/msg' [0m [37m [40m, [0m [35 m [40m'Hello' [0m [37m [40m) [0m
@ -2470,19 +2470,19 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mbasename() [0m, [1mdirname() [0m, [1mreadlink() [0m, [1mrealpath() [0m
[4mExamples [0m
#1 To join a directory and file name into a relative path:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjoinpath [0m [37m [40m( [0m [37m [40m'foo' [0m [37m [40m, [0m [37 m [40m'bar' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjoinpath [0m [37m [40m( [0m [35m [40m'foo' [0m [37m [40m, [0m [35 m [40m'bar' [0m [37m [40m) [0m
#2 To join an empty component with other names into a relative path:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjoinpath [0m [37m [40m( [0m [37m [40m'' [0m [37m [40m, [0m [37m [40m'foo' [0m [37m [40m, [0m [37 m [40m'bar' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjoinpath [0m [37m [40m( [0m [35m [40m'' [0m [37m [40m, [0m [35m [40m'foo' [0m [37m [40m, [0m [35 m [40m'bar' [0m [37m [40m) [0m
#3 To create an absolute path with two path components:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjoinpath [0m [37m [40m( [0m [37m [40m'/' [0m [37m [40m, [0m [37m [40m'foo' [0m [37m [40m, [0m [37 m [40m'bar' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjoinpath [0m [37m [40m( [0m [35m [40m'/' [0m [37m [40m, [0m [35m [40m'foo' [0m [37m [40m, [0m [35 m [40m'bar' [0m [37m [40m) [0m
#4 To create an absolute path from a path component that starts with a forward slash:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjoinpath [0m [37m [40m( [0m [37m [40m'/' [0m [37m [40m, [0m [37m [40m'foo' [0m [37m [40m, [0m [37 m [40m'/bar' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjoinpath [0m [37m [40m( [0m [35m [40m'/' [0m [37m [40m, [0m [35m [40m'foo' [0m [37m [40m, [0m [35 m [40m'/bar' [0m [37m [40m) [0m
@ -2505,11 +2505,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
#2 To append 4 and 5 to the array [1, 2, 3]:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjson_concat [0m [37m [40m( [0m [37 m [40m'[1, 2, 3]' [0m [37m [40m, 4, 5) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjson_concat [0m [37m [40m( [0m [35 m [40m'[1, 2, 3]' [0m [37m [40m, 4, 5) [0m
#3 To concatenate two arrays together:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjson_concat [0m [37m [40m( [0m [37m [40m'[1, 2, 3]' [0m [37m [40m, [0m [1m [37m [40mjson [0m [37m [40m( [0m [37 m [40m'[4, 5]' [0m [37m [40m)) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjson_concat [0m [37m [40m( [0m [35m [40m'[1, 2, 3]' [0m [37m [40m, [0m [1m [37m [40mjson [0m [37m [40m( [0m [35 m [40m'[4, 5]' [0m [37m [40m)) [0m
@ -2523,11 +2523,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mjget() [0m, [1mjson_concat() [0m, [1mjson_group_array() [0m, [1mjson_group_object() [0m
[4mExamples [0m
#1 To test if a JSON array contains the number 4:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjson_contains [0m [37m [40m( [0m [37 m [40m'[1, 2, 3]' [0m [37m [40m, 4) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjson_contains [0m [37m [40m( [0m [35 m [40m'[1, 2, 3]' [0m [37m [40m, 4) [0m
#2 To test if a JSON array contains the string 'def':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjson_contains [0m [37m [40m( [0m [37m [40m'["abc", "def"]' [0m [37m [40m, [0m [37 m [40m'def' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjson_contains [0m [37m [40m( [0m [35m [40m'["abc", "def"]' [0m [37m [40m, [0m [35 m [40m'def' [0m [37m [40m) [0m
@ -2540,7 +2540,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mjget() [0m, [1mjson_concat() [0m, [1mjson_contains() [0m, [1mjson_group_object() [0m
[4mExamples [0m
#1 To create an array from arguments:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjson_group_array [0m [37m [40m( [0m [37 m [40m'one' [0m [37m [40m, 2, 3 [0m [1m [36m [40m.4 [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjson_group_array [0m [37m [40m( [0m [35 m [40m'one' [0m [37m [40m, 2, 3 [0m [1m [36m [40m.4 [0m [37m [40m) [0m
#2 To create an array from a column of values:
@ -2558,11 +2558,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mjget() [0m, [1mjson_concat() [0m, [1mjson_contains() [0m, [1mjson_group_array() [0m
[4mExamples [0m
#1 To create an object from arguments:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjson_group_object [0m [37m [40m( [0m [37m [40m'a' [0m [37m [40m, 1, [0m [37 m [40m'b' [0m [37m [40m, 2) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjson_group_object [0m [37m [40m( [0m [35m [40m'a' [0m [37m [40m, 1, [0m [35 m [40m'b' [0m [37m [40m, 2) [0m
#2 To create an object from a pair of columns:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjson_group_object [0m [37m [40m( [0m [37m [40mcolumn1 [0m [37m [40m, [0m [37m [40mcolumn2 [0m [37m [40m) [0m [1m [36m [40mFROM [0m [37m [40m ( [0m [1m [36m [40mVALUES [0m [37m [40m ( [0m [37m [40m'a' [0m [37m [40m, 1), ( [0m [37 m [40m'b' [0m [37m [40m, 2)) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjson_group_object [0m [37m [40m( [0m [37m [40mcolumn1 [0m [37m [40m, [0m [37m [40mcolumn2 [0m [37m [40m) [0m [1m [36m [40mFROM [0m [37m [40m ( [0m [1m [36m [40mVALUES [0m [37m [40m ( [0m [35m [40m'a' [0m [37m [40m, 1), ( [0m [35 m [40m'b' [0m [37m [40m, 2)) [0m
@ -2578,15 +2578,15 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mdate() [0m, [1mdatetime() [0m, [1mstrftime() [0m, [1mtime() [0m, [1mtimediff() [0m, [1mtimeslice() [0m
[4mExamples [0m
#1 To get the julian day from the timestamp '2017-01-02T03:04:05':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjulianday [0m [37m [40m( [0m [37 m [40m'2017-01-02T03:04:05' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjulianday [0m [37m [40m( [0m [35 m [40m'2017-01-02T03:04:05' [0m [37m [40m) [0m
#2 To get the julian day from the timestamp '2017-01-02T03:04:05' plus one minute:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjulianday [0m [37m [40m( [0m [37m [40m'2017-01-02T03:04:05' [0m [37m [40m, [0m [37 m [40m'+1 minute' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjulianday [0m [37m [40m( [0m [35m [40m'2017-01-02T03:04:05' [0m [37m [40m, [0m [35 m [40m'+1 minute' [0m [37m [40m) [0m
#3 To get the julian day from the timestamp 1491341842:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjulianday [0m [37m [40m(1491341842, [0m [37 m [40m'unixepoch' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mjulianday [0m [37m [40m(1491341842, [0m [35 m [40m'unixepoch' [0m [37m [40m) [0m
@ -2649,11 +2649,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mstrfilter() [0m, [1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExamples [0m
#1 To get the first character of the string 'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mleftstr [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m, 1) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mleftstr [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m, 1) [0m
#2 To get the first ten characters of a string, regardless of size:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mleftstr [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m, 10) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mleftstr [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m, 10) [0m
@ -2673,7 +2673,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mstrfilter() [0m, [1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExample [0m
#1 To get the length of the string 'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mlength [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mlength [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m) [0m
@ -2690,11 +2690,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[4mExamples [0m
#1 To test if the string 'aabcc' contains the letter 'b':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [36m [40mlike [0m [37m [40m( [0m [37m [40m'%b%' [0m [37m [40m, [0m [37 m [40m'aabcc' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [36m [40mlike [0m [37m [40m( [0m [35m [40m'%b%' [0m [37m [40m, [0m [35 m [40m'aabcc' [0m [37m [40m) [0m
#2 To test if the string 'aab%' ends with 'b%':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [36m [40mlike [0m [37m [40m( [0m [37m [40m'%b:%' [0m [37m [40m, [0m [37m [40m'aab%' [0m [37m [40m, [0m [37 m [40m':' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [36m [40mlike [0m [37m [40m( [0m [35m [40m'%b:%' [0m [37m [40m, [0m [35m [40m'aab%' [0m [37m [40m, [0m [35 m [40m':' [0m [37m [40m) [0m
@ -2792,7 +2792,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mstrfilter() [0m, [1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExample [0m
#1 To extract key/value pairs from a log message:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mlogfmt2json [0m [37m [40m( [0m [37 m [40m'foo=1 bar=2 name="Rolo Tomassi"' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mlogfmt2json [0m [37m [40m( [0m [35 m [40m'foo=1 bar=2 name="Rolo Tomassi"' [0m [37m [40m) [0m
@ -2812,7 +2812,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mstrfilter() [0m, [1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExample [0m
#1 To lowercase the string 'AbC':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mlower [0m [37m [40m( [0m [37 m [40m'AbC' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mlower [0m [37m [40m( [0m [35 m [40m'AbC' [0m [37m [40m) [0m
@ -2833,11 +2833,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mstrfilter() [0m, [1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExamples [0m
#1 To trim the leading whitespace from the string ' abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mltrim [0m [37m [40m( [0m [37 m [40m' abc' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mltrim [0m [37m [40m( [0m [35 m [40m' abc' [0m [37m [40m) [0m
#2 To trim the characters 'a' or 'b' from the left side of the string 'aaaabbbc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mltrim [0m [37m [40m( [0m [37m [40m'aaaabbbc' [0m [37m [40m, [0m [37 m [40m'ab' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mltrim [0m [37m [40m( [0m [35m [40m'aaaabbbc' [0m [37m [40m, [0m [35 m [40m'ab' [0m [37m [40m) [0m
@ -2940,11 +2940,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mstrfilter() [0m, [1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExamples [0m
#1 To pad the string 'abc' to a length of six characters:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mpadc [0m [37m [40m( [0m [37m [40m'abc' [0m [37m [40m, 6) [0m [1m [37m [40m|| [0m [37m [40m [0m [37 m [40m'def' [0m [37m [40m [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mpadc [0m [37m [40m( [0m [35m [40m'abc' [0m [37m [40m, 6) [0m [1m [37m [40m|| [0m [37m [40m [0m [35 m [40m'def' [0m [37m [40m [0m
#2 To pad the string 'abcdef' to a length of eight characters:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mpadc [0m [37m [40m( [0m [37m [40m'abcdef' [0m [37m [40m, 8) [0m [1m [37m [40m|| [0m [37m [40m [0m [37 m [40m'ghi' [0m [37m [40m [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mpadc [0m [37m [40m( [0m [35m [40m'abcdef' [0m [37m [40m, 8) [0m [1m [37m [40m|| [0m [37m [40m [0m [35 m [40m'ghi' [0m [37m [40m [0m
@ -2965,11 +2965,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mstrfilter() [0m, [1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExamples [0m
#1 To pad the string 'abc' to a length of six characters:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mpadl [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m, 6) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mpadl [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m, 6) [0m
#2 To pad the string 'abcdef' to a length of four characters:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mpadl [0m [37m [40m( [0m [37 m [40m'abcdef' [0m [37m [40m, 4) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mpadl [0m [37m [40m( [0m [35 m [40m'abcdef' [0m [37m [40m, 4) [0m
@ -2990,11 +2990,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mstrfilter() [0m, [1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExamples [0m
#1 To pad the string 'abc' to a length of six characters:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mpadr [0m [37m [40m( [0m [37m [40m'abc' [0m [37m [40m, 6) [0m [1m [37m [40m|| [0m [37m [40m [0m [37 m [40m'def' [0m [37m [40m [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mpadr [0m [37m [40m( [0m [35m [40m'abc' [0m [37m [40m, 6) [0m [1m [37m [40m|| [0m [37m [40m [0m [35 m [40m'def' [0m [37m [40m [0m
#2 To pad the string 'abcdef' to a length of four characters:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mpadr [0m [37m [40m( [0m [37m [40m'abcdef' [0m [37m [40m, 4) [0m [1m [37m [40m|| [0m [37m [40m [0m [37 m [40m'ghi' [0m [37m [40m [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mpadr [0m [37m [40m( [0m [35m [40m'abcdef' [0m [37m [40m, 4) [0m [1m [37m [40m|| [0m [37m [40m [0m [35 m [40m'ghi' [0m [37m [40m [0m
@ -3055,15 +3055,15 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mstrfilter() [0m, [1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExamples [0m
#1 To substitute 'World' into the string 'Hello, %s!':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mprintf [0m [37m [40m( [0m [37m [40m'Hello, %s!' [0m [37m [40m, [0m [37 m [40m'World' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mprintf [0m [37m [40m( [0m [35m [40m'Hello, %s!' [0m [37m [40m, [0m [35 m [40m'World' [0m [37m [40m) [0m
#2 To right-align 'small' in the string 'align:' with a column width of 10:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mprintf [0m [37m [40m( [0m [37m [40m'align: % 10s' [0m [37m [40m, [0m [37 m [40m'small' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mprintf [0m [37m [40m( [0m [35m [40m'align: % 10s' [0m [37m [40m, [0m [35 m [40m'small' [0m [37m [40m) [0m
#3 To format 11 with a width of five characters and leading zeroes:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mprintf [0m [37m [40m( [0m [37 m [40m'value: %05d' [0m [37m [40m, 11) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mprintf [0m [37m [40m( [0m [35 m [40m'value: %05d' [0m [37m [40m, 11) [0m
@ -3082,7 +3082,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mstrfilter() [0m, [1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExample [0m
#1 To capitalize the words in the string 'hello, world!':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mproper [0m [37m [40m( [0m [37 m [40m'hello, world!' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mproper [0m [37m [40m( [0m [35 m [40m'hello, world!' [0m [37m [40m) [0m
@ -3095,11 +3095,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[4mExamples [0m
#1 To quote the string 'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mquote [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mquote [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m) [0m
#2 To quote the string 'abc'123':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mquote [0m [37m [40m( [0m [37 m [40m'abc''123' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mquote [0m [37m [40m( [0m [35 m [40m'abc''123' [0m [37m [40m) [0m
@ -3204,7 +3204,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExample [0m
#1 To extract the key/value pairs 'a'/1 and 'b'/2 from the string 'a=1; b=2':
[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 [40mregexp_capture [0m [37m [40m( [0m [37m [40m'a=1; b=2' [0m [37m [40m, [0m [37 m [40m'(\w+)=(\d+)' [0m [37m [40m) [0m
[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 [40mregexp_capture [0m [37m [40m( [0m [35m [40m'a=1; b=2' [0m [37m [40m, [0m [35 m [40m'(\w+)=(\d+)' [0m [37m [40m) [0m
@ -3232,7 +3232,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1msubstr() [0m, [1mtrim() [0m, [1municode() [0m, [1mupper() [0m, [1mxpath() [0m
[4mExample [0m
#1 To extract the key/value pairs 'a'/1 and 'b'/2 from the string 'a=1; b=2':
[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 [40mregexp_capture_into_json [0m [37m [40m( [0m [37m [40m'a=1; b=2' [0m [37m [40m, [0m [37 m [40m'(\w+)=(\d+)' [0m [37m [40m) [0m
[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 [40mregexp_capture_into_json [0m [37m [40m( [0m [35m [40m'a=1; b=2' [0m [37m [40m, [0m [35 m [40m'(\w+)=(\d+)' [0m [37m [40m) [0m
@ -3254,17 +3254,17 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mupper() [0m, [1mxpath() [0m
[4mExamples [0m
#1 To capture the digits from the string '123':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mregexp_match [0m [37m [40m( [0m [37m [40m'(\d+)' [0m [37m [40m, [0m [37 m [40m'123' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mregexp_match [0m [37m [40m( [0m [35m [40m'(\d+)' [0m [37m [40m, [0m [35 m [40m'123' [0m [37m [40m) [0m
#2 To capture a number and word into a JSON object with the properties 'col_0' and
'col_1':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mregexp_match [0m [37m [40m( [0m [37m [40m'(\d+) (\w+)' [0m [37m [40m, [0m [37 m [40m'123 four' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mregexp_match [0m [37m [40m( [0m [35m [40m'(\d+) (\w+)' [0m [37m [40m, [0m [35 m [40m'123 four' [0m [37m [40m) [0m
#3 To capture a number and word into a JSON object with the named properties 'num' and
'str':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mregexp_match [0m [37m [40m( [0m [37m [40m'(?< [0m [37m [40mnum [0m [37m [40m>\d+) (?< [0m [37m [40mstr [0m [37m [40m>\w+)' [0m [37m [40m, [0m [37 m [40m'123 four' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mregexp_match [0m [37m [40m( [0m [35m [40m'(?< [0m [35m [40mnum [0m [35m [40m>\d+) (?< [0m [35m [40mstr [0m [35m [40m>\w+)' [0m [37m [40m, [0m [35 m [40m'123 four' [0m [37m [40m) [0m
@ -3288,11 +3288,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mupper() [0m, [1mxpath() [0m
[4mExamples [0m
#1 To replace the word at the start of the string 'Hello, World!' with 'Goodbye':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mregexp_replace [0m [37m [40m( [0m [37m [40m'Hello, World!' [0m [37m [40m, [0m [37m [40m'^(\w+)' [0m [37m [40m, [0m [37 m [40m'Goodbye' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mregexp_replace [0m [37m [40m( [0m [35m [40m'Hello, World!' [0m [37m [40m, [0m [35m [40m'^(\w+)' [0m [37m [40m, [0m [35 m [40m'Goodbye' [0m [37m [40m) [0m
#2 To wrap alphanumeric words with angle brackets:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mregexp_replace [0m [37m [40m( [0m [37m [40m'123 abc' [0m [37m [40m, [0m [37m [40m'(\w+)' [0m [37m [40m, [0m [37m [40m'< [0m [37m [40m\1 [0m [37 m [40m>' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mregexp_replace [0m [37m [40m( [0m [35m [40m'123 abc' [0m [37m [40m, [0m [35m [40m'(\w+)' [0m [37m [40m, [0m [35m [40m'< [0m [35m [40m\1 [0m [35 m [40m>' [0m [37m [40m) [0m
@ -3316,11 +3316,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mupper() [0m, [1mxpath() [0m
[4mExamples [0m
#1 To replace the string 'x' with 'z' in 'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [36m [40mreplace [0m [37m [40m( [0m [37m [40m'abc' [0m [37m [40m, [0m [37m [40m'x' [0m [37m [40m, [0m [37 m [40m'z' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [36m [40mreplace [0m [37m [40m( [0m [35m [40m'abc' [0m [37m [40m, [0m [35m [40m'x' [0m [37m [40m, [0m [35 m [40m'z' [0m [37m [40m) [0m
#2 To replace the string 'a' with 'z' in 'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [36m [40mreplace [0m [37m [40m( [0m [37m [40m'abc' [0m [37m [40m, [0m [37m [40m'a' [0m [37m [40m, [0m [37 m [40m'z' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [36m [40mreplace [0m [37m [40m( [0m [35m [40m'abc' [0m [37m [40m, [0m [35m [40m'a' [0m [37m [40m, [0m [35 m [40m'z' [0m [37m [40m) [0m
@ -3341,7 +3341,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mxpath() [0m
[4mExample [0m
#1 To repeat the string 'abc' three times:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mreplicate [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m, 3) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mreplicate [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m, 3) [0m
@ -3361,7 +3361,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mupper() [0m, [1mxpath() [0m
[4mExample [0m
#1 To reverse the string 'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mreverse [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mreverse [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m) [0m
@ -3383,11 +3383,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mxpath() [0m
[4mExamples [0m
#1 To get the last character of the string 'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mrightstr [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m, 1) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mrightstr [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m, 1) [0m
#2 To get the last ten characters of a string, regardless of size:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mrightstr [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m, 10) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mrightstr [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m, 10) [0m
@ -3450,11 +3450,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mupper() [0m, [1mxpath() [0m
[4mExamples [0m
#1 To trim the whitespace from the end of the string 'abc ':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mrtrim [0m [37m [40m( [0m [37 m [40m'abc ' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mrtrim [0m [37m [40m( [0m [35 m [40m'abc ' [0m [37m [40m) [0m
#2 To trim the characters 'b' and 'c' from the string 'abbbbcccc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mrtrim [0m [37m [40m( [0m [37m [40m'abbbbcccc' [0m [37m [40m, [0m [37 m [40m'bc' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mrtrim [0m [37m [40m( [0m [35m [40m'abbbbcccc' [0m [37m [40m, [0m [35 m [40m'bc' [0m [37m [40m) [0m
@ -3508,7 +3508,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
#2 To chart the values in a JSON array:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40msparkline [0m [37m [40m( [0m [37m [40mvalue [0m [37m [40m) [0m [1m [36m [40mFROM [0m [37m [40m [0m [1m [37m [40mjson_each [0m [37m [40m( [0m [37 m [40m'[0, 1, 2, 3, 4, 5, 6, 7, 8]' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40msparkline [0m [37m [40m( [0m [37m [40mvalue [0m [37m [40m) [0m [1m [36m [40mFROM [0m [37m [40m [0m [1m [37m [40mjson_each [0m [37m [40m( [0m [35 m [40m'[0, 1, 2, 3, 4, 5, 6, 7, 8]' [0m [37m [40m) [0m
@ -3528,19 +3528,19 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mxpath() [0m
[4mExamples [0m
#1 To produce a hash for the string 'Hello, World!':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mspooky_hash [0m [37m [40m( [0m [37 m [40m'Hello, World!' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mspooky_hash [0m [37m [40m( [0m [35 m [40m'Hello, World!' [0m [37m [40m) [0m
#2 To produce a hash for the parameters where one is NULL:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mspooky_hash [0m [37m [40m( [0m [37 m [40m'Hello, World!' [0m [37m [40m, [0m [1m [36m [40mNULL [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mspooky_hash [0m [37m [40m( [0m [35 m [40m'Hello, World!' [0m [37m [40m, [0m [1m [36m [40mNULL [0m [37m [40m) [0m
#3 To produce a hash for the parameters where one is an empty string:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mspooky_hash [0m [37m [40m( [0m [37m [40m'Hello, World!' [0m [37m [40m, [0m [37 m [40m'' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mspooky_hash [0m [37m [40m( [0m [35m [40m'Hello, World!' [0m [37m [40m, [0m [35 m [40m'' [0m [37m [40m) [0m
#4 To produce a hash for the parameters where one is a number:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mspooky_hash [0m [37m [40m( [0m [37 m [40m'Hello, World!' [0m [37m [40m, 123) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mspooky_hash [0m [37m [40m( [0m [35 m [40m'Hello, World!' [0m [37m [40m, 123) [0m
@ -3561,7 +3561,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[4mExample [0m
#1 To check if the SQLite library was compiled with ENABLE_FTS3:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40msqlite_compileoption_used [0m [37m [40m( [0m [37 m [40m'ENABLE_FTS3' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40msqlite_compileoption_used [0m [37m [40m( [0m [35 m [40m'ENABLE_FTS3' [0m [37m [40m) [0m
@ -3609,11 +3609,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mxpath() [0m
[4mExamples [0m
#1 To test if the string 'foobar' starts with 'foo':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mstartswith [0m [37m [40m( [0m [37m [40m'foobar' [0m [37m [40m, [0m [37 m [40m'foo' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mstartswith [0m [37m [40m( [0m [35m [40m'foobar' [0m [37m [40m, [0m [35 m [40m'foo' [0m [37m [40m) [0m
#2 To test if the string 'foobar' starts with 'bar':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mstartswith [0m [37m [40m( [0m [37m [40m'foobar' [0m [37m [40m, [0m [37 m [40m'bar' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mstartswith [0m [37m [40m( [0m [35m [40m'foobar' [0m [37m [40m, [0m [35 m [40m'bar' [0m [37m [40m) [0m
@ -3635,7 +3635,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mxpath() [0m
[4mExample [0m
#1 To get the 'b', 'c', and 'd' characters from the string 'abcabc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mstrfilter [0m [37m [40m( [0m [37m [40m'abcabc' [0m [37m [40m, [0m [37 m [40m'bcd' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mstrfilter [0m [37m [40m( [0m [35m [40m'abcabc' [0m [37m [40m, [0m [35 m [40m'bcd' [0m [37m [40m) [0m
@ -3653,16 +3653,16 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mdate() [0m, [1mdatetime() [0m, [1mjulianday() [0m, [1mtime() [0m, [1mtimediff() [0m, [1mtimeslice() [0m
[4mExamples [0m
#1 To get the year from the timestamp '2017-01-02T03:04:05':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mstrftime [0m [37m [40m( [0m [37m [40m'%Y' [0m [37m [40m, [0m [37 m [40m'2017-01-02T03:04:05' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mstrftime [0m [37m [40m( [0m [35m [40m'%Y' [0m [37m [40m, [0m [35 m [40m'2017-01-02T03:04:05' [0m [37m [40m) [0m
#2 To create a string with the time from the timestamp '2017-01-02T03:04:05' plus one
minute:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mstrftime [0m [37m [40m( [0m [37m [40m'The time is: %H:%M:%S' [0m [37m [40m, [0m [37m [40m'2017-01-02T03:04:05' [0m [37m [40m, [0m [37 m [40m'+1 minute' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mstrftime [0m [37m [40m( [0m [35m [40m'The time is: %H:%M:%S' [0m [37m [40m, [0m [35m [40m'2017-01-02T03:04:05' [0m [37m [40m, [0m [35 m [40m'+1 minute' [0m [37m [40m) [0m
#3 To create a string with the Julian day from the epoch timestamp 1491341842:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mstrftime [0m [37m [40m( [0m [37m [40m'Julian day: %J' [0m [37m [40m, 1491341842, [0m [37 m [40m'unixepoch' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mstrftime [0m [37m [40m( [0m [35m [40m'Julian day: %J' [0m [37m [40m, 1491341842, [0m [35 m [40m'unixepoch' [0m [37m [40m) [0m
@ -3692,22 +3692,22 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[4mExamples [0m
#1 To get the substring starting at the second character until the end of the string
'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40msubstr [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m, 2) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40msubstr [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m, 2) [0m
#2 To get the substring of size one starting at the second character of the string
'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40msubstr [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m, 2, 1) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40msubstr [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m, 2, 1) [0m
#3 To get the substring starting at the last character until the end of the string
'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40msubstr [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m, [0m [1m [37m [40m- [0m [37m [40m1) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40msubstr [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m, [0m [1m [37m [40m- [0m [37m [40m1) [0m
#4 To get the substring starting at the last character and going backwards one step of
the string 'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40msubstr [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m, [0m [1m [37m [40m- [0m [37m [40m1, [0m [1m [37m [40m- [0m [37m [40m1) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40msubstr [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m, [0m [1m [37m [40m- [0m [37m [40m1, [0m [1m [37m [40m- [0m [37m [40m1) [0m
@ -3739,15 +3739,15 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mdate() [0m, [1mdatetime() [0m, [1mjulianday() [0m, [1mstrftime() [0m, [1mtimediff() [0m, [1mtimeslice() [0m
[4mExamples [0m
#1 To get the time portion of the timestamp '2017-01-02T03:04:05':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtime [0m [37m [40m( [0m [37 m [40m'2017-01-02T03:04:05' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtime [0m [37m [40m( [0m [35 m [40m'2017-01-02T03:04:05' [0m [37m [40m) [0m
#2 To get the time portion of the timestamp '2017-01-02T03:04:05' plus one minute:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtime [0m [37m [40m( [0m [37m [40m'2017-01-02T03:04:05' [0m [37m [40m, [0m [37 m [40m'+1 minute' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtime [0m [37m [40m( [0m [35m [40m'2017-01-02T03:04:05' [0m [37m [40m, [0m [35 m [40m'+1 minute' [0m [37m [40m) [0m
#3 To get the time portion of the epoch timestamp 1491341842:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtime [0m [37m [40m(1491341842, [0m [37 m [40m'unixepoch' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtime [0m [37m [40m(1491341842, [0m [35 m [40m'unixepoch' [0m [37m [40m) [0m
@ -3761,11 +3761,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mdate() [0m, [1mdatetime() [0m, [1mjulianday() [0m, [1mstrftime() [0m, [1mtime() [0m, [1mtimeslice() [0m
[4mExamples [0m
#1 To get the difference between two timestamps:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtimediff [0m [37m [40m( [0m [37m [40m'2017-02-03T04:05:06' [0m [37m [40m, [0m [37 m [40m'2017-02-03T04:05:00' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtimediff [0m [37m [40m( [0m [35m [40m'2017-02-03T04:05:06' [0m [37m [40m, [0m [35 m [40m'2017-02-03T04:05:00' [0m [37m [40m) [0m
#2 To get the difference between relative timestamps:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtimediff [0m [37m [40m( [0m [37m [40m'today' [0m [37m [40m, [0m [37 m [40m'yesterday' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtimediff [0m [37m [40m( [0m [35m [40m'today' [0m [37m [40m, [0m [35 m [40m'yesterday' [0m [37m [40m) [0m
@ -3780,16 +3780,16 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mdate() [0m, [1mdatetime() [0m, [1mjulianday() [0m, [1mstrftime() [0m, [1mtime() [0m, [1mtimediff() [0m
[4mExamples [0m
#1 To get the timestamp rounded down to the start of the ten minute slice:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtimeslice [0m [37m [40m( [0m [37m [40m'2017-01-01T05:05:00' [0m [37m [40m, [0m [37 m [40m'10m' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtimeslice [0m [37m [40m( [0m [35m [40m'2017-01-01T05:05:00' [0m [37m [40m, [0m [35 m [40m'10m' [0m [37m [40m) [0m
#2 To group log messages into five minute buckets and count them:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtimeslice [0m [37m [40m( [0m [37m [40mlog_time_msecs [0m [37m [40m, [0m [37 m [40m'5m' [0m [37m [40m) [0m [1m [36m [40mAS [0m [37m [40m [0m [37m [40mslice [0m [37m [40m, [0m [1m [37m [40mcount [0m [37m [40m(1) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtimeslice [0m [37m [40m( [0m [37m [40mlog_time_msecs [0m [37m [40m, [0m [35 m [40m'5m' [0m [37m [40m) [0m [1m [36m [40mAS [0m [37m [40m [0m [37m [40mslice [0m [37m [40m, [0m [1m [37m [40mcount [0m [37m [40m(1) [0m
[37m [40m [0m [37m [40m [0m [1m [36m [40mFROM [0m [37m [40m [0m [37m [40mlnav_example_log [0m [37m [40m [0m [1m [36m [40mGROUP [0m [37m [40m [0m [1m [36m [40mBY [0m [37m [40m [0m [37m [40mslice [0m
#3 To group log messages by those before 4:30am and after:
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtimeslice [0m [37m [40m( [0m [37m [40mlog_time_msecs [0m [37m [40m, [0m [37 m [40m'before 4:30am' [0m [37m [40m) [0m [1m [36m [40mAS [0m [37m [40m [0m [37m [40mslice [0m [37m [40m, [0m [1m [37m [40mcount [0m [37m [40m(1) [0m [1m [36m [40mFROM [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtimeslice [0m [37m [40m( [0m [37m [40mlog_time_msecs [0m [37m [40m, [0m [35 m [40m'before 4:30am' [0m [37m [40m) [0m [1m [36m [40mAS [0m [37m [40m [0m [37m [40mslice [0m [37m [40m, [0m [1m [37m [40mcount [0m [37m [40m(1) [0m [1m [36m [40mFROM [0m
[37m [40m [0m [37m [40mlnav_example_log [0m [37m [40m [0m [1m [36m [40mGROUP [0m [37m [40m [0m [1m [36m [40mBY [0m [37m [40m [0m [37m [40mslice [0m
@ -3837,11 +3837,11 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mxpath() [0m
[4mExamples [0m
#1 To trim whitespace from the start and end of the string ' abc ':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtrim [0m [37m [40m( [0m [37 m [40m' abc ' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtrim [0m [37m [40m( [0m [35 m [40m' abc ' [0m [37m [40m) [0m
#2 To trim the characters '-' and '+' from the string '-+abc+-':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtrim [0m [37m [40m( [0m [37m [40m'-+abc+-' [0m [37m [40m, [0m [37 m [40m'-+' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtrim [0m [37m [40m( [0m [35m [40m'-+abc+-' [0m [37m [40m, [0m [35 m [40m'-+' [0m [37m [40m) [0m
@ -3858,7 +3858,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
#2 To get the type of the string 'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtypeof [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mtypeof [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m) [0m
@ -3879,7 +3879,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mxpath() [0m
[4mExample [0m
#1 To get the unicode code point for the first character of 'abc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40municode [0m [37m [40m( [0m [37 m [40m'abc' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40municode [0m [37m [40m( [0m [35 m [40m'abc' [0m [37m [40m) [0m
@ -3907,7 +3907,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mxpath() [0m
[4mExample [0m
#1 To uppercase the string 'aBc':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mupper [0m [37m [40m( [0m [37 m [40m'aBc' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [37m [40mupper [0m [37m [40m( [0m [35 m [40m'aBc' [0m [37m [40m) [0m
@ -3936,15 +3936,15 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[1mupper() [0m
[4mExamples [0m
#1 To select the XML nodes on the path '/abc/def':
[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 [40mxpath [0m [37m [40m( [0m [37m [40m'/abc/def' [0m [37m [40m, [0m [37m [40m'< [0m [37m [40mabc [0m [37m [40m>< [0m [37m [40mdef [0m [37m [40m a="b">Hello</ [0m [37m [40mdef [0m [37m [40m>< [0m [37m [40mdef [0m [37m [40m>Bye</ [0m [37m [40mdef [0m [37m [40m></ [0m [37m [40mabc [0m [37 m [40m>' [0m [37m [40m) [0m
[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 [40mxpath [0m [37m [40m( [0m [35m [40m'/abc/def' [0m [37m [40m, [0m [35m [40m'< [0m [35m [40mabc [0m [35m [40m>< [0m [35m [40mdef [0m [35m [40m a="b">Hello</ [0m [35m [40mdef [0m [35m [40m>< [0m [35m [40mdef [0m [35m [40m>Bye</ [0m [35m [40mdef [0m [35m [40m></ [0m [35m [40mabc [0m [35 m [40m>' [0m [37m [40m) [0m
#2 To select all 'a' attributes on the path '/abc/def':
[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 [40mxpath [0m [37m [40m( [0m [37m [40m'/abc/def/@a' [0m [37m [40m, [0m [37m [40m'< [0m [37m [40mabc [0m [37m [40m>< [0m [37m [40mdef [0m [37m [40m a="b">Hello</ [0m [37m [40mdef [0m [37m [40m>< [0m [37m [40mdef [0m [37m [40m>Bye</ [0m [37m [40mdef [0m [37m [40m></ [0m [37m [40mabc [0m [37 m [40m>' [0m [37m [40m) [0m
[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 [40mxpath [0m [37m [40m( [0m [35m [40m'/abc/def/@a' [0m [37m [40m, [0m [35m [40m'< [0m [35m [40mabc [0m [35m [40m>< [0m [35m [40mdef [0m [35m [40m a="b">Hello</ [0m [35m [40mdef [0m [35m [40m>< [0m [35m [40mdef [0m [35m [40m>Bye</ [0m [35m [40mdef [0m [35m [40m></ [0m [35m [40mabc [0m [35 m [40m>' [0m [37m [40m) [0m
#3 To select the text nodes on the path '/abc/def':
[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 [40mxpath [0m [37m [40m( [0m [37m [40m'/abc/def/text()' [0m [37m [40m, [0m [37m [40m'< [0m [37m [40mabc [0m [37m [40m>< [0m [37m [40mdef [0m [37m [40m a="b">Hello ★</ [0m [37m [40mdef [0m [37m [40m></ [0m [37m [40mabc [0m [37 m [40m>' [0m [37m [40m) [0m
[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 [40mxpath [0m [37m [40m( [0m [35m [40m'/abc/def/text()' [0m [37m [40m, [0m [35m [40m'< [0m [35m [40mabc [0m [35m [40m>< [0m [35m [40mdef [0m [35m [40m a="b">Hello ★</ [0m [35m [40mdef [0m [35m [40m></ [0m [35m [40mabc [0m [35 m [40m>' [0m [37m [40m) [0m
@ -3964,7 +3964,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[4mExample [0m
#1 To attach the database file '/tmp/customers.db' with the name customers:
[37m [40m; [0m [1m [36m [40mATTACH [0m [37m [40m [0m [1m [36m [40mDATABASE [0m [37m [40m [0m [37 m [40m'/tmp/customers.db' [0m [37m [40m [0m [1m [36m [40mAS [0m [37m [40m [0m [37m [40mcustomers [0m [37m [40m [0m
[37m [40m; [0m [1m [36m [40mATTACH [0m [37m [40m [0m [1m [36m [40mDATABASE [0m [37m [40m [0m [35 m [40m'/tmp/customers.db' [0m [37m [40m [0m [1m [36m [40mAS [0m [37m [40m [0m [37m [40mcustomers [0m [37m [40m [0m
@ -3983,7 +3983,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[4mExample [0m
#1 To evaluate the number one and return the string 'one':
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [36m [40mCASE [0m [37m [40m 1 [0m [1m [36m [40mWHEN [0m [37m [40m 0 [0m [1m [36m [40mTHEN [0m [37m [40m [0m [37 m [40m'zero' [0m [37m [40m [0m [1m [36m [40mWHEN [0m [37m [40m 1 [0m [1m [36m [40mTHEN [0m [37m [40m [0m [37 m [40m'one' [0m [37m [40m [0m [1m [36m [40mEND [0m
[37m [40m; [0m [1m [36m [40mSELECT [0m [37m [40m [0m [1m [36m [40mCASE [0m [37m [40m 1 [0m [1m [36m [40mWHEN [0m [37m [40m 0 [0m [1m [36m [40mTHEN [0m [37m [40m [0m [35 m [40m'zero' [0m [37m [40m [0m [1m [36m [40mWHEN [0m [37m [40m 1 [0m [1m [36m [40mTHEN [0m [37m [40m [0m [35 m [40m'one' [0m [37m [40m [0m [1m [36m [40mEND [0m
@ -4033,7 +4033,7 @@ lnav@googlegroups.com[1] support@lnav.org[2]
[4mExample [0m
#1 To insert the pair containing 'MSG' and 'HELLO, WORLD!' into the
'environ' table:
[37m [40m; [0m [1m [36m [40mINSERT [0m [37m [40m [0m [1m [36m [40mINTO [0m [37m [40m [0m [37m [40menviron [0m [37m [40m [0m [1m [36m [40mVALUES [0m [37m [40m ( [0m [37m [40m'MSG' [0m [37m [40m, [0m [37 m [40m'HELLO, WORLD!' [0m [37m [40m) [0m
[37m [40m; [0m [1m [36m [40mINSERT [0m [37m [40m [0m [1m [36m [40mINTO [0m [37m [40m [0m [37m [40menviron [0m [37m [40m [0m [1m [36m [40mVALUES [0m [37m [40m ( [0m [35m [40m'MSG' [0m [37m [40m, [0m [35 m [40m'HELLO, WORLD!' [0m [37m [40m) [0m