summaryrefslogtreecommitdiffstats
path: root/test/expected
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--test/expected/expected.am1005
-rw-r--r--test/expected/test_cli.sh_17a68b798354f9a6cdfab372006caeb74038d15c.err0
-rw-r--r--test/expected/test_cli.sh_17a68b798354f9a6cdfab372006caeb74038d15c.out1
-rw-r--r--test/expected/test_cli.sh_5524542b1a6954ff9741155101497270a2f0c557.err0
-rw-r--r--test/expected/test_cli.sh_5524542b1a6954ff9741155101497270a2f0c557.out1
-rw-r--r--test/expected/test_cli.sh_97e19b9ff3775d84074455a2e8993a0611b1c269.err8
-rw-r--r--test/expected/test_cli.sh_97e19b9ff3775d84074455a2e8993a0611b1c269.out0
-rw-r--r--test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.err0
-rw-r--r--test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.out3
-rw-r--r--test/expected/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.err0
-rw-r--r--test/expected/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.out2
-rw-r--r--test/expected/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.err6
-rw-r--r--test/expected/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.out0
-rw-r--r--test/expected/test_cmds.sh_0b1e4b1523dfca71927b1fe721c74490c51361d1.err0
-rw-r--r--test/expected/test_cmds.sh_0b1e4b1523dfca71927b1fe721c74490c51361d1.out3
-rw-r--r--test/expected/test_cmds.sh_0b41fe57743ba0be088037d9ba29bc465e7c9bf9.err0
-rw-r--r--test/expected/test_cmds.sh_0b41fe57743ba0be088037d9ba29bc465e7c9bf9.out3
-rw-r--r--test/expected/test_cmds.sh_0f0ab532d8d845f8201af65bf5f6fc994e21a8aa.err0
-rw-r--r--test/expected/test_cmds.sh_0f0ab532d8d845f8201af65bf5f6fc994e21a8aa.out3
-rw-r--r--test/expected/test_cmds.sh_109a44ac6a8f1be2736c8e9c47aeed187e0581ee.err0
-rw-r--r--test/expected/test_cmds.sh_109a44ac6a8f1be2736c8e9c47aeed187e0581ee.out2
-rw-r--r--test/expected/test_cmds.sh_12856706bfb4a8e2686098dd2644a7989d370b02.err0
-rw-r--r--test/expected/test_cmds.sh_12856706bfb4a8e2686098dd2644a7989d370b02.out1
-rw-r--r--test/expected/test_cmds.sh_12b4cb9bd6586f9694100db76734b19a75158eab.err7
-rw-r--r--test/expected/test_cmds.sh_12b4cb9bd6586f9694100db76734b19a75158eab.out0
-rw-r--r--test/expected/test_cmds.sh_145126309709179759926289caf729703ef6e1c6.err0
-rw-r--r--test/expected/test_cmds.sh_145126309709179759926289caf729703ef6e1c6.out2
-rw-r--r--test/expected/test_cmds.sh_148007d2626b3c92d00ac31639b6918b1fc4aa60.err0
-rw-r--r--test/expected/test_cmds.sh_148007d2626b3c92d00ac31639b6918b1fc4aa60.out2
-rw-r--r--test/expected/test_cmds.sh_1cab7d240cf85ff2c3538f5a06af141b01bc83ad.err0
-rw-r--r--test/expected/test_cmds.sh_1cab7d240cf85ff2c3538f5a06af141b01bc83ad.out3
-rw-r--r--test/expected/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.err0
-rw-r--r--test/expected/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.out68
-rw-r--r--test/expected/test_cmds.sh_1e1c8492b295913ce5afcd104cde0ec4ca1dcdac.err6
-rw-r--r--test/expected/test_cmds.sh_1e1c8492b295913ce5afcd104cde0ec4ca1dcdac.out0
-rw-r--r--test/expected/test_cmds.sh_1f53f5b16c7c5aa695ed2e6427d822a1b940fcf4.err0
-rw-r--r--test/expected/test_cmds.sh_1f53f5b16c7c5aa695ed2e6427d822a1b940fcf4.out3
-rw-r--r--test/expected/test_cmds.sh_22577861cb0921a7e7f3d1af6485938f4930ba7b.err0
-rw-r--r--test/expected/test_cmds.sh_22577861cb0921a7e7f3d1af6485938f4930ba7b.out2
-rw-r--r--test/expected/test_cmds.sh_2339d09953b6937981d8a448000c3fdc2837f8c4.err0
-rw-r--r--test/expected/test_cmds.sh_2339d09953b6937981d8a448000c3fdc2837f8c4.out12
-rw-r--r--test/expected/test_cmds.sh_2539ff9c4dbed93df3f0408ccc5fd81df34d1193.err0
-rw-r--r--test/expected/test_cmds.sh_2539ff9c4dbed93df3f0408ccc5fd81df34d1193.out0
-rw-r--r--test/expected/test_cmds.sh_29f0c808f4e93c6ef3890e6b793bee274a5b36ca.err0
-rw-r--r--test/expected/test_cmds.sh_29f0c808f4e93c6ef3890e6b793bee274a5b36ca.out1
-rw-r--r--test/expected/test_cmds.sh_2a449c0a43e895e85c8b1c9547f32d7b5b4f84f6.err0
-rw-r--r--test/expected/test_cmds.sh_2a449c0a43e895e85c8b1c9547f32d7b5b4f84f6.out1
-rw-r--r--test/expected/test_cmds.sh_2a535de164de4c060d2bff34aa7cc75ac7cac2c2.err0
-rw-r--r--test/expected/test_cmds.sh_2a535de164de4c060d2bff34aa7cc75ac7cac2c2.out2
-rw-r--r--test/expected/test_cmds.sh_2cd167954a3be3e130e5f9601b72794a856cef92.err6
-rw-r--r--test/expected/test_cmds.sh_2cd167954a3be3e130e5f9601b72794a856cef92.out0
-rw-r--r--test/expected/test_cmds.sh_2de9ec294e2f533d13e04c70d9525f8b58d47bb2.err0
-rw-r--r--test/expected/test_cmds.sh_2de9ec294e2f533d13e04c70d9525f8b58d47bb2.out2
-rw-r--r--test/expected/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.err0
-rw-r--r--test/expected/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.out1
-rw-r--r--test/expected/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.err0
-rw-r--r--test/expected/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.out23
-rw-r--r--test/expected/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.err0
-rw-r--r--test/expected/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.out1
-rw-r--r--test/expected/test_cmds.sh_305b1dfdfe785b945df4220aad6671ae1d364f55.err0
-rw-r--r--test/expected/test_cmds.sh_305b1dfdfe785b945df4220aad6671ae1d364f55.out1
-rw-r--r--test/expected/test_cmds.sh_3429080ed14d01c6a887900186f37750df0d5ff0.err0
-rw-r--r--test/expected/test_cmds.sh_3429080ed14d01c6a887900186f37750df0d5ff0.out2
-rw-r--r--test/expected/test_cmds.sh_34a6bcaa2877471b8ea718374101fa9ce3b78235.err0
-rw-r--r--test/expected/test_cmds.sh_34a6bcaa2877471b8ea718374101fa9ce3b78235.out1
-rw-r--r--test/expected/test_cmds.sh_35b0dd8a030396742bc5acfde7715fb19f312f29.err0
-rw-r--r--test/expected/test_cmds.sh_35b0dd8a030396742bc5acfde7715fb19f312f29.out3
-rw-r--r--test/expected/test_cmds.sh_36800217930a6a30e68c4efb20f6959c4f71aeb0.err7
-rw-r--r--test/expected/test_cmds.sh_36800217930a6a30e68c4efb20f6959c4f71aeb0.out0
-rw-r--r--test/expected/test_cmds.sh_38fa2a95b703d4ce12e82882eca1938264822690.err0
-rw-r--r--test/expected/test_cmds.sh_38fa2a95b703d4ce12e82882eca1938264822690.out3
-rw-r--r--test/expected/test_cmds.sh_3b20a298e2c059d7f6045cbc0c07ca3db3917695.err0
-rw-r--r--test/expected/test_cmds.sh_3b20a298e2c059d7f6045cbc0c07ca3db3917695.out2
-rw-r--r--test/expected/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.err0
-rw-r--r--test/expected/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.out2
-rw-r--r--test/expected/test_cmds.sh_4b2d91b19008d5b775090e3ef87c111f9e603b15.err0
-rw-r--r--test/expected/test_cmds.sh_4b2d91b19008d5b775090e3ef87c111f9e603b15.out2
-rw-r--r--test/expected/test_cmds.sh_4dbe20c11056a07d2c7efb5ed15903050d628216.err0
-rw-r--r--test/expected/test_cmds.sh_4dbe20c11056a07d2c7efb5ed15903050d628216.out3
-rw-r--r--test/expected/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.err0
-rw-r--r--test/expected/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.out3
-rw-r--r--test/expected/test_cmds.sh_512872aebaae73ca4f33fa93acb2f4e3b018f8b4.err5
-rw-r--r--test/expected/test_cmds.sh_512872aebaae73ca4f33fa93acb2f4e3b018f8b4.out0
-rw-r--r--test/expected/test_cmds.sh_53a9686102f69b07b034df291f554a00b265ed20.err0
-rw-r--r--test/expected/test_cmds.sh_53a9686102f69b07b034df291f554a00b265ed20.out2
-rw-r--r--test/expected/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.err4
-rw-r--r--test/expected/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.out0
-rw-r--r--test/expected/test_cmds.sh_5bfd08c1639701476d7b9348c36afd46fdbe6f2a.err0
-rw-r--r--test/expected/test_cmds.sh_5bfd08c1639701476d7b9348c36afd46fdbe6f2a.out2
-rw-r--r--test/expected/test_cmds.sh_624a41e152675575f4b07c19b2cf0e3a028429a2.err0
-rw-r--r--test/expected/test_cmds.sh_624a41e152675575f4b07c19b2cf0e3a028429a2.out2
-rw-r--r--test/expected/test_cmds.sh_62d68c0a11757c996f24c8f003e6b4059c3e30b2.err0
-rw-r--r--test/expected/test_cmds.sh_62d68c0a11757c996f24c8f003e6b4059c3e30b2.out1
-rw-r--r--test/expected/test_cmds.sh_661ec61acdd8f6fa6ec1e3c2cf5f896eef431351.err0
-rw-r--r--test/expected/test_cmds.sh_661ec61acdd8f6fa6ec1e3c2cf5f896eef431351.out14
-rw-r--r--test/expected/test_cmds.sh_6a6031113aca32fabc5a3da64b7be46f5ce5a312.err8
-rw-r--r--test/expected/test_cmds.sh_6a6031113aca32fabc5a3da64b7be46f5ce5a312.out0
-rw-r--r--test/expected/test_cmds.sh_6e016c0ed61fc652be1a79b864875ffede64f281.err4
-rw-r--r--test/expected/test_cmds.sh_6e016c0ed61fc652be1a79b864875ffede64f281.out0
-rw-r--r--test/expected/test_cmds.sh_7270e37dab4549cfa7c5232451c031e1e04b4aef.err0
-rw-r--r--test/expected/test_cmds.sh_7270e37dab4549cfa7c5232451c031e1e04b4aef.out1
-rw-r--r--test/expected/test_cmds.sh_73ea99c84fb1d4570e8bcd45c423b4a28fe41e81.err0
-rw-r--r--test/expected/test_cmds.sh_73ea99c84fb1d4570e8bcd45c423b4a28fe41e81.out3
-rw-r--r--test/expected/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.err0
-rw-r--r--test/expected/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.out5
-rw-r--r--test/expected/test_cmds.sh_7e14e7f18219719453838835fa96c3451f78996d.err6
-rw-r--r--test/expected/test_cmds.sh_7e14e7f18219719453838835fa96c3451f78996d.out0
-rw-r--r--test/expected/test_cmds.sh_819b3dd21348f7242f3914ad0a8c5b1cdb3f91af.err0
-rw-r--r--test/expected/test_cmds.sh_819b3dd21348f7242f3914ad0a8c5b1cdb3f91af.out1
-rw-r--r--test/expected/test_cmds.sh_8298805f897346b4bb0f14e53c06b4fa28e309e3.err0
-rw-r--r--test/expected/test_cmds.sh_8298805f897346b4bb0f14e53c06b4fa28e309e3.out3
-rw-r--r--test/expected/test_cmds.sh_83654557317602d2e00adde1e5cba190d9db0dff.err0
-rw-r--r--test/expected/test_cmds.sh_83654557317602d2e00adde1e5cba190d9db0dff.out3
-rw-r--r--test/expected/test_cmds.sh_85ae6ac1eb9a8378f7a6c39659f52671218ce64b.err0
-rw-r--r--test/expected/test_cmds.sh_85ae6ac1eb9a8378f7a6c39659f52671218ce64b.out1
-rw-r--r--test/expected/test_cmds.sh_85ed177028f226e86b1d164eb1a4e18eaf036c9d.err0
-rw-r--r--test/expected/test_cmds.sh_85ed177028f226e86b1d164eb1a4e18eaf036c9d.out1
-rw-r--r--test/expected/test_cmds.sh_8758082427d6232a15053433942a4b5ad9f2e3ce.err0
-rw-r--r--test/expected/test_cmds.sh_8758082427d6232a15053433942a4b5ad9f2e3ce.out1
-rw-r--r--test/expected/test_cmds.sh_876116da8ab46c0c8a212ce230d1b8a13970f78f.err6
-rw-r--r--test/expected/test_cmds.sh_876116da8ab46c0c8a212ce230d1b8a13970f78f.out0
-rw-r--r--test/expected/test_cmds.sh_8765cbf326648e9014f8cf5f761895010fff443a.err0
-rw-r--r--test/expected/test_cmds.sh_8765cbf326648e9014f8cf5f761895010fff443a.out37
-rw-r--r--test/expected/test_cmds.sh_89afa826d1b33be6926df48443faa1d1c5f285a7.err6
-rw-r--r--test/expected/test_cmds.sh_89afa826d1b33be6926df48443faa1d1c5f285a7.out0
-rw-r--r--test/expected/test_cmds.sh_8d5b43c693e78804a8fb06989392fa8cccb46b7b.err0
-rw-r--r--test/expected/test_cmds.sh_8d5b43c693e78804a8fb06989392fa8cccb46b7b.out2
-rw-r--r--test/expected/test_cmds.sh_9445861db011dfa2d21a44788047de345ee291e8.err0
-rw-r--r--test/expected/test_cmds.sh_9445861db011dfa2d21a44788047de345ee291e8.out3
-rw-r--r--test/expected/test_cmds.sh_95beaabe41d72cf4c6810e79c623da759ac1c71b.err0
-rw-r--r--test/expected/test_cmds.sh_95beaabe41d72cf4c6810e79c623da759ac1c71b.out2
-rw-r--r--test/expected/test_cmds.sh_968dac54dc80d91a5da2322890c6c26dfa0d8462.err0
-rw-r--r--test/expected/test_cmds.sh_968dac54dc80d91a5da2322890c6c26dfa0d8462.out1
-rw-r--r--test/expected/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.err0
-rw-r--r--test/expected/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.out4
-rw-r--r--test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.err0
-rw-r--r--test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.out2
-rw-r--r--test/expected/test_cmds.sh_a1123427c31c022433d66d05ee5d5e1c8ab415e4.err0
-rw-r--r--test/expected/test_cmds.sh_a1123427c31c022433d66d05ee5d5e1c8ab415e4.out2
-rw-r--r--test/expected/test_cmds.sh_a190bfc279fa046a823864f1484f899d27d22953.err3
-rw-r--r--test/expected/test_cmds.sh_a190bfc279fa046a823864f1484f899d27d22953.out0
-rw-r--r--test/expected/test_cmds.sh_a5742238bad948b1372d32f7a491f03fa4e8b711.err6
-rw-r--r--test/expected/test_cmds.sh_a5742238bad948b1372d32f7a491f03fa4e8b711.out0
-rw-r--r--test/expected/test_cmds.sh_a6c431f2871ea96cfdf4e11465b3bca543c7b678.err0
-rw-r--r--test/expected/test_cmds.sh_a6c431f2871ea96cfdf4e11465b3bca543c7b678.out10
-rw-r--r--test/expected/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.err7
-rw-r--r--test/expected/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.out0
-rw-r--r--test/expected/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.err0
-rw-r--r--test/expected/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.out12
-rw-r--r--test/expected/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.err0
-rw-r--r--test/expected/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.out1
-rw-r--r--test/expected/test_cmds.sh_b5a530d16c982cf769151291f0bfd612ea71183f.err0
-rw-r--r--test/expected/test_cmds.sh_b5a530d16c982cf769151291f0bfd612ea71183f.out1
-rw-r--r--test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.err0
-rw-r--r--test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.out4417
-rw-r--r--test/expected/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.err0
-rw-r--r--test/expected/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.out37
-rw-r--r--test/expected/test_cmds.sh_b7fcd26c45c850c3d43ce25b1f610a311eb898c5.err0
-rw-r--r--test/expected/test_cmds.sh_b7fcd26c45c850c3d43ce25b1f610a311eb898c5.out1
-rw-r--r--test/expected/test_cmds.sh_b9f8bf53ec2736432eb048d94a391175eb4dc5bf.err0
-rw-r--r--test/expected/test_cmds.sh_b9f8bf53ec2736432eb048d94a391175eb4dc5bf.out2
-rw-r--r--test/expected/test_cmds.sh_bc60341827636715c14c562863da9733cbde7e68.err0
-rw-r--r--test/expected/test_cmds.sh_bc60341827636715c14c562863da9733cbde7e68.out1
-rw-r--r--test/expected/test_cmds.sh_be1d9628fc447b6f17121d9457ea1602afe8f3f3.err0
-rw-r--r--test/expected/test_cmds.sh_be1d9628fc447b6f17121d9457ea1602afe8f3f3.out1
-rw-r--r--test/expected/test_cmds.sh_be3b7c5874b5f4d86cc230bd2f9802c98909e148.err0
-rw-r--r--test/expected/test_cmds.sh_be3b7c5874b5f4d86cc230bd2f9802c98909e148.out1
-rw-r--r--test/expected/test_cmds.sh_bf4e7fad67e281beaa11b6e2b03a00b419c7c9b0.err7
-rw-r--r--test/expected/test_cmds.sh_bf4e7fad67e281beaa11b6e2b03a00b419c7c9b0.out0
-rw-r--r--test/expected/test_cmds.sh_c01e10f7cae8d36fa79ae03be887cb5477025f6d.err0
-rw-r--r--test/expected/test_cmds.sh_c01e10f7cae8d36fa79ae03be887cb5477025f6d.out5
-rw-r--r--test/expected/test_cmds.sh_c2b4431dd0cc36c6201d263b727b3305e8cda6b1.err7
-rw-r--r--test/expected/test_cmds.sh_c2b4431dd0cc36c6201d263b727b3305e8cda6b1.out0
-rw-r--r--test/expected/test_cmds.sh_c4777849c39a6c34dea5b0279cd7400692f1ab5f.err0
-rw-r--r--test/expected/test_cmds.sh_c4777849c39a6c34dea5b0279cd7400692f1ab5f.out3
-rw-r--r--test/expected/test_cmds.sh_c4a15771f7e1487bf73b2e9d1564ad8ecfd76c7e.err0
-rw-r--r--test/expected/test_cmds.sh_c4a15771f7e1487bf73b2e9d1564ad8ecfd76c7e.out1
-rw-r--r--test/expected/test_cmds.sh_c72aed622c19d493968e33f20d5dde3838a4258f.err6
-rw-r--r--test/expected/test_cmds.sh_c72aed622c19d493968e33f20d5dde3838a4258f.out0
-rw-r--r--test/expected/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.err0
-rw-r--r--test/expected/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.out2
-rw-r--r--test/expected/test_cmds.sh_ca66660c973f76a3c2a147c7f5035bcb4e8a8bbc.err0
-rw-r--r--test/expected/test_cmds.sh_ca66660c973f76a3c2a147c7f5035bcb4e8a8bbc.out2
-rw-r--r--test/expected/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.err0
-rw-r--r--test/expected/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.out1
-rw-r--r--test/expected/test_cmds.sh_d3b69abdfb39e4bfa5828c2f9593e2b2b7ed4d5d.err0
-rw-r--r--test/expected/test_cmds.sh_d3b69abdfb39e4bfa5828c2f9593e2b2b7ed4d5d.out3
-rw-r--r--test/expected/test_cmds.sh_d76d77ad95b9f120825417a6a8220c13df9541fc.err0
-rw-r--r--test/expected/test_cmds.sh_d76d77ad95b9f120825417a6a8220c13df9541fc.out3
-rw-r--r--test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.err7
-rw-r--r--test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.out0
-rw-r--r--test/expected/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.err0
-rw-r--r--test/expected/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.out2
-rw-r--r--test/expected/test_cmds.sh_d8eeef53a58bdeddbc1028d7c525413e3ca1c8df.err0
-rw-r--r--test/expected/test_cmds.sh_d8eeef53a58bdeddbc1028d7c525413e3ca1c8df.out1
-rw-r--r--test/expected/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.err0
-rw-r--r--test/expected/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.out1
-rw-r--r--test/expected/test_cmds.sh_dd41fbbcd71699314af232156d4155fbdf849131.err0
-rw-r--r--test/expected/test_cmds.sh_dd41fbbcd71699314af232156d4155fbdf849131.out3
-rw-r--r--test/expected/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.err0
-rw-r--r--test/expected/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.out3
-rw-r--r--test/expected/test_cmds.sh_e495cf059477e3f80c3241c6f8d5808b6f1d19c7.err0
-rw-r--r--test/expected/test_cmds.sh_e495cf059477e3f80c3241c6f8d5808b6f1d19c7.out2
-rw-r--r--test/expected/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.err0
-rw-r--r--test/expected/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.out12
-rw-r--r--test/expected/test_cmds.sh_e911aebcb2defb7471aa620c45a86cad449ad505.err0
-rw-r--r--test/expected/test_cmds.sh_e911aebcb2defb7471aa620c45a86cad449ad505.out2
-rw-r--r--test/expected/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.err0
-rw-r--r--test/expected/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.out3
-rw-r--r--test/expected/test_cmds.sh_ec2b28c6ea328e3ea56b13ab8ca3d9ee856a9dda.err6
-rw-r--r--test/expected/test_cmds.sh_ec2b28c6ea328e3ea56b13ab8ca3d9ee856a9dda.out0
-rw-r--r--test/expected/test_cmds.sh_ed5b73be0b991e0e8d6735e31df5b37c4286321b.err7
-rw-r--r--test/expected/test_cmds.sh_ed5b73be0b991e0e8d6735e31df5b37c4286321b.out0
-rw-r--r--test/expected/test_cmds.sh_f788d5f5932905d09ecbd581040ec5ce76459da5.err0
-rw-r--r--test/expected/test_cmds.sh_f788d5f5932905d09ecbd581040ec5ce76459da5.out3
-rw-r--r--test/expected/test_cmds.sh_ff6faebbde8586e04bfadba14a3d2bb4451784ad.err0
-rw-r--r--test/expected/test_cmds.sh_ff6faebbde8586e04bfadba14a3d2bb4451784ad.out2
-rw-r--r--test/expected/test_config.sh_2765ea0d4c037b8c935840604edb0ae796c97a04.err6
-rw-r--r--test/expected/test_config.sh_2765ea0d4c037b8c935840604edb0ae796c97a04.out0
-rw-r--r--test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.err20
-rw-r--r--test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.out0
-rw-r--r--test/expected/test_config.sh_5fd9fbccc35e9b06abdd913da0c16bdb306b926e.err6
-rw-r--r--test/expected/test_config.sh_5fd9fbccc35e9b06abdd913da0c16bdb306b926e.out0
-rw-r--r--test/expected/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.err38
-rw-r--r--test/expected/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.out0
-rw-r--r--test/expected/test_config.sh_b08f7523659d1c12f0e59920cd40d17d4a83b72f.err0
-rw-r--r--test/expected/test_config.sh_b08f7523659d1c12f0e59920cd40d17d4a83b72f.out0
-rw-r--r--test/expected/test_config.sh_d622658dc98327b1b2fd346802d24bc633e34ac7.err12
-rw-r--r--test/expected/test_config.sh_d622658dc98327b1b2fd346802d24bc633e34ac7.out0
-rw-r--r--test/expected/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.err8
-rw-r--r--test/expected/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.out0
-rw-r--r--test/expected/test_config.sh_eec3768ebc201ca63bca1411270965f78db1abfc.err0
-rw-r--r--test/expected/test_config.sh_eec3768ebc201ca63bca1411270965f78db1abfc.out1
-rw-r--r--test/expected/test_events.sh_09ba47d70bfca88e89faf29598c1095292cad435.err0
-rw-r--r--test/expected/test_events.sh_09ba47d70bfca88e89faf29598c1095292cad435.out0
-rw-r--r--test/expected/test_events.sh_153e221f3cb50f4d3e4581be0bf311e62489c42d.err0
-rw-r--r--test/expected/test_events.sh_153e221f3cb50f4d3e4581be0bf311e62489c42d.out6
-rw-r--r--test/expected/test_events.sh_3dae146ef3bf201c43656344803694a34a3dbfec.err0
-rw-r--r--test/expected/test_events.sh_3dae146ef3bf201c43656344803694a34a3dbfec.out2
-rw-r--r--test/expected/test_events.sh_6f9523d43f174397829b6a7fe6ee0090d97df5f9.err0
-rw-r--r--test/expected/test_events.sh_6f9523d43f174397829b6a7fe6ee0090d97df5f9.out0
-rw-r--r--test/expected/test_events.sh_729f77b8e7136d64d22a6610a80ba6b584a2d896.err0
-rw-r--r--test/expected/test_events.sh_729f77b8e7136d64d22a6610a80ba6b584a2d896.out3
-rw-r--r--test/expected/test_events.sh_d9c7907f907b2335e1328b23fdc46d0968a608d9.err10
-rw-r--r--test/expected/test_events.sh_d9c7907f907b2335e1328b23fdc46d0968a608d9.out0
-rw-r--r--test/expected/test_events.sh_ed8dc44add223341c03ccb7b3e18371bdb42b710.err0
-rw-r--r--test/expected/test_events.sh_ed8dc44add223341c03ccb7b3e18371bdb42b710.out3
-rw-r--r--test/expected/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.err0
-rw-r--r--test/expected/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.out9
-rw-r--r--test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.err171
-rw-r--r--test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.out0
-rw-r--r--test/expected/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.err190
-rw-r--r--test/expected/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.out0
-rw-r--r--test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.err61
-rw-r--r--test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.out0
-rw-r--r--test/expected/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.err66
-rw-r--r--test/expected/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.out0
-rw-r--r--test/expected/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.err0
-rw-r--r--test/expected/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.out13
-rw-r--r--test/expected/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.err0
-rw-r--r--test/expected/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.out14
-rw-r--r--test/expected/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.err0
-rw-r--r--test/expected/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.out192
-rw-r--r--test/expected/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.err0
-rw-r--r--test/expected/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.out3
-rw-r--r--test/expected/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.err0
-rw-r--r--test/expected/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.out29
-rw-r--r--test/expected/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.err0
-rw-r--r--test/expected/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.out4
-rw-r--r--test/expected/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.err0
-rw-r--r--test/expected/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.out29
-rw-r--r--test/expected/test_json_format.sh_7aade92cff911c5b3cfc733685809f949ae35778.err0
-rw-r--r--test/expected/test_json_format.sh_7aade92cff911c5b3cfc733685809f949ae35778.out1
-rw-r--r--test/expected/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.err0
-rw-r--r--test/expected/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.out12
-rw-r--r--test/expected/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.err0
-rw-r--r--test/expected/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.out8
-rw-r--r--test/expected/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.err0
-rw-r--r--test/expected/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.out2
-rw-r--r--test/expected/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.err0
-rw-r--r--test/expected/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.out14
-rw-r--r--test/expected/test_json_format.sh_8f2ebcd319afc7966ef11e31f9dd646bf6f001dd.err0
-rw-r--r--test/expected/test_json_format.sh_8f2ebcd319afc7966ef11e31f9dd646bf6f001dd.out21
-rw-r--r--test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.err0
-rw-r--r--test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.out3
-rw-r--r--test/expected/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.err0
-rw-r--r--test/expected/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.out4
-rw-r--r--test/expected/test_json_format.sh_989e52d167582648b73c5d025cc0e814c642b3c8.err0
-rw-r--r--test/expected/test_json_format.sh_989e52d167582648b73c5d025cc0e814c642b3c8.out4
-rw-r--r--test/expected/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.err0
-rw-r--r--test/expected/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.out25
-rw-r--r--test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.err0
-rw-r--r--test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.out4
-rw-r--r--test/expected/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.err0
-rw-r--r--test/expected/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.out2
-rw-r--r--test/expected/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.err0
-rw-r--r--test/expected/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.out50
-rw-r--r--test/expected/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.err0
-rw-r--r--test/expected/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.out4
-rw-r--r--test/expected/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.err0
-rw-r--r--test/expected/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.out3
-rw-r--r--test/expected/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.err0
-rw-r--r--test/expected/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.out4
-rw-r--r--test/expected/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.err0
-rw-r--r--test/expected/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.out4
-rw-r--r--test/expected/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.err0
-rw-r--r--test/expected/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.out3
-rw-r--r--test/expected/test_logfile.sh_09bd16e044302f6b121092534708594bdad11b5a.err0
-rw-r--r--test/expected/test_logfile.sh_09bd16e044302f6b121092534708594bdad11b5a.out1
-rw-r--r--test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.err0
-rw-r--r--test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.out2
-rw-r--r--test/expected/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.err0
-rw-r--r--test/expected/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.out2
-rw-r--r--test/expected/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.err0
-rw-r--r--test/expected/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.out2
-rw-r--r--test/expected/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.err0
-rw-r--r--test/expected/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.out2
-rw-r--r--test/expected/test_logfile.sh_4a2a907fcb069b8d6e65961a7b2e796d6c3a87b1.err0
-rw-r--r--test/expected/test_logfile.sh_4a2a907fcb069b8d6e65961a7b2e796d6c3a87b1.out4
-rw-r--r--test/expected/test_logfile.sh_6602faf7817c494c33e32da7ee95f13aa9210d01.err0
-rw-r--r--test/expected/test_logfile.sh_6602faf7817c494c33e32da7ee95f13aa9210d01.out10
-rw-r--r--test/expected/test_logfile.sh_7c2e11488bccc59458b5775db4b90de964858259.err0
-rw-r--r--test/expected/test_logfile.sh_7c2e11488bccc59458b5775db4b90de964858259.out6
-rw-r--r--test/expected/test_logfile.sh_a7037efd0c4bbf51940137a44e57d94e9307e83e.err0
-rw-r--r--test/expected/test_logfile.sh_a7037efd0c4bbf51940137a44e57d94e9307e83e.out1
-rw-r--r--test/expected/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.err0
-rw-r--r--test/expected/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.out3
-rw-r--r--test/expected/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.err0
-rw-r--r--test/expected/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.out11
-rw-r--r--test/expected/test_meta.sh_154047fb52e4831aabf7d36512247bad6a6a2cf7.err7
-rw-r--r--test/expected/test_meta.sh_154047fb52e4831aabf7d36512247bad6a6a2cf7.out0
-rw-r--r--test/expected/test_meta.sh_3c9b5940f7533c5fc3d4956a6efce50a9e7132d4.err11
-rw-r--r--test/expected/test_meta.sh_3c9b5940f7533c5fc3d4956a6efce50a9e7132d4.out0
-rw-r--r--test/expected/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.err0
-rw-r--r--test/expected/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.out2
-rw-r--r--test/expected/test_meta.sh_45ff39a3d0ac0ca0c95aaca14d043450cec1cedd.err0
-rw-r--r--test/expected/test_meta.sh_45ff39a3d0ac0ca0c95aaca14d043450cec1cedd.out5
-rw-r--r--test/expected/test_meta.sh_48e85ba0c0945a5085fb4ee255771406061a9c17.err0
-rw-r--r--test/expected/test_meta.sh_48e85ba0c0945a5085fb4ee255771406061a9c17.out6
-rw-r--r--test/expected/test_meta.sh_4c39b356748c67ccf8a6027a1af88da532f8252a.err0
-rw-r--r--test/expected/test_meta.sh_4c39b356748c67ccf8a6027a1af88da532f8252a.out3
-rw-r--r--test/expected/test_meta.sh_7b75763926d832bf9784ca234a060859770aabe7.err0
-rw-r--r--test/expected/test_meta.sh_7b75763926d832bf9784ca234a060859770aabe7.out2
-rw-r--r--test/expected/test_meta.sh_811b1a8a176b25001a89e35b295a1117ab76969b.err0
-rw-r--r--test/expected/test_meta.sh_811b1a8a176b25001a89e35b295a1117ab76969b.out3
-rw-r--r--test/expected/test_meta.sh_83ac877aa9d38b25945cf96d6326a2468187c40f.err0
-rw-r--r--test/expected/test_meta.sh_83ac877aa9d38b25945cf96d6326a2468187c40f.out37
-rw-r--r--test/expected/test_meta.sh_a7489c1f0e001adc732b7e2ab31bb30960fda078.err0
-rw-r--r--test/expected/test_meta.sh_a7489c1f0e001adc732b7e2ab31bb30960fda078.out4
-rw-r--r--test/expected/test_meta.sh_c063f96398650f130941bbbf4cf63c1244fdbee5.err0
-rw-r--r--test/expected/test_meta.sh_c063f96398650f130941bbbf4cf63c1244fdbee5.out3
-rw-r--r--test/expected/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.err0
-rw-r--r--test/expected/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.out4
-rw-r--r--test/expected/test_meta.sh_c8fb22932af2467a2651797a8a8d8cddcd09431d.err0
-rw-r--r--test/expected/test_meta.sh_c8fb22932af2467a2651797a8a8d8cddcd09431d.out4
-rw-r--r--test/expected/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.err0
-rw-r--r--test/expected/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.out5
-rw-r--r--test/expected/test_meta.sh_fd09cb565f44a114d8c9a519e571918e30262eaf.err0
-rw-r--r--test/expected/test_meta.sh_fd09cb565f44a114d8c9a519e571918e30262eaf.out4
-rw-r--r--test/expected/test_meta.sh_fdf4a91aa55262255816dff7d605f1f0a5d6fe92.err0
-rw-r--r--test/expected/test_meta.sh_fdf4a91aa55262255816dff7d605f1f0a5d6fe92.out4
-rw-r--r--test/expected/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.err0
-rw-r--r--test/expected/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.out8
-rw-r--r--test/expected/test_pretty_print.sh_4111e649fb49c0a377e552fa0b56c60c370633da.err0
-rw-r--r--test/expected/test_pretty_print.sh_4111e649fb49c0a377e552fa0b56c60c370633da.out4
-rw-r--r--test/expected/test_pretty_print.sh_675a2ff6306df7c54127e39319cf06a2dd353145.err0
-rw-r--r--test/expected/test_pretty_print.sh_675a2ff6306df7c54127e39319cf06a2dd353145.out5
-rw-r--r--test/expected/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.err0
-rw-r--r--test/expected/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.out5
-rw-r--r--test/expected/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.err0
-rw-r--r--test/expected/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.out3
-rw-r--r--test/expected/test_pretty_print.sh_a6d9042e5e95f2a49194bd80c1eed154813ddf41.err0
-rw-r--r--test/expected/test_pretty_print.sh_a6d9042e5e95f2a49194bd80c1eed154813ddf41.out19
-rw-r--r--test/expected/test_pretty_print.sh_cd361eeca7e91bfab942b75d6c3422c7a456a111.err0
-rw-r--r--test/expected/test_pretty_print.sh_cd361eeca7e91bfab942b75d6c3422c7a456a111.out3
-rw-r--r--test/expected/test_pretty_print.sh_f8feb52a321026d9562b271eb37a2c56dfaed329.err0
-rw-r--r--test/expected/test_pretty_print.sh_f8feb52a321026d9562b271eb37a2c56dfaed329.out1
-rw-r--r--test/expected/test_regex101.sh_0fa3663a45aca6a328cb728872af7ed7ee896f1c.err2
-rw-r--r--test/expected/test_regex101.sh_0fa3663a45aca6a328cb728872af7ed7ee896f1c.out0
-rw-r--r--test/expected/test_regex101.sh_182ae9244db314a953af2bee969726e381bc5a32.err3
-rw-r--r--test/expected/test_regex101.sh_182ae9244db314a953af2bee969726e381bc5a32.out0
-rw-r--r--test/expected/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.err3
-rw-r--r--test/expected/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.out1
-rw-r--r--test/expected/test_regex101.sh_281af24141680330791db7f7c5fa70833ce08a6b.err1
-rw-r--r--test/expected/test_regex101.sh_281af24141680330791db7f7c5fa70833ce08a6b.out0
-rw-r--r--test/expected/test_regex101.sh_35703b13990785632cca82123fb3883797959c0b.err0
-rw-r--r--test/expected/test_regex101.sh_35703b13990785632cca82123fb3883797959c0b.out4
-rw-r--r--test/expected/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.err0
-rw-r--r--test/expected/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.out10
-rw-r--r--test/expected/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.err34
-rw-r--r--test/expected/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.out3
-rw-r--r--test/expected/test_regex101.sh_442cc58676590a3604d5c2183f5fe0a75c98351a.err0
-rw-r--r--test/expected/test_regex101.sh_442cc58676590a3604d5c2183f5fe0a75c98351a.out2
-rw-r--r--test/expected/test_regex101.sh_566fd88d216a44bc1c6e23f2d6f2d0caf99d42f9.err0
-rw-r--r--test/expected/test_regex101.sh_566fd88d216a44bc1c6e23f2d6f2d0caf99d42f9.out1
-rw-r--r--test/expected/test_regex101.sh_5f2f7ecb6ab9cbec4b41385b91bd038906b8a7b2.err3
-rw-r--r--test/expected/test_regex101.sh_5f2f7ecb6ab9cbec4b41385b91bd038906b8a7b2.out0
-rw-r--r--test/expected/test_regex101.sh_629bde30483e0a6461076e9058f3a5eb81ae0425.err3
-rw-r--r--test/expected/test_regex101.sh_629bde30483e0a6461076e9058f3a5eb81ae0425.out0
-rw-r--r--test/expected/test_regex101.sh_630db454054cf92ec9bd0f4e3e83300047f583ff.err0
-rw-r--r--test/expected/test_regex101.sh_630db454054cf92ec9bd0f4e3e83300047f583ff.out4
-rw-r--r--test/expected/test_regex101.sh_771af6f3d29b8350542d5c6e98bdbf4c223cd531.err1
-rw-r--r--test/expected/test_regex101.sh_771af6f3d29b8350542d5c6e98bdbf4c223cd531.out0
-rw-r--r--test/expected/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.err5
-rw-r--r--test/expected/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.out0
-rw-r--r--test/expected/test_regex101.sh_79ee3f5fe71ccec97b2619d8c1f74ca97ffd2243.err0
-rw-r--r--test/expected/test_regex101.sh_79ee3f5fe71ccec97b2619d8c1f74ca97ffd2243.out2
-rw-r--r--test/expected/test_regex101.sh_7de76c174c58d67bf93e8f01d6d55ebb6a023f10.err3
-rw-r--r--test/expected/test_regex101.sh_7de76c174c58d67bf93e8f01d6d55ebb6a023f10.out0
-rw-r--r--test/expected/test_regex101.sh_8a43e6657d4f60e68d31eb8302542ca28e80d077.err0
-rw-r--r--test/expected/test_regex101.sh_8a43e6657d4f60e68d31eb8302542ca28e80d077.out3
-rw-r--r--test/expected/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.err3
-rw-r--r--test/expected/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.out0
-rw-r--r--test/expected/test_regex101.sh_95c56a9d146ec9a7c2196559d316f928b2ae6ae9.err4
-rw-r--r--test/expected/test_regex101.sh_95c56a9d146ec9a7c2196559d316f928b2ae6ae9.out0
-rw-r--r--test/expected/test_regex101.sh_9d101ee29c45cdb8c0f117ad736c9a5dd5da5839.err1
-rw-r--r--test/expected/test_regex101.sh_9d101ee29c45cdb8c0f117ad736c9a5dd5da5839.out0
-rw-r--r--test/expected/test_regex101.sh_c43e07df9b3068696fdc8759c7561135db981b38.err2
-rw-r--r--test/expected/test_regex101.sh_c43e07df9b3068696fdc8759c7561135db981b38.out0
-rw-r--r--test/expected/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.err0
-rw-r--r--test/expected/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.out34
-rw-r--r--test/expected/test_regex101.sh_cf6c0a9f0f04e24ce1fae7a0a434830b14447f83.err1
-rw-r--r--test/expected/test_regex101.sh_cf6c0a9f0f04e24ce1fae7a0a434830b14447f83.out0
-rw-r--r--test/expected/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.err7
-rw-r--r--test/expected/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.out0
-rw-r--r--test/expected/test_regex101.sh_f23e393dbf23d0d8e276e9b7610c7b74d79980f8.err0
-rw-r--r--test/expected/test_regex101.sh_f23e393dbf23d0d8e276e9b7610c7b74d79980f8.out15
-rw-r--r--test/expected/test_regex101.sh_fc41b6ee90cbf038620151f16d164b361acf82dd.err1
-rw-r--r--test/expected/test_regex101.sh_fc41b6ee90cbf038620151f16d164b361acf82dd.out0
-rw-r--r--test/expected/test_sessions.sh_0300a1391c33b1c45ddfa90198a6bd0a5404a77f.err0
-rw-r--r--test/expected/test_sessions.sh_0300a1391c33b1c45ddfa90198a6bd0a5404a77f.out1
-rw-r--r--test/expected/test_sessions.sh_17b85654b929b2a8fc1705a170ced544783292fa.err0
-rw-r--r--test/expected/test_sessions.sh_17b85654b929b2a8fc1705a170ced544783292fa.out3
-rw-r--r--test/expected/test_sessions.sh_345b0e66dab7b881397c4b38380da81092ab70dd.err0
-rw-r--r--test/expected/test_sessions.sh_345b0e66dab7b881397c4b38380da81092ab70dd.out0
-rw-r--r--test/expected/test_sessions.sh_430b9522ba1a37983138f3c4935cba91b781e415.err0
-rw-r--r--test/expected/test_sessions.sh_430b9522ba1a37983138f3c4935cba91b781e415.out0
-rw-r--r--test/expected/test_sessions.sh_4f13dd3858546b6e04a27e244159d355e368f2ae.err0
-rw-r--r--test/expected/test_sessions.sh_4f13dd3858546b6e04a27e244159d355e368f2ae.out0
-rw-r--r--test/expected/test_sessions.sh_68a89b56c5e7f7db620084cca1eb547cbb19a2c9.err0
-rw-r--r--test/expected/test_sessions.sh_68a89b56c5e7f7db620084cca1eb547cbb19a2c9.out4
-rw-r--r--test/expected/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.err0
-rw-r--r--test/expected/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.out36
-rw-r--r--test/expected/test_sessions.sh_858fd0081ed9c46dd81e2f81f1090756f2463558.err0
-rw-r--r--test/expected/test_sessions.sh_858fd0081ed9c46dd81e2f81f1090756f2463558.out3
-rw-r--r--test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.err0
-rw-r--r--test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out33
-rw-r--r--test/expected/test_sessions.sh_903b41c950f5f90d7786d7a09bb6e2f217654b15.err0
-rw-r--r--test/expected/test_sessions.sh_903b41c950f5f90d7786d7a09bb6e2f217654b15.out0
-rw-r--r--test/expected/test_sessions.sh_92a98a3e4e3a10bf1f2371d21a8282c5d3d4baa5.err0
-rw-r--r--test/expected/test_sessions.sh_92a98a3e4e3a10bf1f2371d21a8282c5d3d4baa5.out2
-rw-r--r--test/expected/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.err0
-rw-r--r--test/expected/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.out11
-rw-r--r--test/expected/test_sessions.sh_a92822d121a836140a401fd71535dc4a7a8d5b48.err0
-rw-r--r--test/expected/test_sessions.sh_a92822d121a836140a401fd71535dc4a7a8d5b48.out0
-rw-r--r--test/expected/test_sessions.sh_b3d71a87fcb4e3487f71ccad8c6ce681db220572.err0
-rw-r--r--test/expected/test_sessions.sh_b3d71a87fcb4e3487f71ccad8c6ce681db220572.out0
-rw-r--r--test/expected/test_sessions.sh_b932b33dd087b94d4306dd179c5d4f9ddd394960.err0
-rw-r--r--test/expected/test_sessions.sh_b932b33dd087b94d4306dd179c5d4f9ddd394960.out1
-rw-r--r--test/expected/test_sessions.sh_ddf45811e9906de9f3930fe802ac7b2cc6e48106.err0
-rw-r--r--test/expected/test_sessions.sh_ddf45811e9906de9f3930fe802ac7b2cc6e48106.out1
-rw-r--r--test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.err0
-rw-r--r--test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.out33
-rw-r--r--test/expected/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.err0
-rw-r--r--test/expected/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.out7
-rw-r--r--test/expected/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.err0
-rw-r--r--test/expected/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.out7
-rw-r--r--test/expected/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.err0
-rw-r--r--test/expected/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.out2
-rw-r--r--test/expected/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.err0
-rw-r--r--test/expected/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.out5
-rw-r--r--test/expected/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.err0
-rw-r--r--test/expected/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.out7
-rw-r--r--test/expected/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.err0
-rw-r--r--test/expected/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.out6
-rw-r--r--test/expected/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.err0
-rw-r--r--test/expected/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.out7
-rw-r--r--test/expected/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.err0
-rw-r--r--test/expected/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.out6
-rw-r--r--test/expected/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.err0
-rw-r--r--test/expected/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.out5
-rw-r--r--test/expected/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.err0
-rw-r--r--test/expected/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.out6
-rw-r--r--test/expected/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.err0
-rw-r--r--test/expected/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.out9
-rw-r--r--test/expected/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.err0
-rw-r--r--test/expected/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.out6
-rw-r--r--test/expected/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.err0
-rw-r--r--test/expected/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.out6
-rw-r--r--test/expected/test_sql.sh_02def66745b063518473df862987747909f56ccc.err4
-rw-r--r--test/expected/test_sql.sh_02def66745b063518473df862987747909f56ccc.out0
-rw-r--r--test/expected/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.err0
-rw-r--r--test/expected/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.out2
-rw-r--r--test/expected/test_sql.sh_0d46ee142f80f262c8c14a22751571cc567df525.err4
-rw-r--r--test/expected/test_sql.sh_0d46ee142f80f262c8c14a22751571cc567df525.out0
-rw-r--r--test/expected/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.err0
-rw-r--r--test/expected/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.out2
-rw-r--r--test/expected/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.err0
-rw-r--r--test/expected/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.out3
-rw-r--r--test/expected/test_sql.sh_2532083f215ed44630621f18df3dd7b77c06ae10.err10
-rw-r--r--test/expected/test_sql.sh_2532083f215ed44630621f18df3dd7b77c06ae10.out0
-rw-r--r--test/expected/test_sql.sh_26c0d94d7837792144f2d0f866fb3c12a0bd410d.err6
-rw-r--r--test/expected/test_sql.sh_26c0d94d7837792144f2d0f866fb3c12a0bd410d.out0
-rw-r--r--test/expected/test_sql.sh_2959f0c70fca61a07c6c772f193e73022f7794f1.err4
-rw-r--r--test/expected/test_sql.sh_2959f0c70fca61a07c6c772f193e73022f7794f1.out0
-rw-r--r--test/expected/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.err4
-rw-r--r--test/expected/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.out0
-rw-r--r--test/expected/test_sql.sh_2cc8a92c6eb73741080b187a2670d309b8171c90.err4
-rw-r--r--test/expected/test_sql.sh_2cc8a92c6eb73741080b187a2670d309b8171c90.out0
-rw-r--r--test/expected/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.err0
-rw-r--r--test/expected/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.out3
-rw-r--r--test/expected/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.err0
-rw-r--r--test/expected/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.out2
-rw-r--r--test/expected/test_sql.sh_3d77a2092192caf98e141a6039e886ede836f044.err4
-rw-r--r--test/expected/test_sql.sh_3d77a2092192caf98e141a6039e886ede836f044.out0
-rw-r--r--test/expected/test_sql.sh_4090f96ea11a344c1e2939211da778992dab47d8.err5
-rw-r--r--test/expected/test_sql.sh_4090f96ea11a344c1e2939211da778992dab47d8.out0
-rw-r--r--test/expected/test_sql.sh_4629b626c65a85d7a5595571e195b67afca272ba.err4
-rw-r--r--test/expected/test_sql.sh_4629b626c65a85d7a5595571e195b67afca272ba.out0
-rw-r--r--test/expected/test_sql.sh_50c0b2c93b646b848a017764bde8a4282c556e2d.err4
-rw-r--r--test/expected/test_sql.sh_50c0b2c93b646b848a017764bde8a4282c556e2d.out0
-rw-r--r--test/expected/test_sql.sh_528e48a03cdfa7cfbe263a6e22a65606247a8a95.err4
-rw-r--r--test/expected/test_sql.sh_528e48a03cdfa7cfbe263a6e22a65606247a8a95.out0
-rw-r--r--test/expected/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.err0
-rw-r--r--test/expected/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.out2
-rw-r--r--test/expected/test_sql.sh_56047c9470e515bc3e3709354c01e5d50462cde7.err0
-rw-r--r--test/expected/test_sql.sh_56047c9470e515bc3e3709354c01e5d50462cde7.out2
-rw-r--r--test/expected/test_sql.sh_57427f3c4b4ec785ffff7c5802c10db0d3e547cf.err5
-rw-r--r--test/expected/test_sql.sh_57427f3c4b4ec785ffff7c5802c10db0d3e547cf.out0
-rw-r--r--test/expected/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.err7
-rw-r--r--test/expected/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.out0
-rw-r--r--test/expected/test_sql.sh_5801770f3e0ecc1d62c7a97116d6da1981bbc7bd.err4
-rw-r--r--test/expected/test_sql.sh_5801770f3e0ecc1d62c7a97116d6da1981bbc7bd.out0
-rw-r--r--test/expected/test_sql.sh_5fe26fe4fc22f23f8dbe3a6aab394602886f2971.err5
-rw-r--r--test/expected/test_sql.sh_5fe26fe4fc22f23f8dbe3a6aab394602886f2971.out0
-rw-r--r--test/expected/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.err0
-rw-r--r--test/expected/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.out2
-rw-r--r--test/expected/test_sql.sh_6ad9d0adf85c36363f6b24f49950dcdc13dd34ab.err6
-rw-r--r--test/expected/test_sql.sh_6ad9d0adf85c36363f6b24f49950dcdc13dd34ab.out0
-rw-r--r--test/expected/test_sql.sh_6edb0c8d5323d1b962d90dd6ecdd7eee9008d7b5.err6
-rw-r--r--test/expected/test_sql.sh_6edb0c8d5323d1b962d90dd6ecdd7eee9008d7b5.out0
-rw-r--r--test/expected/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.err0
-rw-r--r--test/expected/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.out2
-rw-r--r--test/expected/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.err0
-rw-r--r--test/expected/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.out2
-rw-r--r--test/expected/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.err6
-rw-r--r--test/expected/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.out0
-rw-r--r--test/expected/test_sql.sh_85fe3b9803254ea54b864d4865d7bd4d7a7f86c6.err0
-rw-r--r--test/expected/test_sql.sh_85fe3b9803254ea54b864d4865d7bd4d7a7f86c6.out4
-rw-r--r--test/expected/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.err0
-rw-r--r--test/expected/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.out4
-rw-r--r--test/expected/test_sql.sh_9a209f3ee1b1f543ca2587b695d2eb0e63e74c51.err6
-rw-r--r--test/expected/test_sql.sh_9a209f3ee1b1f543ca2587b695d2eb0e63e74c51.out0
-rw-r--r--test/expected/test_sql.sh_9b03e9f7a1bc35e408b3a17ee90cfdadea164df6.err0
-rw-r--r--test/expected/test_sql.sh_9b03e9f7a1bc35e408b3a17ee90cfdadea164df6.out4
-rw-r--r--test/expected/test_sql.sh_9ceccab07fbf7130bffe3c201c710719e4a3e9af.err6
-rw-r--r--test/expected/test_sql.sh_9ceccab07fbf7130bffe3c201c710719e4a3e9af.out0
-rw-r--r--test/expected/test_sql.sh_9e1d05b821822ee40e13fadb24ec558f4bfcff10.err4
-rw-r--r--test/expected/test_sql.sh_9e1d05b821822ee40e13fadb24ec558f4bfcff10.out0
-rw-r--r--test/expected/test_sql.sh_a6b68b9f0044d18e7fa8f9287ddc9110701edc33.err4
-rw-r--r--test/expected/test_sql.sh_a6b68b9f0044d18e7fa8f9287ddc9110701edc33.out0
-rw-r--r--test/expected/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.err0
-rw-r--r--test/expected/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.out2
-rw-r--r--test/expected/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.err0
-rw-r--r--test/expected/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.out4
-rw-r--r--test/expected/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.err0
-rw-r--r--test/expected/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.out4
-rw-r--r--test/expected/test_sql.sh_b2694e4fbecdd128798af25ee0d069e7e35fb499.err4
-rw-r--r--test/expected/test_sql.sh_b2694e4fbecdd128798af25ee0d069e7e35fb499.out0
-rw-r--r--test/expected/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.err0
-rw-r--r--test/expected/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.out2
-rw-r--r--test/expected/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.err0
-rw-r--r--test/expected/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.out5
-rw-r--r--test/expected/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.err0
-rw-r--r--test/expected/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.out2
-rw-r--r--test/expected/test_sql.sh_c20b0320096342c180146a5d18a6de82319d70b2.err4
-rw-r--r--test/expected/test_sql.sh_c20b0320096342c180146a5d18a6de82319d70b2.out0
-rw-r--r--test/expected/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.err0
-rw-r--r--test/expected/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.out4
-rw-r--r--test/expected/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.err0
-rw-r--r--test/expected/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.out3
-rw-r--r--test/expected/test_sql.sh_c73dec2706fc0b9a124f5da3a83f40d8d3255beb.err4
-rw-r--r--test/expected/test_sql.sh_c73dec2706fc0b9a124f5da3a83f40d8d3255beb.out0
-rw-r--r--test/expected/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.err0
-rw-r--r--test/expected/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.out2
-rw-r--r--test/expected/test_sql.sh_cc77a633a66d1778705a34e3657737547b3fb08d.err0
-rw-r--r--test/expected/test_sql.sh_cc77a633a66d1778705a34e3657737547b3fb08d.out2
-rw-r--r--test/expected/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.err10
-rw-r--r--test/expected/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.out0
-rw-r--r--test/expected/test_sql.sh_e70dc7d2b686c7f91c2b41b10f3920c50f3ea405.err0
-rw-r--r--test/expected/test_sql.sh_e70dc7d2b686c7f91c2b41b10f3920c50f3ea405.out1
-rw-r--r--test/expected/test_sql.sh_ff8a978fc0de0fed675a3cd1454cf435a6856fd5.err0
-rw-r--r--test/expected/test_sql.sh_ff8a978fc0de0fed675a3cd1454cf435a6856fd5.out3
-rw-r--r--test/expected/test_sql_anno.sh_028d5d5af2f3519b59d349d41cb7ecf385253b51.err0
-rw-r--r--test/expected/test_sql_anno.sh_028d5d5af2f3519b59d349d41cb7ecf385253b51.out5
-rw-r--r--test/expected/test_sql_anno.sh_0a37c43350ddd7a2d0d75695be32fac083ad04a4.err0
-rw-r--r--test/expected/test_sql_anno.sh_0a37c43350ddd7a2d0d75695be32fac083ad04a4.out4
-rw-r--r--test/expected/test_sql_anno.sh_1151e5b727f6b57070bf2c8f047f1d7e02b803a6.err0
-rw-r--r--test/expected/test_sql_anno.sh_1151e5b727f6b57070bf2c8f047f1d7e02b803a6.out6
-rw-r--r--test/expected/test_sql_anno.sh_1b29488b949c294479aa6054f80a35bc106b454b.err0
-rw-r--r--test/expected/test_sql_anno.sh_1b29488b949c294479aa6054f80a35bc106b454b.out2
-rw-r--r--test/expected/test_sql_anno.sh_331a152080d2e278b7cc0a37728eca1ded36ed72.err0
-rw-r--r--test/expected/test_sql_anno.sh_331a152080d2e278b7cc0a37728eca1ded36ed72.out5
-rw-r--r--test/expected/test_sql_anno.sh_4ca92f0da538c2f9d524211a021b306af0d2740d.err0
-rw-r--r--test/expected/test_sql_anno.sh_4ca92f0da538c2f9d524211a021b306af0d2740d.out7
-rw-r--r--test/expected/test_sql_anno.sh_73814eca259e469b57bf7469787b91e8e8569b17.err0
-rw-r--r--test/expected/test_sql_anno.sh_73814eca259e469b57bf7469787b91e8e8569b17.out7
-rw-r--r--test/expected/test_sql_anno.sh_74bc5fb90a0c94a1a37d30a8e9254ea02c192a75.err0
-rw-r--r--test/expected/test_sql_anno.sh_74bc5fb90a0c94a1a37d30a8e9254ea02c192a75.out6
-rw-r--r--test/expected/test_sql_anno.sh_7b183037479528581e1eacace7b9acae41c5aa8e.err0
-rw-r--r--test/expected/test_sql_anno.sh_7b183037479528581e1eacace7b9acae41c5aa8e.out12
-rw-r--r--test/expected/test_sql_anno.sh_96ebdc277ae760e1b6efae3195ff678654b04e52.err0
-rw-r--r--test/expected/test_sql_anno.sh_96ebdc277ae760e1b6efae3195ff678654b04e52.out7
-rw-r--r--test/expected/test_sql_anno.sh_99da5994c8c90536dbdb1b8ad7dbfb41698a5e8c.err0
-rw-r--r--test/expected/test_sql_anno.sh_99da5994c8c90536dbdb1b8ad7dbfb41698a5e8c.out10
-rw-r--r--test/expected/test_sql_anno.sh_b1a2ddce48beb3e4b1e3ca4b4229a7c21b83b7c4.err0
-rw-r--r--test/expected/test_sql_anno.sh_b1a2ddce48beb3e4b1e3ca4b4229a7c21b83b7c4.out6
-rw-r--r--test/expected/test_sql_anno.sh_be6839712d088fc7b31618ed90f8ce706c35a9c0.err0
-rw-r--r--test/expected/test_sql_anno.sh_be6839712d088fc7b31618ed90f8ce706c35a9c0.out7
-rw-r--r--test/expected/test_sql_anno.sh_c879ba94fdc1a099cf56bd33e5b3e9be65310036.err0
-rw-r--r--test/expected/test_sql_anno.sh_c879ba94fdc1a099cf56bd33e5b3e9be65310036.out10
-rw-r--r--test/expected/test_sql_anno.sh_c909647ed0e585002074f55c946f3033df1815b2.err0
-rw-r--r--test/expected/test_sql_anno.sh_c909647ed0e585002074f55c946f3033df1815b2.out6
-rw-r--r--test/expected/test_sql_anno.sh_ce0506ee7a12eb0f7b970522cc6a79180ecb20cc.err0
-rw-r--r--test/expected/test_sql_anno.sh_ce0506ee7a12eb0f7b970522cc6a79180ecb20cc.out11
-rw-r--r--test/expected/test_sql_anno.sh_f3c64191d6016767a5857fbb1bad26548586bb96.err0
-rw-r--r--test/expected/test_sql_anno.sh_f3c64191d6016767a5857fbb1bad26548586bb96.out10
-rw-r--r--test/expected/test_sql_coll_func.sh_077cab6e271c914daf5b221cc512853077891f35.err0
-rw-r--r--test/expected/test_sql_coll_func.sh_077cab6e271c914daf5b221cc512853077891f35.out2
-rw-r--r--test/expected/test_sql_coll_func.sh_0ce56741d3c34af274c8ddb4b90c4e5749d05971.err0
-rw-r--r--test/expected/test_sql_coll_func.sh_0ce56741d3c34af274c8ddb4b90c4e5749d05971.out2
-rw-r--r--test/expected/test_sql_coll_func.sh_180ad44fe073cc9642da642af1f442adfd98ec62.err0
-rw-r--r--test/expected/test_sql_coll_func.sh_180ad44fe073cc9642da642af1f442adfd98ec62.out2
-rw-r--r--test/expected/test_sql_coll_func.sh_2230714a0b2ab6aca9ddfe686734f313cef5a96b.err0
-rw-r--r--test/expected/test_sql_coll_func.sh_2230714a0b2ab6aca9ddfe686734f313cef5a96b.out2
-rw-r--r--test/expected/test_sql_coll_func.sh_68515cfd0a50880f6dfc8f9810c9e761493ebb12.err0
-rw-r--r--test/expected/test_sql_coll_func.sh_68515cfd0a50880f6dfc8f9810c9e761493ebb12.out2
-rw-r--r--test/expected/test_sql_coll_func.sh_6de2a86c53883ec4430b98edd06b0c0cdf23e741.err0
-rw-r--r--test/expected/test_sql_coll_func.sh_6de2a86c53883ec4430b98edd06b0c0cdf23e741.out2
-rw-r--r--test/expected/test_sql_coll_func.sh_918178c6dd9d70d0432ededfde5af5e53c094385.err0
-rw-r--r--test/expected/test_sql_coll_func.sh_918178c6dd9d70d0432ededfde5af5e53c094385.out2
-rw-r--r--test/expected/test_sql_coll_func.sh_c76a24a209987e4c668c87588c12b8f34294b144.err0
-rw-r--r--test/expected/test_sql_coll_func.sh_c76a24a209987e4c668c87588c12b8f34294b144.out2
-rw-r--r--test/expected/test_sql_coll_func.sh_cacb045d2bce6dc298c4da3d96bdc34dab2404df.err0
-rw-r--r--test/expected/test_sql_coll_func.sh_cacb045d2bce6dc298c4da3d96bdc34dab2404df.out2
-rw-r--r--test/expected/test_sql_coll_func.sh_cae4bc239c924bbc05a0b099b63f0e3af7560976.err0
-rw-r--r--test/expected/test_sql_coll_func.sh_cae4bc239c924bbc05a0b099b63f0e3af7560976.out2
-rw-r--r--test/expected/test_sql_coll_func.sh_d4e3c9f7a38458726900731d2b71c104d591ef14.err0
-rw-r--r--test/expected/test_sql_coll_func.sh_d4e3c9f7a38458726900731d2b71c104d591ef14.out2
-rw-r--r--test/expected/test_sql_coll_func.sh_d5c8f7ab91c3dbe46add7e08f532b17797d9975c.err0
-rw-r--r--test/expected/test_sql_coll_func.sh_d5c8f7ab91c3dbe46add7e08f532b17797d9975c.out2
-rw-r--r--test/expected/test_sql_coll_func.sh_eb2c424733ce978d1b6d1dcb93d6e45af7c8fa96.err0
-rw-r--r--test/expected/test_sql_coll_func.sh_eb2c424733ce978d1b6d1dcb93d6e45af7c8fa96.out2
-rw-r--r--test/expected/test_sql_coll_func.sh_f045e94d921bfcfbded83ee681bf11445a99ff6d.err0
-rw-r--r--test/expected/test_sql_coll_func.sh_f045e94d921bfcfbded83ee681bf11445a99ff6d.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_109ff42de817b56a9082f605f63af71c0db8c9d7.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_109ff42de817b56a9082f605f63af71c0db8c9d7.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_17b09f79bfcac1762153ec9650fb1e545a24d8a3.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_17b09f79bfcac1762153ec9650fb1e545a24d8a3.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_18ddc138b263dd06f3fe81fec05bc4330caffef7.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_18ddc138b263dd06f3fe81fec05bc4330caffef7.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_20a76db446a0a558dcbdf41033f97d4a22ca1bfa.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_20a76db446a0a558dcbdf41033f97d4a22ca1bfa.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_2c3f66e78deb8721b1d1fe5a787e9958895401d7.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_2c3f66e78deb8721b1d1fe5a787e9958895401d7.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_3ed11101a413e47c3dfe219557b7a6df04a64253.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_3ed11101a413e47c3dfe219557b7a6df04a64253.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_469380561dccd79c7249562067107c330838eaad.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_469380561dccd79c7249562067107c330838eaad.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_54b004f301907860d360434b37fd6c81fcc12f99.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_54b004f301907860d360434b37fd6c81fcc12f99.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_73df81c6889d1f06fb3f3b6bf30c6046b3f52c8b.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_73df81c6889d1f06fb3f3b6bf30c6046b3f52c8b.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_74ca242a126316bcb82ccefd9369f9e43b7fd2e1.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_74ca242a126316bcb82ccefd9369f9e43b7fd2e1.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_7b116cb0ab7a28b866e0d2b80fe8ef0cd25f2aa3.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_7b116cb0ab7a28b866e0d2b80fe8ef0cd25f2aa3.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_7b5d7dd8d0003ab83e3e5cb0a5ce802fe9a0e3b3.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_7b5d7dd8d0003ab83e3e5cb0a5ce802fe9a0e3b3.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_917ffde411c1425e8a6addae0170900dcd553986.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_917ffde411c1425e8a6addae0170900dcd553986.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.err1
-rw-r--r--test/expected/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.out0
-rw-r--r--test/expected/test_sql_fs_func.sh_a247b137e71124e496f1beab56c7fe85717c4199.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_a247b137e71124e496f1beab56c7fe85717c4199.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_b66242975fd6ecb7260cd96ac29accaf4f4af6ae.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_b66242975fd6ecb7260cd96ac29accaf4f4af6ae.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_c5d78cfbf5594cc27590277353c08a92e2497622.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_c5d78cfbf5594cc27590277353c08a92e2497622.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_cc402803bf14ee3673089c575f1af87220cb6a72.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_cc402803bf14ee3673089c575f1af87220cb6a72.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_cf307d87104e99a1858bb7c4f28ea3068340f188.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_cf307d87104e99a1858bb7c4f28ea3068340f188.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.err1
-rw-r--r--test/expected/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.out0
-rw-r--r--test/expected/test_sql_fs_func.sh_d51ad77cd67a2a691838c9d95142638df1c07360.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_d51ad77cd67a2a691838c9d95142638df1c07360.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_e24cf3f35643f945392e7d7a4ca82fea98b4519e.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_e24cf3f35643f945392e7d7a4ca82fea98b4519e.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_f31f240313ddec806aa6f353ceed707dfd9aaf16.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_f31f240313ddec806aa6f353ceed707dfd9aaf16.out2
-rw-r--r--test/expected/test_sql_indexes.sh_026dd9752b6101e0791689d3a2026f7e517e36f5.err0
-rw-r--r--test/expected/test_sql_indexes.sh_026dd9752b6101e0791689d3a2026f7e517e36f5.out0
-rw-r--r--test/expected/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.err0
-rw-r--r--test/expected/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.out3
-rw-r--r--test/expected/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.err0
-rw-r--r--test/expected/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.out5
-rw-r--r--test/expected/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.err0
-rw-r--r--test/expected/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.out2
-rw-r--r--test/expected/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.err0
-rw-r--r--test/expected/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.out5
-rw-r--r--test/expected/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.err0
-rw-r--r--test/expected/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.out3
-rw-r--r--test/expected/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.err0
-rw-r--r--test/expected/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.out2
-rw-r--r--test/expected/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.err0
-rw-r--r--test/expected/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.out2
-rw-r--r--test/expected/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.err0
-rw-r--r--test/expected/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.out5
-rw-r--r--test/expected/test_sql_json_func.sh_017d24148f3e28f719429b709f4aa5478f458443.err0
-rw-r--r--test/expected/test_sql_json_func.sh_017d24148f3e28f719429b709f4aa5478f458443.out2
-rw-r--r--test/expected/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.err4
-rw-r--r--test/expected/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.out0
-rw-r--r--test/expected/test_sql_json_func.sh_191436b38db80b1dd9e7e0814c31c5fa7239dc51.err0
-rw-r--r--test/expected/test_sql_json_func.sh_191436b38db80b1dd9e7e0814c31c5fa7239dc51.out3
-rw-r--r--test/expected/test_sql_json_func.sh_1a74914cbf12fcd5c06935b992f6355acdbcf2d8.err0
-rw-r--r--test/expected/test_sql_json_func.sh_1a74914cbf12fcd5c06935b992f6355acdbcf2d8.out2
-rw-r--r--test/expected/test_sql_json_func.sh_1c1a2d438d2bde95abd9a859d113c3661e650a36.err0
-rw-r--r--test/expected/test_sql_json_func.sh_1c1a2d438d2bde95abd9a859d113c3661e650a36.out2
-rw-r--r--test/expected/test_sql_json_func.sh_238417283b8e5db23c992f966e3f106bd178f7d0.err0
-rw-r--r--test/expected/test_sql_json_func.sh_238417283b8e5db23c992f966e3f106bd178f7d0.out2
-rw-r--r--test/expected/test_sql_json_func.sh_32459ba8e8bb9a1d9e63b6c67059d7f065cf4301.err0
-rw-r--r--test/expected/test_sql_json_func.sh_32459ba8e8bb9a1d9e63b6c67059d7f065cf4301.out2
-rw-r--r--test/expected/test_sql_json_func.sh_39c13797278d765c027d3581a0b6e0574f5c56eb.err0
-rw-r--r--test/expected/test_sql_json_func.sh_39c13797278d765c027d3581a0b6e0574f5c56eb.out2
-rw-r--r--test/expected/test_sql_json_func.sh_3cf4b66d40c4b1979ff14a9eccad8bd5ac48151c.err0
-rw-r--r--test/expected/test_sql_json_func.sh_3cf4b66d40c4b1979ff14a9eccad8bd5ac48151c.out2
-rw-r--r--test/expected/test_sql_json_func.sh_4192f378e320cb3f2c3c228b63ec65de92044704.err0
-rw-r--r--test/expected/test_sql_json_func.sh_4192f378e320cb3f2c3c228b63ec65de92044704.out2
-rw-r--r--test/expected/test_sql_json_func.sh_57c3aecdced547b837177ab02d3776361363e48d.err1
-rw-r--r--test/expected/test_sql_json_func.sh_57c3aecdced547b837177ab02d3776361363e48d.out0
-rw-r--r--test/expected/test_sql_json_func.sh_5b4a95677a1fc7d11f4b87d92165f56a60a65828.err0
-rw-r--r--test/expected/test_sql_json_func.sh_5b4a95677a1fc7d11f4b87d92165f56a60a65828.out2
-rw-r--r--test/expected/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.err1
-rw-r--r--test/expected/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.out0
-rw-r--r--test/expected/test_sql_json_func.sh_61417198a652aab93e9495b6e8cf3a634af175c6.err0
-rw-r--r--test/expected/test_sql_json_func.sh_61417198a652aab93e9495b6e8cf3a634af175c6.out2
-rw-r--r--test/expected/test_sql_json_func.sh_79ab816ac01c9902ddbb0f6f20392ab2f2cd6172.err0
-rw-r--r--test/expected/test_sql_json_func.sh_79ab816ac01c9902ddbb0f6f20392ab2f2cd6172.out3
-rw-r--r--test/expected/test_sql_json_func.sh_7c01aaf09078aaa3f23d127f9e03a317dca066de.err0
-rw-r--r--test/expected/test_sql_json_func.sh_7c01aaf09078aaa3f23d127f9e03a317dca066de.out2
-rw-r--r--test/expected/test_sql_json_func.sh_80c97b22084a06fd765ad22c935616c578968d07.err0
-rw-r--r--test/expected/test_sql_json_func.sh_80c97b22084a06fd765ad22c935616c578968d07.out2
-rw-r--r--test/expected/test_sql_json_func.sh_83d8615c9ce5dfab5e4373570c1b68b8608155f5.err0
-rw-r--r--test/expected/test_sql_json_func.sh_83d8615c9ce5dfab5e4373570c1b68b8608155f5.out2
-rw-r--r--test/expected/test_sql_json_func.sh_8cae9740ddfd6ba4c865fca0117b7bea3bb556e5.err0
-rw-r--r--test/expected/test_sql_json_func.sh_8cae9740ddfd6ba4c865fca0117b7bea3bb556e5.out2
-rw-r--r--test/expected/test_sql_json_func.sh_8e229f1b5fa3d3803e9db2f295a8d1a490e1b3db.err0
-rw-r--r--test/expected/test_sql_json_func.sh_8e229f1b5fa3d3803e9db2f295a8d1a490e1b3db.out2
-rw-r--r--test/expected/test_sql_json_func.sh_8e3724c90bf96dff5d8ba3cfaf4b7e2eaa9e5f66.err1
-rw-r--r--test/expected/test_sql_json_func.sh_8e3724c90bf96dff5d8ba3cfaf4b7e2eaa9e5f66.out0
-rw-r--r--test/expected/test_sql_json_func.sh_93ba3ba52b0dd2d5a3ba43bcb7c3638c05ecfe75.err0
-rw-r--r--test/expected/test_sql_json_func.sh_93ba3ba52b0dd2d5a3ba43bcb7c3638c05ecfe75.out2
-rw-r--r--test/expected/test_sql_json_func.sh_97aa53b581838f5875fe2beda8d1cb245a24f3d6.err0
-rw-r--r--test/expected/test_sql_json_func.sh_97aa53b581838f5875fe2beda8d1cb245a24f3d6.out2
-rw-r--r--test/expected/test_sql_json_func.sh_98a83bc899a78c04d1fdb390b2c1e403c35428c7.err0
-rw-r--r--test/expected/test_sql_json_func.sh_98a83bc899a78c04d1fdb390b2c1e403c35428c7.out2
-rw-r--r--test/expected/test_sql_json_func.sh_98ce02dff32d955466524bb167fa45fdf8591788.err0
-rw-r--r--test/expected/test_sql_json_func.sh_98ce02dff32d955466524bb167fa45fdf8591788.out2
-rw-r--r--test/expected/test_sql_json_func.sh_9ab4f51486d7cc99c584721bf0e50c223dac4f18.err0
-rw-r--r--test/expected/test_sql_json_func.sh_9ab4f51486d7cc99c584721bf0e50c223dac4f18.out2
-rw-r--r--test/expected/test_sql_json_func.sh_9d260ed24b28579ef1dbed25b10c42741e52b023.err0
-rw-r--r--test/expected/test_sql_json_func.sh_9d260ed24b28579ef1dbed25b10c42741e52b023.out2
-rw-r--r--test/expected/test_sql_json_func.sh_9fbfe3c93467666c45b643f3b8ba990a294c17ff.err0
-rw-r--r--test/expected/test_sql_json_func.sh_9fbfe3c93467666c45b643f3b8ba990a294c17ff.out2
-rw-r--r--test/expected/test_sql_json_func.sh_a4ffc64f89cf9917fbc918227fd3c05e54d9e8b5.err0
-rw-r--r--test/expected/test_sql_json_func.sh_a4ffc64f89cf9917fbc918227fd3c05e54d9e8b5.out2
-rw-r--r--test/expected/test_sql_json_func.sh_a5e179607645aefce14b9fd12ddef34107afe337.err0
-rw-r--r--test/expected/test_sql_json_func.sh_a5e179607645aefce14b9fd12ddef34107afe337.out2
-rw-r--r--test/expected/test_sql_json_func.sh_b2fc37822e29f7f59497a02a8968c680b545ee1d.err0
-rw-r--r--test/expected/test_sql_json_func.sh_b2fc37822e29f7f59497a02a8968c680b545ee1d.out2
-rw-r--r--test/expected/test_sql_json_func.sh_bbd979ed74b46ae1696ed7312a48a436bcf99ec0.err0
-rw-r--r--test/expected/test_sql_json_func.sh_bbd979ed74b46ae1696ed7312a48a436bcf99ec0.out2
-rw-r--r--test/expected/test_sql_json_func.sh_c1ae603d969a5b106328287523c0ddfed07146ad.err0
-rw-r--r--test/expected/test_sql_json_func.sh_c1ae603d969a5b106328287523c0ddfed07146ad.out2
-rw-r--r--test/expected/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.err1
-rw-r--r--test/expected/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.out0
-rw-r--r--test/expected/test_sql_json_func.sh_ebafb98307f307ae8d8ab6921c32929aab3a1a16.err0
-rw-r--r--test/expected/test_sql_json_func.sh_ebafb98307f307ae8d8ab6921c32929aab3a1a16.out2
-rw-r--r--test/expected/test_sql_json_func.sh_ee36fbea10a33ca106a211feb05d61ecf8e74634.err0
-rw-r--r--test/expected/test_sql_json_func.sh_ee36fbea10a33ca106a211feb05d61ecf8e74634.out2
-rw-r--r--test/expected/test_sql_json_func.sh_f1cbc70771cc75520f807261eac3a88dc2d8fe6b.err0
-rw-r--r--test/expected/test_sql_json_func.sh_f1cbc70771cc75520f807261eac3a88dc2d8fe6b.out2
-rw-r--r--test/expected/test_sql_json_func.sh_f34205b59e04f261897ad89f659595c743a18ca9.err0
-rw-r--r--test/expected/test_sql_json_func.sh_f34205b59e04f261897ad89f659595c743a18ca9.out3
-rw-r--r--test/expected/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.err4
-rw-r--r--test/expected/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.out0
-rw-r--r--test/expected/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.err0
-rw-r--r--test/expected/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.out4
-rw-r--r--test/expected/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.err0
-rw-r--r--test/expected/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.out2
-rw-r--r--test/expected/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.err0
-rw-r--r--test/expected/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.out27
-rw-r--r--test/expected/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.err0
-rw-r--r--test/expected/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.out2
-rw-r--r--test/expected/test_sql_regexp.sh_d42e1fcfe6d42394f79da84be2d37e62c4c0ea63.err9
-rw-r--r--test/expected/test_sql_regexp.sh_d42e1fcfe6d42394f79da84be2d37e62c4c0ea63.out0
-rw-r--r--test/expected/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.err0
-rw-r--r--test/expected/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.out2
-rw-r--r--test/expected/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.err0
-rw-r--r--test/expected/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.out2
-rw-r--r--test/expected/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.err0
-rw-r--r--test/expected/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.out2
-rw-r--r--test/expected/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.err0
-rw-r--r--test/expected/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.out12
-rw-r--r--test/expected/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.err0
-rw-r--r--test/expected/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.out4
-rw-r--r--test/expected/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.err0
-rw-r--r--test/expected/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.out24
-rw-r--r--test/expected/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.err0
-rw-r--r--test/expected/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.out6
-rw-r--r--test/expected/test_sql_str_func.sh_005b9365ac99596e539f47c9fe432668c209b21f.err0
-rw-r--r--test/expected/test_sql_str_func.sh_005b9365ac99596e539f47c9fe432668c209b21f.out2
-rw-r--r--test/expected/test_sql_str_func.sh_04712488fe50554eb36d3ced80f9a033602f3daa.err0
-rw-r--r--test/expected/test_sql_str_func.sh_04712488fe50554eb36d3ced80f9a033602f3daa.out2
-rw-r--r--test/expected/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.err0
-rw-r--r--test/expected/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.out2
-rw-r--r--test/expected/test_sql_str_func.sh_11bcc5d32eabbedb6974f160dace9ef1ef0009e9.err0
-rw-r--r--test/expected/test_sql_str_func.sh_11bcc5d32eabbedb6974f160dace9ef1ef0009e9.out64
-rw-r--r--test/expected/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.err0
-rw-r--r--test/expected/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.out198
-rw-r--r--test/expected/test_sql_str_func.sh_129e58679e72f3cc5864812026e49a7917baf3d0.err0
-rw-r--r--test/expected/test_sql_str_func.sh_129e58679e72f3cc5864812026e49a7917baf3d0.out2
-rw-r--r--test/expected/test_sql_str_func.sh_151a0fd71ef6837c8cbd8a67e315019b5812b079.err0
-rw-r--r--test/expected/test_sql_str_func.sh_151a0fd71ef6837c8cbd8a67e315019b5812b079.out8
-rw-r--r--test/expected/test_sql_str_func.sh_1e7362ac3d9690b1b2cfbd320b6129c46ecfbb8a.err1
-rw-r--r--test/expected/test_sql_str_func.sh_1e7362ac3d9690b1b2cfbd320b6129c46ecfbb8a.out0
-rw-r--r--test/expected/test_sql_str_func.sh_211c5428db0590795072c31cb116ef35281e02b5.err0
-rw-r--r--test/expected/test_sql_str_func.sh_211c5428db0590795072c31cb116ef35281e02b5.out2
-rw-r--r--test/expected/test_sql_str_func.sh_2f189f0785bb81a1298db35e9e166983b633c73f.err0
-rw-r--r--test/expected/test_sql_str_func.sh_2f189f0785bb81a1298db35e9e166983b633c73f.out8
-rw-r--r--test/expected/test_sql_str_func.sh_30f65162174b886130b94a5dd1f094e7f09debed.err0
-rw-r--r--test/expected/test_sql_str_func.sh_30f65162174b886130b94a5dd1f094e7f09debed.out2
-rw-r--r--test/expected/test_sql_str_func.sh_352434d199f7b493668c9f2774472eb69ef0d9f0.err0
-rw-r--r--test/expected/test_sql_str_func.sh_352434d199f7b493668c9f2774472eb69ef0d9f0.out2
-rw-r--r--test/expected/test_sql_str_func.sh_36fc9005464f1106f969559e640d9fa36d5fadad.err0
-rw-r--r--test/expected/test_sql_str_func.sh_36fc9005464f1106f969559e640d9fa36d5fadad.out2
-rw-r--r--test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.err1
-rw-r--r--test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.out0
-rw-r--r--test/expected/test_sql_str_func.sh_3de72fe5c1751dd212a1cd45cf2caa7f3b52bced.err0
-rw-r--r--test/expected/test_sql_str_func.sh_3de72fe5c1751dd212a1cd45cf2caa7f3b52bced.out2
-rw-r--r--test/expected/test_sql_str_func.sh_4b402274da152135c6c99456b693e1ecabca0256.err0
-rw-r--r--test/expected/test_sql_str_func.sh_4b402274da152135c6c99456b693e1ecabca0256.out2
-rw-r--r--test/expected/test_sql_str_func.sh_51055e40d709332ee772ba5719039314bbf5e411.err0
-rw-r--r--test/expected/test_sql_str_func.sh_51055e40d709332ee772ba5719039314bbf5e411.out2
-rw-r--r--test/expected/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.err0
-rw-r--r--test/expected/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.out2
-rw-r--r--test/expected/test_sql_str_func.sh_5203db1a4a81e43a693f339fd26e1ed635da9d5a.err0
-rw-r--r--test/expected/test_sql_str_func.sh_5203db1a4a81e43a693f339fd26e1ed635da9d5a.out2
-rw-r--r--test/expected/test_sql_str_func.sh_5abe3717393fba14ec510a37b4b94fedc67aae8e.err0
-rw-r--r--test/expected/test_sql_str_func.sh_5abe3717393fba14ec510a37b4b94fedc67aae8e.out2
-rw-r--r--test/expected/test_sql_str_func.sh_5e436fbd4efb140600999c5208886a5a57b8a30e.err0
-rw-r--r--test/expected/test_sql_str_func.sh_5e436fbd4efb140600999c5208886a5a57b8a30e.out24
-rw-r--r--test/expected/test_sql_str_func.sh_5f9979fa5ce7b76efe714bb27ffbe9f5927ae941.err0
-rw-r--r--test/expected/test_sql_str_func.sh_5f9979fa5ce7b76efe714bb27ffbe9f5927ae941.out2
-rw-r--r--test/expected/test_sql_str_func.sh_60a005a9f0d44ad022b5554415319933d5743c51.err0
-rw-r--r--test/expected/test_sql_str_func.sh_60a005a9f0d44ad022b5554415319933d5743c51.out3
-rw-r--r--test/expected/test_sql_str_func.sh_660288b48d9b30244621d873944938f7ef043976.err0
-rw-r--r--test/expected/test_sql_str_func.sh_660288b48d9b30244621d873944938f7ef043976.out2
-rw-r--r--test/expected/test_sql_str_func.sh_6607c0dd8baff16930eb3e0daf6354af5b50052b.err0
-rw-r--r--test/expected/test_sql_str_func.sh_6607c0dd8baff16930eb3e0daf6354af5b50052b.out2
-rw-r--r--test/expected/test_sql_str_func.sh_69f5d49e62da48e188bd9d6af4bd3adeb21eb7d1.err0
-rw-r--r--test/expected/test_sql_str_func.sh_69f5d49e62da48e188bd9d6af4bd3adeb21eb7d1.out6
-rw-r--r--test/expected/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.err0
-rw-r--r--test/expected/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.out2
-rw-r--r--test/expected/test_sql_str_func.sh_71f37db33504b2c08a7a3323c482556f53d88100.err0
-rw-r--r--test/expected/test_sql_str_func.sh_71f37db33504b2c08a7a3323c482556f53d88100.out16
-rw-r--r--test/expected/test_sql_str_func.sh_77fc174faeec1eda687a9373dbdbdd1aaef56e20.err0
-rw-r--r--test/expected/test_sql_str_func.sh_77fc174faeec1eda687a9373dbdbdd1aaef56e20.out3
-rw-r--r--test/expected/test_sql_str_func.sh_790da4aab5af901feeff5426790876eb91b967cb.err1
-rw-r--r--test/expected/test_sql_str_func.sh_790da4aab5af901feeff5426790876eb91b967cb.out0
-rw-r--r--test/expected/test_sql_str_func.sh_7a544cd702579c1fab35870428788ad763cf1143.err0
-rw-r--r--test/expected/test_sql_str_func.sh_7a544cd702579c1fab35870428788ad763cf1143.out2
-rw-r--r--test/expected/test_sql_str_func.sh_7b6e7c26e8a80459fef55d56156d6ff93c00bd49.err0
-rw-r--r--test/expected/test_sql_str_func.sh_7b6e7c26e8a80459fef55d56156d6ff93c00bd49.out2
-rw-r--r--test/expected/test_sql_str_func.sh_7c1e7604ac050e7047201638dca0a6b0fcfd8bdf.err0
-rw-r--r--test/expected/test_sql_str_func.sh_7c1e7604ac050e7047201638dca0a6b0fcfd8bdf.out2
-rw-r--r--test/expected/test_sql_str_func.sh_7f751009d0db15fc97f9113c5c84db05ff1de9c3.err0
-rw-r--r--test/expected/test_sql_str_func.sh_7f751009d0db15fc97f9113c5c84db05ff1de9c3.out2
-rw-r--r--test/expected/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.err0
-rw-r--r--test/expected/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.out2
-rw-r--r--test/expected/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.err1
-rw-r--r--test/expected/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.out0
-rw-r--r--test/expected/test_sql_str_func.sh_836e3f721a0f945ad27e7aa241121ba739aab618.err0
-rw-r--r--test/expected/test_sql_str_func.sh_836e3f721a0f945ad27e7aa241121ba739aab618.out2
-rw-r--r--test/expected/test_sql_str_func.sh_838e9bc7873b2b238157ba0358e0dfd6a01d837d.err0
-rw-r--r--test/expected/test_sql_str_func.sh_838e9bc7873b2b238157ba0358e0dfd6a01d837d.out2
-rw-r--r--test/expected/test_sql_str_func.sh_84e77dedec887c5e2433dbc5b130000cd88963bd.err0
-rw-r--r--test/expected/test_sql_str_func.sh_84e77dedec887c5e2433dbc5b130000cd88963bd.out2
-rw-r--r--test/expected/test_sql_str_func.sh_887afe94962d958aca2e03f7873d58ca93e190b5.err1
-rw-r--r--test/expected/test_sql_str_func.sh_887afe94962d958aca2e03f7873d58ca93e190b5.out0
-rw-r--r--test/expected/test_sql_str_func.sh_8c9ef83431ea75050fd16824075bf72056cf5f53.err0
-rw-r--r--test/expected/test_sql_str_func.sh_8c9ef83431ea75050fd16824075bf72056cf5f53.out2
-rw-r--r--test/expected/test_sql_str_func.sh_8cef54f0617960320b5d3615068eb27333dcf6a3.err0
-rw-r--r--test/expected/test_sql_str_func.sh_8cef54f0617960320b5d3615068eb27333dcf6a3.out2
-rw-r--r--test/expected/test_sql_str_func.sh_8f4f0ed74c4dc6b821e02a44552b694614cd9353.err0
-rw-r--r--test/expected/test_sql_str_func.sh_8f4f0ed74c4dc6b821e02a44552b694614cd9353.out2
-rw-r--r--test/expected/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.err0
-rw-r--r--test/expected/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.out2
-rw-r--r--test/expected/test_sql_str_func.sh_a4d84a0082a7df34c95c2e6e070bbf6effaa5594.err0
-rw-r--r--test/expected/test_sql_str_func.sh_a4d84a0082a7df34c95c2e6e070bbf6effaa5594.out2
-rw-r--r--test/expected/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.err1
-rw-r--r--test/expected/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.out0
-rw-r--r--test/expected/test_sql_str_func.sh_a65d2fb2f841578619528ca10168ca4d650218e9.err0
-rw-r--r--test/expected/test_sql_str_func.sh_a65d2fb2f841578619528ca10168ca4d650218e9.out3
-rw-r--r--test/expected/test_sql_str_func.sh_ac7ecdda0fcc4279a4694291edaa2f1411f5262e.err0
-rw-r--r--test/expected/test_sql_str_func.sh_ac7ecdda0fcc4279a4694291edaa2f1411f5262e.out2
-rw-r--r--test/expected/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.err0
-rw-r--r--test/expected/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.out2
-rw-r--r--test/expected/test_sql_str_func.sh_b0e5bf23bbbc0defa8bb26817782c9d46a778ad8.err0
-rw-r--r--test/expected/test_sql_str_func.sh_b0e5bf23bbbc0defa8bb26817782c9d46a778ad8.out16
-rw-r--r--test/expected/test_sql_str_func.sh_b2aafbcaa7befe426d3f9df71c24f16fdc9d2856.err0
-rw-r--r--test/expected/test_sql_str_func.sh_b2aafbcaa7befe426d3f9df71c24f16fdc9d2856.out3
-rw-r--r--test/expected/test_sql_str_func.sh_b81b27abfafbd357d41c407428d41ae0f4bb75e2.err0
-rw-r--r--test/expected/test_sql_str_func.sh_b81b27abfafbd357d41c407428d41ae0f4bb75e2.out2
-rw-r--r--test/expected/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.err0
-rw-r--r--test/expected/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.out2
-rw-r--r--test/expected/test_sql_str_func.sh_bfb7088916412360f77683009058b0747784630a.err0
-rw-r--r--test/expected/test_sql_str_func.sh_bfb7088916412360f77683009058b0747784630a.out2
-rw-r--r--test/expected/test_sql_str_func.sh_bfe8b09e23389af0ef14359b66d68228d0285185.err1
-rw-r--r--test/expected/test_sql_str_func.sh_bfe8b09e23389af0ef14359b66d68228d0285185.out0
-rw-r--r--test/expected/test_sql_str_func.sh_c26269b10b9b9e8485aa97c2be2afb2cc3ee910d.err0
-rw-r--r--test/expected/test_sql_str_func.sh_c26269b10b9b9e8485aa97c2be2afb2cc3ee910d.out2
-rw-r--r--test/expected/test_sql_str_func.sh_c9e2f41431bef879364dc37a472ab01f64d89f89.err0
-rw-r--r--test/expected/test_sql_str_func.sh_c9e2f41431bef879364dc37a472ab01f64d89f89.out2
-rw-r--r--test/expected/test_sql_str_func.sh_cc53348c585ee71a7456157ad6b125689813bafe.err0
-rw-r--r--test/expected/test_sql_str_func.sh_cc53348c585ee71a7456157ad6b125689813bafe.out2
-rw-r--r--test/expected/test_sql_str_func.sh_ce9db1dbc2e5fee87247135d17787ff3af014d77.err0
-rw-r--r--test/expected/test_sql_str_func.sh_ce9db1dbc2e5fee87247135d17787ff3af014d77.out2
-rw-r--r--test/expected/test_sql_str_func.sh_d3367527118052081a541a660b091f6f495b1c0d.err0
-rw-r--r--test/expected/test_sql_str_func.sh_d3367527118052081a541a660b091f6f495b1c0d.out0
-rw-r--r--test/expected/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.err1
-rw-r--r--test/expected/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.out0
-rw-r--r--test/expected/test_sql_str_func.sh_d4e805ff08d4ccf62865dbf8db8d526f7ce02f37.err0
-rw-r--r--test/expected/test_sql_str_func.sh_d4e805ff08d4ccf62865dbf8db8d526f7ce02f37.out2
-rw-r--r--test/expected/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.err0
-rw-r--r--test/expected/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.out47
-rw-r--r--test/expected/test_sql_str_func.sh_d8d4cde8bbc98175069be579ff5634de43880b8c.err0
-rw-r--r--test/expected/test_sql_str_func.sh_d8d4cde8bbc98175069be579ff5634de43880b8c.out2
-rw-r--r--test/expected/test_sql_str_func.sh_e68167bf5edc7a7b1defd06bdfb694ffa8b00df2.err0
-rw-r--r--test/expected/test_sql_str_func.sh_e68167bf5edc7a7b1defd06bdfb694ffa8b00df2.out0
-rw-r--r--test/expected/test_sql_str_func.sh_ec939e82da809965c61f1c00f68d7afaa4a88382.err0
-rw-r--r--test/expected/test_sql_str_func.sh_ec939e82da809965c61f1c00f68d7afaa4a88382.out2
-rw-r--r--test/expected/test_sql_time_func.sh_028e99419eb1ac80b03b36148ef1d4ae1c38c44c.err0
-rw-r--r--test/expected/test_sql_time_func.sh_028e99419eb1ac80b03b36148ef1d4ae1c38c44c.out2
-rw-r--r--test/expected/test_sql_time_func.sh_123c85ff1178743f5cb78efeaf98b637bcbe55ff.err0
-rw-r--r--test/expected/test_sql_time_func.sh_123c85ff1178743f5cb78efeaf98b637bcbe55ff.out2
-rw-r--r--test/expected/test_sql_time_func.sh_14737ee9597b7d22519d23fbe34c0eb7d6c09ff2.err0
-rw-r--r--test/expected/test_sql_time_func.sh_14737ee9597b7d22519d23fbe34c0eb7d6c09ff2.out2
-rw-r--r--test/expected/test_sql_time_func.sh_1fbeb1ba69a95284eb1d4d052f5068ede7968704.err0
-rw-r--r--test/expected/test_sql_time_func.sh_1fbeb1ba69a95284eb1d4d052f5068ede7968704.out2
-rw-r--r--test/expected/test_sql_time_func.sh_20477acc218c96f1385dc97e4d28c80a05c93709.err0
-rw-r--r--test/expected/test_sql_time_func.sh_20477acc218c96f1385dc97e4d28c80a05c93709.out2
-rw-r--r--test/expected/test_sql_time_func.sh_243454526f6b5e19485db771b4932ddffd6f83a4.err0
-rw-r--r--test/expected/test_sql_time_func.sh_243454526f6b5e19485db771b4932ddffd6f83a4.out2
-rw-r--r--test/expected/test_sql_time_func.sh_28638a132caae65fd89a68459d1b4af0000b8aef.err0
-rw-r--r--test/expected/test_sql_time_func.sh_28638a132caae65fd89a68459d1b4af0000b8aef.out2
-rw-r--r--test/expected/test_sql_time_func.sh_3b551281347a8144c84f00ade2664db9ac4aacab.err0
-rw-r--r--test/expected/test_sql_time_func.sh_3b551281347a8144c84f00ade2664db9ac4aacab.out2
-rw-r--r--test/expected/test_sql_time_func.sh_4035ee76938269e9247f9a696927a9ac18cce80a.err0
-rw-r--r--test/expected/test_sql_time_func.sh_4035ee76938269e9247f9a696927a9ac18cce80a.out2
-rw-r--r--test/expected/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.err1
-rw-r--r--test/expected/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.out0
-rw-r--r--test/expected/test_sql_time_func.sh_4b96fe71bc2d18955e3625b765a6095ab1f7a75d.err0
-rw-r--r--test/expected/test_sql_time_func.sh_4b96fe71bc2d18955e3625b765a6095ab1f7a75d.out2
-rw-r--r--test/expected/test_sql_time_func.sh_53b76b094e47691b5bca106142ee470e82e8e420.err0
-rw-r--r--test/expected/test_sql_time_func.sh_53b76b094e47691b5bca106142ee470e82e8e420.out2
-rw-r--r--test/expected/test_sql_time_func.sh_6288a9e690d381602b2be5665cc1cd3552733bc2.err0
-rw-r--r--test/expected/test_sql_time_func.sh_6288a9e690d381602b2be5665cc1cd3552733bc2.out2
-rw-r--r--test/expected/test_sql_time_func.sh_652bbd00b5159e22d94970ab1e882997d14b5777.err0
-rw-r--r--test/expected/test_sql_time_func.sh_652bbd00b5159e22d94970ab1e882997d14b5777.out2
-rw-r--r--test/expected/test_sql_time_func.sh_6832a58259168622af8b3370b0c89534f98f3f9f.err1
-rw-r--r--test/expected/test_sql_time_func.sh_6832a58259168622af8b3370b0c89534f98f3f9f.out0
-rw-r--r--test/expected/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.err1
-rw-r--r--test/expected/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.out0
-rw-r--r--test/expected/test_sql_time_func.sh_7797302b63d73234c9ec9f0405c7c0a748daf8e9.err0
-rw-r--r--test/expected/test_sql_time_func.sh_7797302b63d73234c9ec9f0405c7c0a748daf8e9.out2
-rw-r--r--test/expected/test_sql_time_func.sh_9569ab40cb2e51c60f818a6c2729c60d86565e7e.err0
-rw-r--r--test/expected/test_sql_time_func.sh_9569ab40cb2e51c60f818a6c2729c60d86565e7e.out2
-rw-r--r--test/expected/test_sql_time_func.sh_9e649c4bc10f4d178519983358f7092e9c5dfe71.err0
-rw-r--r--test/expected/test_sql_time_func.sh_9e649c4bc10f4d178519983358f7092e9c5dfe71.out2
-rw-r--r--test/expected/test_sql_time_func.sh_b0257ced663fc444801a5e6cba89c3053acca11e.err0
-rw-r--r--test/expected/test_sql_time_func.sh_b0257ced663fc444801a5e6cba89c3053acca11e.out2
-rw-r--r--test/expected/test_sql_time_func.sh_b5f9ec3ea8b4551fd40017398d74c524fb54ebc9.err0
-rw-r--r--test/expected/test_sql_time_func.sh_b5f9ec3ea8b4551fd40017398d74c524fb54ebc9.out2
-rw-r--r--test/expected/test_sql_time_func.sh_dbe786c096d5a7a5e1d05311b929f1427d8bac79.err0
-rw-r--r--test/expected/test_sql_time_func.sh_dbe786c096d5a7a5e1d05311b929f1427d8bac79.out2
-rw-r--r--test/expected/test_sql_time_func.sh_f3b1ea49779117bf45f85ad5615fdc5e89193db6.err0
-rw-r--r--test/expected/test_sql_time_func.sh_f3b1ea49779117bf45f85ad5615fdc5e89193db6.out2
-rw-r--r--test/expected/test_sql_views_vtab.sh_28e23f4e98b1acd6478e39844fd9306b444550c3.err4
-rw-r--r--test/expected/test_sql_views_vtab.sh_28e23f4e98b1acd6478e39844fd9306b444550c3.out0
-rw-r--r--test/expected/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.err0
-rw-r--r--test/expected/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.out19
-rw-r--r--test/expected/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.err0
-rw-r--r--test/expected/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.out1
-rw-r--r--test/expected/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.err4
-rw-r--r--test/expected/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.out3
-rw-r--r--test/expected/test_sql_views_vtab.sh_662b5f9b17aa69a8e3aa9a18acb30d9acf6e2837.err0
-rw-r--r--test/expected/test_sql_views_vtab.sh_662b5f9b17aa69a8e3aa9a18acb30d9acf6e2837.out1
-rw-r--r--test/expected/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.err0
-rw-r--r--test/expected/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.out2
-rw-r--r--test/expected/test_sql_views_vtab.sh_764ea85863d4f0ea3b7cb40850ac7c8fde682d57.err4
-rw-r--r--test/expected/test_sql_views_vtab.sh_764ea85863d4f0ea3b7cb40850ac7c8fde682d57.out0
-rw-r--r--test/expected/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.err4
-rw-r--r--test/expected/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.out2
-rw-r--r--test/expected/test_sql_views_vtab.sh_81ffd4ed3f62228494a966512791202cea7e3b57.err0
-rw-r--r--test/expected/test_sql_views_vtab.sh_81ffd4ed3f62228494a966512791202cea7e3b57.out2
-rw-r--r--test/expected/test_sql_views_vtab.sh_87f53d441e22c1d27c27eaa6003c83da1207c063.err4
-rw-r--r--test/expected/test_sql_views_vtab.sh_87f53d441e22c1d27c27eaa6003c83da1207c063.out0
-rw-r--r--test/expected/test_sql_views_vtab.sh_977cdf5d396522194d6b9e945169ff8073b4296b.err0
-rw-r--r--test/expected/test_sql_views_vtab.sh_977cdf5d396522194d6b9e945169ff8073b4296b.out2
-rw-r--r--test/expected/test_sql_views_vtab.sh_9a5be90921256e90428c77753eca5ea0d31bd910.err0
-rw-r--r--test/expected/test_sql_views_vtab.sh_9a5be90921256e90428c77753eca5ea0d31bd910.out2
-rw-r--r--test/expected/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.err4
-rw-r--r--test/expected/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.out2
-rw-r--r--test/expected/test_sql_views_vtab.sh_ac1f6e9a88608ef8939f9c2f7061a25a86742d46.err4
-rw-r--r--test/expected/test_sql_views_vtab.sh_ac1f6e9a88608ef8939f9c2f7061a25a86742d46.out0
-rw-r--r--test/expected/test_sql_views_vtab.sh_ade121f29bedea0d1a54452cc994b2302ad9dabb.err4
-rw-r--r--test/expected/test_sql_views_vtab.sh_ade121f29bedea0d1a54452cc994b2302ad9dabb.out0
-rw-r--r--test/expected/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.err4
-rw-r--r--test/expected/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.out0
-rw-r--r--test/expected/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.err0
-rw-r--r--test/expected/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.out1
-rw-r--r--test/expected/test_sql_views_vtab.sh_e036fabdc6c15f65a374b95c9922212670d494ee.err0
-rw-r--r--test/expected/test_sql_views_vtab.sh_e036fabdc6c15f65a374b95c9922212670d494ee.out1
-rw-r--r--test/expected/test_sql_views_vtab.sh_ec4623bd63ff353f50db44da1231e46a1a4f1824.err0
-rw-r--r--test/expected/test_sql_views_vtab.sh_ec4623bd63ff353f50db44da1231e46a1a4f1824.out3
-rw-r--r--test/expected/test_sql_views_vtab.sh_f7476c76ea51cf479a6a79b037e0cb59871b629c.err4
-rw-r--r--test/expected/test_sql_views_vtab.sh_f7476c76ea51cf479a6a79b037e0cb59871b629c.out0
-rw-r--r--test/expected/test_sql_views_vtab.sh_f8340cb4c62aabd839ea09235b6ebe41b2bb48f4.err4
-rw-r--r--test/expected/test_sql_views_vtab.sh_f8340cb4c62aabd839ea09235b6ebe41b2bb48f4.out0
-rw-r--r--test/expected/test_sql_xml_func.sh_46dfa23e2effabf3fa150c4b871fd8d22b1c834d.err0
-rw-r--r--test/expected/test_sql_xml_func.sh_46dfa23e2effabf3fa150c4b871fd8d22b1c834d.out0
-rw-r--r--test/expected/test_sql_xml_func.sh_4effabf11b59580e5f0727199eb74fba049c0cda.err0
-rw-r--r--test/expected/test_sql_xml_func.sh_4effabf11b59580e5f0727199eb74fba049c0cda.out6
-rw-r--r--test/expected/test_sql_xml_func.sh_8912b59d5b515ab1373a3d9bc635ebabacd01dfd.err0
-rw-r--r--test/expected/test_sql_xml_func.sh_8912b59d5b515ab1373a3d9bc635ebabacd01dfd.out6
-rw-r--r--test/expected/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.err1
-rw-r--r--test/expected/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.out0
-rw-r--r--test/expected/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.err1
-rw-r--r--test/expected/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.out0
-rw-r--r--test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.err4
-rw-r--r--test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.out0
-rw-r--r--test/expected/test_sql_yaml_func.sh_dc189d02e8979b7ed245d5d750f68b9965984699.err4
-rw-r--r--test/expected/test_sql_yaml_func.sh_dc189d02e8979b7ed245d5d750f68b9965984699.out0
-rw-r--r--test/expected/test_tailer.sh_12f539e535df04364316699f9edeac461aa9f9de.err3
-rw-r--r--test/expected/test_tailer.sh_12f539e535df04364316699f9edeac461aa9f9de.out8
-rw-r--r--test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.err2
-rw-r--r--test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.out0
-rw-r--r--test/expected/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.err0
-rw-r--r--test/expected/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.out178
-rw-r--r--test/expected/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.err0
-rw-r--r--test/expected/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.out149
-rw-r--r--test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.err0
-rw-r--r--test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.out111
-rw-r--r--test/expected/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.err0
-rw-r--r--test/expected/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.out111
-rw-r--r--test/expected/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.err0
-rw-r--r--test/expected/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.out2
-rw-r--r--test/expected/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.err0
-rw-r--r--test/expected/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.out4
-rw-r--r--test/expected/test_text_file.sh_ac872aadda29b9a824361a2c711d62ec1c75d40f.err0
-rw-r--r--test/expected/test_text_file.sh_ac872aadda29b9a824361a2c711d62ec1c75d40f.out74
-rw-r--r--test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.err0
-rw-r--r--test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.out159
-rw-r--r--test/expected/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.err0
-rw-r--r--test/expected/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.out58
-rw-r--r--test/expected/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.err0
-rw-r--r--test/expected/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.out149
-rw-r--r--test/expected_help.txt4013
1080 files changed, 13825 insertions, 0 deletions
diff --git a/test/expected/expected.am b/test/expected/expected.am
new file mode 100644
index 0000000..1280cda
--- /dev/null
+++ b/test/expected/expected.am
@@ -0,0 +1,1005 @@
+
+EXPECTED_FILES = \
+ $(srcdir)/%reldir%/test_cli.sh_17a68b798354f9a6cdfab372006caeb74038d15c.err \
+ $(srcdir)/%reldir%/test_cli.sh_17a68b798354f9a6cdfab372006caeb74038d15c.out \
+ $(srcdir)/%reldir%/test_cli.sh_5524542b1a6954ff9741155101497270a2f0c557.err \
+ $(srcdir)/%reldir%/test_cli.sh_5524542b1a6954ff9741155101497270a2f0c557.out \
+ $(srcdir)/%reldir%/test_cli.sh_97e19b9ff3775d84074455a2e8993a0611b1c269.err \
+ $(srcdir)/%reldir%/test_cli.sh_97e19b9ff3775d84074455a2e8993a0611b1c269.out \
+ $(srcdir)/%reldir%/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.err \
+ $(srcdir)/%reldir%/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.out \
+ $(srcdir)/%reldir%/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.err \
+ $(srcdir)/%reldir%/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.out \
+ $(srcdir)/%reldir%/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.err \
+ $(srcdir)/%reldir%/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.out \
+ $(srcdir)/%reldir%/test_cmds.sh_0b1e4b1523dfca71927b1fe721c74490c51361d1.err \
+ $(srcdir)/%reldir%/test_cmds.sh_0b1e4b1523dfca71927b1fe721c74490c51361d1.out \
+ $(srcdir)/%reldir%/test_cmds.sh_0b41fe57743ba0be088037d9ba29bc465e7c9bf9.err \
+ $(srcdir)/%reldir%/test_cmds.sh_0b41fe57743ba0be088037d9ba29bc465e7c9bf9.out \
+ $(srcdir)/%reldir%/test_cmds.sh_0f0ab532d8d845f8201af65bf5f6fc994e21a8aa.err \
+ $(srcdir)/%reldir%/test_cmds.sh_0f0ab532d8d845f8201af65bf5f6fc994e21a8aa.out \
+ $(srcdir)/%reldir%/test_cmds.sh_109a44ac6a8f1be2736c8e9c47aeed187e0581ee.err \
+ $(srcdir)/%reldir%/test_cmds.sh_109a44ac6a8f1be2736c8e9c47aeed187e0581ee.out \
+ $(srcdir)/%reldir%/test_cmds.sh_12856706bfb4a8e2686098dd2644a7989d370b02.err \
+ $(srcdir)/%reldir%/test_cmds.sh_12856706bfb4a8e2686098dd2644a7989d370b02.out \
+ $(srcdir)/%reldir%/test_cmds.sh_12b4cb9bd6586f9694100db76734b19a75158eab.err \
+ $(srcdir)/%reldir%/test_cmds.sh_12b4cb9bd6586f9694100db76734b19a75158eab.out \
+ $(srcdir)/%reldir%/test_cmds.sh_145126309709179759926289caf729703ef6e1c6.err \
+ $(srcdir)/%reldir%/test_cmds.sh_145126309709179759926289caf729703ef6e1c6.out \
+ $(srcdir)/%reldir%/test_cmds.sh_148007d2626b3c92d00ac31639b6918b1fc4aa60.err \
+ $(srcdir)/%reldir%/test_cmds.sh_148007d2626b3c92d00ac31639b6918b1fc4aa60.out \
+ $(srcdir)/%reldir%/test_cmds.sh_1cab7d240cf85ff2c3538f5a06af141b01bc83ad.err \
+ $(srcdir)/%reldir%/test_cmds.sh_1cab7d240cf85ff2c3538f5a06af141b01bc83ad.out \
+ $(srcdir)/%reldir%/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.err \
+ $(srcdir)/%reldir%/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.out \
+ $(srcdir)/%reldir%/test_cmds.sh_1e1c8492b295913ce5afcd104cde0ec4ca1dcdac.err \
+ $(srcdir)/%reldir%/test_cmds.sh_1e1c8492b295913ce5afcd104cde0ec4ca1dcdac.out \
+ $(srcdir)/%reldir%/test_cmds.sh_1f53f5b16c7c5aa695ed2e6427d822a1b940fcf4.err \
+ $(srcdir)/%reldir%/test_cmds.sh_1f53f5b16c7c5aa695ed2e6427d822a1b940fcf4.out \
+ $(srcdir)/%reldir%/test_cmds.sh_22577861cb0921a7e7f3d1af6485938f4930ba7b.err \
+ $(srcdir)/%reldir%/test_cmds.sh_22577861cb0921a7e7f3d1af6485938f4930ba7b.out \
+ $(srcdir)/%reldir%/test_cmds.sh_2339d09953b6937981d8a448000c3fdc2837f8c4.err \
+ $(srcdir)/%reldir%/test_cmds.sh_2339d09953b6937981d8a448000c3fdc2837f8c4.out \
+ $(srcdir)/%reldir%/test_cmds.sh_2539ff9c4dbed93df3f0408ccc5fd81df34d1193.err \
+ $(srcdir)/%reldir%/test_cmds.sh_2539ff9c4dbed93df3f0408ccc5fd81df34d1193.out \
+ $(srcdir)/%reldir%/test_cmds.sh_29f0c808f4e93c6ef3890e6b793bee274a5b36ca.err \
+ $(srcdir)/%reldir%/test_cmds.sh_29f0c808f4e93c6ef3890e6b793bee274a5b36ca.out \
+ $(srcdir)/%reldir%/test_cmds.sh_2a449c0a43e895e85c8b1c9547f32d7b5b4f84f6.err \
+ $(srcdir)/%reldir%/test_cmds.sh_2a449c0a43e895e85c8b1c9547f32d7b5b4f84f6.out \
+ $(srcdir)/%reldir%/test_cmds.sh_2a535de164de4c060d2bff34aa7cc75ac7cac2c2.err \
+ $(srcdir)/%reldir%/test_cmds.sh_2a535de164de4c060d2bff34aa7cc75ac7cac2c2.out \
+ $(srcdir)/%reldir%/test_cmds.sh_2cd167954a3be3e130e5f9601b72794a856cef92.err \
+ $(srcdir)/%reldir%/test_cmds.sh_2cd167954a3be3e130e5f9601b72794a856cef92.out \
+ $(srcdir)/%reldir%/test_cmds.sh_2de9ec294e2f533d13e04c70d9525f8b58d47bb2.err \
+ $(srcdir)/%reldir%/test_cmds.sh_2de9ec294e2f533d13e04c70d9525f8b58d47bb2.out \
+ $(srcdir)/%reldir%/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.err \
+ $(srcdir)/%reldir%/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.out \
+ $(srcdir)/%reldir%/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.err \
+ $(srcdir)/%reldir%/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.out \
+ $(srcdir)/%reldir%/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.err \
+ $(srcdir)/%reldir%/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.out \
+ $(srcdir)/%reldir%/test_cmds.sh_305b1dfdfe785b945df4220aad6671ae1d364f55.err \
+ $(srcdir)/%reldir%/test_cmds.sh_305b1dfdfe785b945df4220aad6671ae1d364f55.out \
+ $(srcdir)/%reldir%/test_cmds.sh_3429080ed14d01c6a887900186f37750df0d5ff0.err \
+ $(srcdir)/%reldir%/test_cmds.sh_3429080ed14d01c6a887900186f37750df0d5ff0.out \
+ $(srcdir)/%reldir%/test_cmds.sh_34a6bcaa2877471b8ea718374101fa9ce3b78235.err \
+ $(srcdir)/%reldir%/test_cmds.sh_34a6bcaa2877471b8ea718374101fa9ce3b78235.out \
+ $(srcdir)/%reldir%/test_cmds.sh_35b0dd8a030396742bc5acfde7715fb19f312f29.err \
+ $(srcdir)/%reldir%/test_cmds.sh_35b0dd8a030396742bc5acfde7715fb19f312f29.out \
+ $(srcdir)/%reldir%/test_cmds.sh_36800217930a6a30e68c4efb20f6959c4f71aeb0.err \
+ $(srcdir)/%reldir%/test_cmds.sh_36800217930a6a30e68c4efb20f6959c4f71aeb0.out \
+ $(srcdir)/%reldir%/test_cmds.sh_38fa2a95b703d4ce12e82882eca1938264822690.err \
+ $(srcdir)/%reldir%/test_cmds.sh_38fa2a95b703d4ce12e82882eca1938264822690.out \
+ $(srcdir)/%reldir%/test_cmds.sh_3b20a298e2c059d7f6045cbc0c07ca3db3917695.err \
+ $(srcdir)/%reldir%/test_cmds.sh_3b20a298e2c059d7f6045cbc0c07ca3db3917695.out \
+ $(srcdir)/%reldir%/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.err \
+ $(srcdir)/%reldir%/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.out \
+ $(srcdir)/%reldir%/test_cmds.sh_4b2d91b19008d5b775090e3ef87c111f9e603b15.err \
+ $(srcdir)/%reldir%/test_cmds.sh_4b2d91b19008d5b775090e3ef87c111f9e603b15.out \
+ $(srcdir)/%reldir%/test_cmds.sh_4dbe20c11056a07d2c7efb5ed15903050d628216.err \
+ $(srcdir)/%reldir%/test_cmds.sh_4dbe20c11056a07d2c7efb5ed15903050d628216.out \
+ $(srcdir)/%reldir%/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.err \
+ $(srcdir)/%reldir%/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.out \
+ $(srcdir)/%reldir%/test_cmds.sh_512872aebaae73ca4f33fa93acb2f4e3b018f8b4.err \
+ $(srcdir)/%reldir%/test_cmds.sh_512872aebaae73ca4f33fa93acb2f4e3b018f8b4.out \
+ $(srcdir)/%reldir%/test_cmds.sh_53a9686102f69b07b034df291f554a00b265ed20.err \
+ $(srcdir)/%reldir%/test_cmds.sh_53a9686102f69b07b034df291f554a00b265ed20.out \
+ $(srcdir)/%reldir%/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.err \
+ $(srcdir)/%reldir%/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.out \
+ $(srcdir)/%reldir%/test_cmds.sh_5bfd08c1639701476d7b9348c36afd46fdbe6f2a.err \
+ $(srcdir)/%reldir%/test_cmds.sh_5bfd08c1639701476d7b9348c36afd46fdbe6f2a.out \
+ $(srcdir)/%reldir%/test_cmds.sh_624a41e152675575f4b07c19b2cf0e3a028429a2.err \
+ $(srcdir)/%reldir%/test_cmds.sh_624a41e152675575f4b07c19b2cf0e3a028429a2.out \
+ $(srcdir)/%reldir%/test_cmds.sh_62d68c0a11757c996f24c8f003e6b4059c3e30b2.err \
+ $(srcdir)/%reldir%/test_cmds.sh_62d68c0a11757c996f24c8f003e6b4059c3e30b2.out \
+ $(srcdir)/%reldir%/test_cmds.sh_661ec61acdd8f6fa6ec1e3c2cf5f896eef431351.err \
+ $(srcdir)/%reldir%/test_cmds.sh_661ec61acdd8f6fa6ec1e3c2cf5f896eef431351.out \
+ $(srcdir)/%reldir%/test_cmds.sh_6a6031113aca32fabc5a3da64b7be46f5ce5a312.err \
+ $(srcdir)/%reldir%/test_cmds.sh_6a6031113aca32fabc5a3da64b7be46f5ce5a312.out \
+ $(srcdir)/%reldir%/test_cmds.sh_6e016c0ed61fc652be1a79b864875ffede64f281.err \
+ $(srcdir)/%reldir%/test_cmds.sh_6e016c0ed61fc652be1a79b864875ffede64f281.out \
+ $(srcdir)/%reldir%/test_cmds.sh_7270e37dab4549cfa7c5232451c031e1e04b4aef.err \
+ $(srcdir)/%reldir%/test_cmds.sh_7270e37dab4549cfa7c5232451c031e1e04b4aef.out \
+ $(srcdir)/%reldir%/test_cmds.sh_73ea99c84fb1d4570e8bcd45c423b4a28fe41e81.err \
+ $(srcdir)/%reldir%/test_cmds.sh_73ea99c84fb1d4570e8bcd45c423b4a28fe41e81.out \
+ $(srcdir)/%reldir%/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.err \
+ $(srcdir)/%reldir%/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.out \
+ $(srcdir)/%reldir%/test_cmds.sh_7e14e7f18219719453838835fa96c3451f78996d.err \
+ $(srcdir)/%reldir%/test_cmds.sh_7e14e7f18219719453838835fa96c3451f78996d.out \
+ $(srcdir)/%reldir%/test_cmds.sh_819b3dd21348f7242f3914ad0a8c5b1cdb3f91af.err \
+ $(srcdir)/%reldir%/test_cmds.sh_819b3dd21348f7242f3914ad0a8c5b1cdb3f91af.out \
+ $(srcdir)/%reldir%/test_cmds.sh_8298805f897346b4bb0f14e53c06b4fa28e309e3.err \
+ $(srcdir)/%reldir%/test_cmds.sh_8298805f897346b4bb0f14e53c06b4fa28e309e3.out \
+ $(srcdir)/%reldir%/test_cmds.sh_83654557317602d2e00adde1e5cba190d9db0dff.err \
+ $(srcdir)/%reldir%/test_cmds.sh_83654557317602d2e00adde1e5cba190d9db0dff.out \
+ $(srcdir)/%reldir%/test_cmds.sh_85ae6ac1eb9a8378f7a6c39659f52671218ce64b.err \
+ $(srcdir)/%reldir%/test_cmds.sh_85ae6ac1eb9a8378f7a6c39659f52671218ce64b.out \
+ $(srcdir)/%reldir%/test_cmds.sh_85ed177028f226e86b1d164eb1a4e18eaf036c9d.err \
+ $(srcdir)/%reldir%/test_cmds.sh_85ed177028f226e86b1d164eb1a4e18eaf036c9d.out \
+ $(srcdir)/%reldir%/test_cmds.sh_8758082427d6232a15053433942a4b5ad9f2e3ce.err \
+ $(srcdir)/%reldir%/test_cmds.sh_8758082427d6232a15053433942a4b5ad9f2e3ce.out \
+ $(srcdir)/%reldir%/test_cmds.sh_876116da8ab46c0c8a212ce230d1b8a13970f78f.err \
+ $(srcdir)/%reldir%/test_cmds.sh_876116da8ab46c0c8a212ce230d1b8a13970f78f.out \
+ $(srcdir)/%reldir%/test_cmds.sh_8765cbf326648e9014f8cf5f761895010fff443a.err \
+ $(srcdir)/%reldir%/test_cmds.sh_8765cbf326648e9014f8cf5f761895010fff443a.out \
+ $(srcdir)/%reldir%/test_cmds.sh_89afa826d1b33be6926df48443faa1d1c5f285a7.err \
+ $(srcdir)/%reldir%/test_cmds.sh_89afa826d1b33be6926df48443faa1d1c5f285a7.out \
+ $(srcdir)/%reldir%/test_cmds.sh_8d5b43c693e78804a8fb06989392fa8cccb46b7b.err \
+ $(srcdir)/%reldir%/test_cmds.sh_8d5b43c693e78804a8fb06989392fa8cccb46b7b.out \
+ $(srcdir)/%reldir%/test_cmds.sh_9445861db011dfa2d21a44788047de345ee291e8.err \
+ $(srcdir)/%reldir%/test_cmds.sh_9445861db011dfa2d21a44788047de345ee291e8.out \
+ $(srcdir)/%reldir%/test_cmds.sh_95beaabe41d72cf4c6810e79c623da759ac1c71b.err \
+ $(srcdir)/%reldir%/test_cmds.sh_95beaabe41d72cf4c6810e79c623da759ac1c71b.out \
+ $(srcdir)/%reldir%/test_cmds.sh_968dac54dc80d91a5da2322890c6c26dfa0d8462.err \
+ $(srcdir)/%reldir%/test_cmds.sh_968dac54dc80d91a5da2322890c6c26dfa0d8462.out \
+ $(srcdir)/%reldir%/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.err \
+ $(srcdir)/%reldir%/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.out \
+ $(srcdir)/%reldir%/test_cmds.sh_a1123427c31c022433d66d05ee5d5e1c8ab415e4.err \
+ $(srcdir)/%reldir%/test_cmds.sh_a1123427c31c022433d66d05ee5d5e1c8ab415e4.out \
+ $(srcdir)/%reldir%/test_cmds.sh_a190bfc279fa046a823864f1484f899d27d22953.err \
+ $(srcdir)/%reldir%/test_cmds.sh_a190bfc279fa046a823864f1484f899d27d22953.out \
+ $(srcdir)/%reldir%/test_cmds.sh_a5742238bad948b1372d32f7a491f03fa4e8b711.err \
+ $(srcdir)/%reldir%/test_cmds.sh_a5742238bad948b1372d32f7a491f03fa4e8b711.out \
+ $(srcdir)/%reldir%/test_cmds.sh_a6c431f2871ea96cfdf4e11465b3bca543c7b678.err \
+ $(srcdir)/%reldir%/test_cmds.sh_a6c431f2871ea96cfdf4e11465b3bca543c7b678.out \
+ $(srcdir)/%reldir%/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.err \
+ $(srcdir)/%reldir%/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.out \
+ $(srcdir)/%reldir%/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.err \
+ $(srcdir)/%reldir%/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.out \
+ $(srcdir)/%reldir%/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.err \
+ $(srcdir)/%reldir%/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.out \
+ $(srcdir)/%reldir%/test_cmds.sh_b5a530d16c982cf769151291f0bfd612ea71183f.err \
+ $(srcdir)/%reldir%/test_cmds.sh_b5a530d16c982cf769151291f0bfd612ea71183f.out \
+ $(srcdir)/%reldir%/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.err \
+ $(srcdir)/%reldir%/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.out \
+ $(srcdir)/%reldir%/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.err \
+ $(srcdir)/%reldir%/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.out \
+ $(srcdir)/%reldir%/test_cmds.sh_b7fcd26c45c850c3d43ce25b1f610a311eb898c5.err \
+ $(srcdir)/%reldir%/test_cmds.sh_b7fcd26c45c850c3d43ce25b1f610a311eb898c5.out \
+ $(srcdir)/%reldir%/test_cmds.sh_b9f8bf53ec2736432eb048d94a391175eb4dc5bf.err \
+ $(srcdir)/%reldir%/test_cmds.sh_b9f8bf53ec2736432eb048d94a391175eb4dc5bf.out \
+ $(srcdir)/%reldir%/test_cmds.sh_bc60341827636715c14c562863da9733cbde7e68.err \
+ $(srcdir)/%reldir%/test_cmds.sh_bc60341827636715c14c562863da9733cbde7e68.out \
+ $(srcdir)/%reldir%/test_cmds.sh_be1d9628fc447b6f17121d9457ea1602afe8f3f3.err \
+ $(srcdir)/%reldir%/test_cmds.sh_be1d9628fc447b6f17121d9457ea1602afe8f3f3.out \
+ $(srcdir)/%reldir%/test_cmds.sh_be3b7c5874b5f4d86cc230bd2f9802c98909e148.err \
+ $(srcdir)/%reldir%/test_cmds.sh_be3b7c5874b5f4d86cc230bd2f9802c98909e148.out \
+ $(srcdir)/%reldir%/test_cmds.sh_bf4e7fad67e281beaa11b6e2b03a00b419c7c9b0.err \
+ $(srcdir)/%reldir%/test_cmds.sh_bf4e7fad67e281beaa11b6e2b03a00b419c7c9b0.out \
+ $(srcdir)/%reldir%/test_cmds.sh_c01e10f7cae8d36fa79ae03be887cb5477025f6d.err \
+ $(srcdir)/%reldir%/test_cmds.sh_c01e10f7cae8d36fa79ae03be887cb5477025f6d.out \
+ $(srcdir)/%reldir%/test_cmds.sh_c2b4431dd0cc36c6201d263b727b3305e8cda6b1.err \
+ $(srcdir)/%reldir%/test_cmds.sh_c2b4431dd0cc36c6201d263b727b3305e8cda6b1.out \
+ $(srcdir)/%reldir%/test_cmds.sh_c4777849c39a6c34dea5b0279cd7400692f1ab5f.err \
+ $(srcdir)/%reldir%/test_cmds.sh_c4777849c39a6c34dea5b0279cd7400692f1ab5f.out \
+ $(srcdir)/%reldir%/test_cmds.sh_c4a15771f7e1487bf73b2e9d1564ad8ecfd76c7e.err \
+ $(srcdir)/%reldir%/test_cmds.sh_c4a15771f7e1487bf73b2e9d1564ad8ecfd76c7e.out \
+ $(srcdir)/%reldir%/test_cmds.sh_c72aed622c19d493968e33f20d5dde3838a4258f.err \
+ $(srcdir)/%reldir%/test_cmds.sh_c72aed622c19d493968e33f20d5dde3838a4258f.out \
+ $(srcdir)/%reldir%/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.err \
+ $(srcdir)/%reldir%/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.out \
+ $(srcdir)/%reldir%/test_cmds.sh_ca66660c973f76a3c2a147c7f5035bcb4e8a8bbc.err \
+ $(srcdir)/%reldir%/test_cmds.sh_ca66660c973f76a3c2a147c7f5035bcb4e8a8bbc.out \
+ $(srcdir)/%reldir%/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.err \
+ $(srcdir)/%reldir%/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.out \
+ $(srcdir)/%reldir%/test_cmds.sh_d3b69abdfb39e4bfa5828c2f9593e2b2b7ed4d5d.err \
+ $(srcdir)/%reldir%/test_cmds.sh_d3b69abdfb39e4bfa5828c2f9593e2b2b7ed4d5d.out \
+ $(srcdir)/%reldir%/test_cmds.sh_d76d77ad95b9f120825417a6a8220c13df9541fc.err \
+ $(srcdir)/%reldir%/test_cmds.sh_d76d77ad95b9f120825417a6a8220c13df9541fc.out \
+ $(srcdir)/%reldir%/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.err \
+ $(srcdir)/%reldir%/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.out \
+ $(srcdir)/%reldir%/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.err \
+ $(srcdir)/%reldir%/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.out \
+ $(srcdir)/%reldir%/test_cmds.sh_d8eeef53a58bdeddbc1028d7c525413e3ca1c8df.err \
+ $(srcdir)/%reldir%/test_cmds.sh_d8eeef53a58bdeddbc1028d7c525413e3ca1c8df.out \
+ $(srcdir)/%reldir%/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.err \
+ $(srcdir)/%reldir%/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.out \
+ $(srcdir)/%reldir%/test_cmds.sh_dd41fbbcd71699314af232156d4155fbdf849131.err \
+ $(srcdir)/%reldir%/test_cmds.sh_dd41fbbcd71699314af232156d4155fbdf849131.out \
+ $(srcdir)/%reldir%/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.err \
+ $(srcdir)/%reldir%/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.out \
+ $(srcdir)/%reldir%/test_cmds.sh_e495cf059477e3f80c3241c6f8d5808b6f1d19c7.err \
+ $(srcdir)/%reldir%/test_cmds.sh_e495cf059477e3f80c3241c6f8d5808b6f1d19c7.out \
+ $(srcdir)/%reldir%/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.err \
+ $(srcdir)/%reldir%/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.out \
+ $(srcdir)/%reldir%/test_cmds.sh_e911aebcb2defb7471aa620c45a86cad449ad505.err \
+ $(srcdir)/%reldir%/test_cmds.sh_e911aebcb2defb7471aa620c45a86cad449ad505.out \
+ $(srcdir)/%reldir%/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.err \
+ $(srcdir)/%reldir%/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.out \
+ $(srcdir)/%reldir%/test_cmds.sh_ec2b28c6ea328e3ea56b13ab8ca3d9ee856a9dda.err \
+ $(srcdir)/%reldir%/test_cmds.sh_ec2b28c6ea328e3ea56b13ab8ca3d9ee856a9dda.out \
+ $(srcdir)/%reldir%/test_cmds.sh_ed5b73be0b991e0e8d6735e31df5b37c4286321b.err \
+ $(srcdir)/%reldir%/test_cmds.sh_ed5b73be0b991e0e8d6735e31df5b37c4286321b.out \
+ $(srcdir)/%reldir%/test_cmds.sh_f788d5f5932905d09ecbd581040ec5ce76459da5.err \
+ $(srcdir)/%reldir%/test_cmds.sh_f788d5f5932905d09ecbd581040ec5ce76459da5.out \
+ $(srcdir)/%reldir%/test_cmds.sh_ff6faebbde8586e04bfadba14a3d2bb4451784ad.err \
+ $(srcdir)/%reldir%/test_cmds.sh_ff6faebbde8586e04bfadba14a3d2bb4451784ad.out \
+ $(srcdir)/%reldir%/test_config.sh_2765ea0d4c037b8c935840604edb0ae796c97a04.err \
+ $(srcdir)/%reldir%/test_config.sh_2765ea0d4c037b8c935840604edb0ae796c97a04.out \
+ $(srcdir)/%reldir%/test_config.sh_5fd9fbccc35e9b06abdd913da0c16bdb306b926e.err \
+ $(srcdir)/%reldir%/test_config.sh_5fd9fbccc35e9b06abdd913da0c16bdb306b926e.out \
+ $(srcdir)/%reldir%/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.err \
+ $(srcdir)/%reldir%/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.out \
+ $(srcdir)/%reldir%/test_config.sh_b08f7523659d1c12f0e59920cd40d17d4a83b72f.err \
+ $(srcdir)/%reldir%/test_config.sh_b08f7523659d1c12f0e59920cd40d17d4a83b72f.out \
+ $(srcdir)/%reldir%/test_config.sh_d622658dc98327b1b2fd346802d24bc633e34ac7.err \
+ $(srcdir)/%reldir%/test_config.sh_d622658dc98327b1b2fd346802d24bc633e34ac7.out \
+ $(srcdir)/%reldir%/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.err \
+ $(srcdir)/%reldir%/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.out \
+ $(srcdir)/%reldir%/test_config.sh_eec3768ebc201ca63bca1411270965f78db1abfc.err \
+ $(srcdir)/%reldir%/test_config.sh_eec3768ebc201ca63bca1411270965f78db1abfc.out \
+ $(srcdir)/%reldir%/test_events.sh_09ba47d70bfca88e89faf29598c1095292cad435.err \
+ $(srcdir)/%reldir%/test_events.sh_09ba47d70bfca88e89faf29598c1095292cad435.out \
+ $(srcdir)/%reldir%/test_events.sh_153e221f3cb50f4d3e4581be0bf311e62489c42d.err \
+ $(srcdir)/%reldir%/test_events.sh_153e221f3cb50f4d3e4581be0bf311e62489c42d.out \
+ $(srcdir)/%reldir%/test_events.sh_3dae146ef3bf201c43656344803694a34a3dbfec.err \
+ $(srcdir)/%reldir%/test_events.sh_3dae146ef3bf201c43656344803694a34a3dbfec.out \
+ $(srcdir)/%reldir%/test_events.sh_6f9523d43f174397829b6a7fe6ee0090d97df5f9.err \
+ $(srcdir)/%reldir%/test_events.sh_6f9523d43f174397829b6a7fe6ee0090d97df5f9.out \
+ $(srcdir)/%reldir%/test_events.sh_729f77b8e7136d64d22a6610a80ba6b584a2d896.err \
+ $(srcdir)/%reldir%/test_events.sh_729f77b8e7136d64d22a6610a80ba6b584a2d896.out \
+ $(srcdir)/%reldir%/test_events.sh_d9c7907f907b2335e1328b23fdc46d0968a608d9.err \
+ $(srcdir)/%reldir%/test_events.sh_d9c7907f907b2335e1328b23fdc46d0968a608d9.out \
+ $(srcdir)/%reldir%/test_events.sh_ed8dc44add223341c03ccb7b3e18371bdb42b710.err \
+ $(srcdir)/%reldir%/test_events.sh_ed8dc44add223341c03ccb7b3e18371bdb42b710.out \
+ $(srcdir)/%reldir%/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.err \
+ $(srcdir)/%reldir%/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.out \
+ $(srcdir)/%reldir%/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.err \
+ $(srcdir)/%reldir%/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.out \
+ $(srcdir)/%reldir%/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.err \
+ $(srcdir)/%reldir%/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.out \
+ $(srcdir)/%reldir%/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.err \
+ $(srcdir)/%reldir%/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.out \
+ $(srcdir)/%reldir%/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.err \
+ $(srcdir)/%reldir%/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.out \
+ $(srcdir)/%reldir%/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.err \
+ $(srcdir)/%reldir%/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.out \
+ $(srcdir)/%reldir%/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.err \
+ $(srcdir)/%reldir%/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.out \
+ $(srcdir)/%reldir%/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.err \
+ $(srcdir)/%reldir%/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.out \
+ $(srcdir)/%reldir%/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.err \
+ $(srcdir)/%reldir%/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.out \
+ $(srcdir)/%reldir%/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.err \
+ $(srcdir)/%reldir%/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.out \
+ $(srcdir)/%reldir%/test_json_format.sh_7aade92cff911c5b3cfc733685809f949ae35778.err \
+ $(srcdir)/%reldir%/test_json_format.sh_7aade92cff911c5b3cfc733685809f949ae35778.out \
+ $(srcdir)/%reldir%/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.err \
+ $(srcdir)/%reldir%/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.out \
+ $(srcdir)/%reldir%/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.err \
+ $(srcdir)/%reldir%/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.out \
+ $(srcdir)/%reldir%/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.err \
+ $(srcdir)/%reldir%/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.out \
+ $(srcdir)/%reldir%/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.err \
+ $(srcdir)/%reldir%/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.out \
+ $(srcdir)/%reldir%/test_json_format.sh_8f2ebcd319afc7966ef11e31f9dd646bf6f001dd.err \
+ $(srcdir)/%reldir%/test_json_format.sh_8f2ebcd319afc7966ef11e31f9dd646bf6f001dd.out \
+ $(srcdir)/%reldir%/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.err \
+ $(srcdir)/%reldir%/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.out \
+ $(srcdir)/%reldir%/test_json_format.sh_989e52d167582648b73c5d025cc0e814c642b3c8.err \
+ $(srcdir)/%reldir%/test_json_format.sh_989e52d167582648b73c5d025cc0e814c642b3c8.out \
+ $(srcdir)/%reldir%/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.err \
+ $(srcdir)/%reldir%/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.out \
+ $(srcdir)/%reldir%/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.err \
+ $(srcdir)/%reldir%/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.out \
+ $(srcdir)/%reldir%/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.err \
+ $(srcdir)/%reldir%/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.out \
+ $(srcdir)/%reldir%/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.err \
+ $(srcdir)/%reldir%/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.out \
+ $(srcdir)/%reldir%/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.err \
+ $(srcdir)/%reldir%/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.out \
+ $(srcdir)/%reldir%/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.err \
+ $(srcdir)/%reldir%/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.out \
+ $(srcdir)/%reldir%/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.err \
+ $(srcdir)/%reldir%/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.out \
+ $(srcdir)/%reldir%/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.err \
+ $(srcdir)/%reldir%/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.out \
+ $(srcdir)/%reldir%/test_logfile.sh_09bd16e044302f6b121092534708594bdad11b5a.err \
+ $(srcdir)/%reldir%/test_logfile.sh_09bd16e044302f6b121092534708594bdad11b5a.out \
+ $(srcdir)/%reldir%/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.err \
+ $(srcdir)/%reldir%/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.out \
+ $(srcdir)/%reldir%/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.err \
+ $(srcdir)/%reldir%/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.out \
+ $(srcdir)/%reldir%/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.err \
+ $(srcdir)/%reldir%/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.out \
+ $(srcdir)/%reldir%/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.err \
+ $(srcdir)/%reldir%/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.out \
+ $(srcdir)/%reldir%/test_logfile.sh_4a2a907fcb069b8d6e65961a7b2e796d6c3a87b1.err \
+ $(srcdir)/%reldir%/test_logfile.sh_4a2a907fcb069b8d6e65961a7b2e796d6c3a87b1.out \
+ $(srcdir)/%reldir%/test_logfile.sh_6602faf7817c494c33e32da7ee95f13aa9210d01.err \
+ $(srcdir)/%reldir%/test_logfile.sh_6602faf7817c494c33e32da7ee95f13aa9210d01.out \
+ $(srcdir)/%reldir%/test_logfile.sh_7c2e11488bccc59458b5775db4b90de964858259.err \
+ $(srcdir)/%reldir%/test_logfile.sh_7c2e11488bccc59458b5775db4b90de964858259.out \
+ $(srcdir)/%reldir%/test_logfile.sh_a7037efd0c4bbf51940137a44e57d94e9307e83e.err \
+ $(srcdir)/%reldir%/test_logfile.sh_a7037efd0c4bbf51940137a44e57d94e9307e83e.out \
+ $(srcdir)/%reldir%/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.err \
+ $(srcdir)/%reldir%/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.out \
+ $(srcdir)/%reldir%/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.err \
+ $(srcdir)/%reldir%/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.out \
+ $(srcdir)/%reldir%/test_meta.sh_154047fb52e4831aabf7d36512247bad6a6a2cf7.err \
+ $(srcdir)/%reldir%/test_meta.sh_154047fb52e4831aabf7d36512247bad6a6a2cf7.out \
+ $(srcdir)/%reldir%/test_meta.sh_3c9b5940f7533c5fc3d4956a6efce50a9e7132d4.err \
+ $(srcdir)/%reldir%/test_meta.sh_3c9b5940f7533c5fc3d4956a6efce50a9e7132d4.out \
+ $(srcdir)/%reldir%/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.err \
+ $(srcdir)/%reldir%/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.out \
+ $(srcdir)/%reldir%/test_meta.sh_45ff39a3d0ac0ca0c95aaca14d043450cec1cedd.err \
+ $(srcdir)/%reldir%/test_meta.sh_45ff39a3d0ac0ca0c95aaca14d043450cec1cedd.out \
+ $(srcdir)/%reldir%/test_meta.sh_48e85ba0c0945a5085fb4ee255771406061a9c17.err \
+ $(srcdir)/%reldir%/test_meta.sh_48e85ba0c0945a5085fb4ee255771406061a9c17.out \
+ $(srcdir)/%reldir%/test_meta.sh_4c39b356748c67ccf8a6027a1af88da532f8252a.err \
+ $(srcdir)/%reldir%/test_meta.sh_4c39b356748c67ccf8a6027a1af88da532f8252a.out \
+ $(srcdir)/%reldir%/test_meta.sh_7b75763926d832bf9784ca234a060859770aabe7.err \
+ $(srcdir)/%reldir%/test_meta.sh_7b75763926d832bf9784ca234a060859770aabe7.out \
+ $(srcdir)/%reldir%/test_meta.sh_811b1a8a176b25001a89e35b295a1117ab76969b.err \
+ $(srcdir)/%reldir%/test_meta.sh_811b1a8a176b25001a89e35b295a1117ab76969b.out \
+ $(srcdir)/%reldir%/test_meta.sh_83ac877aa9d38b25945cf96d6326a2468187c40f.err \
+ $(srcdir)/%reldir%/test_meta.sh_83ac877aa9d38b25945cf96d6326a2468187c40f.out \
+ $(srcdir)/%reldir%/test_meta.sh_a7489c1f0e001adc732b7e2ab31bb30960fda078.err \
+ $(srcdir)/%reldir%/test_meta.sh_a7489c1f0e001adc732b7e2ab31bb30960fda078.out \
+ $(srcdir)/%reldir%/test_meta.sh_c063f96398650f130941bbbf4cf63c1244fdbee5.err \
+ $(srcdir)/%reldir%/test_meta.sh_c063f96398650f130941bbbf4cf63c1244fdbee5.out \
+ $(srcdir)/%reldir%/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.err \
+ $(srcdir)/%reldir%/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.out \
+ $(srcdir)/%reldir%/test_meta.sh_c8fb22932af2467a2651797a8a8d8cddcd09431d.err \
+ $(srcdir)/%reldir%/test_meta.sh_c8fb22932af2467a2651797a8a8d8cddcd09431d.out \
+ $(srcdir)/%reldir%/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.err \
+ $(srcdir)/%reldir%/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.out \
+ $(srcdir)/%reldir%/test_meta.sh_fd09cb565f44a114d8c9a519e571918e30262eaf.err \
+ $(srcdir)/%reldir%/test_meta.sh_fd09cb565f44a114d8c9a519e571918e30262eaf.out \
+ $(srcdir)/%reldir%/test_meta.sh_fdf4a91aa55262255816dff7d605f1f0a5d6fe92.err \
+ $(srcdir)/%reldir%/test_meta.sh_fdf4a91aa55262255816dff7d605f1f0a5d6fe92.out \
+ $(srcdir)/%reldir%/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.err \
+ $(srcdir)/%reldir%/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.out \
+ $(srcdir)/%reldir%/test_pretty_print.sh_4111e649fb49c0a377e552fa0b56c60c370633da.err \
+ $(srcdir)/%reldir%/test_pretty_print.sh_4111e649fb49c0a377e552fa0b56c60c370633da.out \
+ $(srcdir)/%reldir%/test_pretty_print.sh_675a2ff6306df7c54127e39319cf06a2dd353145.err \
+ $(srcdir)/%reldir%/test_pretty_print.sh_675a2ff6306df7c54127e39319cf06a2dd353145.out \
+ $(srcdir)/%reldir%/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.err \
+ $(srcdir)/%reldir%/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.out \
+ $(srcdir)/%reldir%/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.err \
+ $(srcdir)/%reldir%/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.out \
+ $(srcdir)/%reldir%/test_pretty_print.sh_a6d9042e5e95f2a49194bd80c1eed154813ddf41.err \
+ $(srcdir)/%reldir%/test_pretty_print.sh_a6d9042e5e95f2a49194bd80c1eed154813ddf41.out \
+ $(srcdir)/%reldir%/test_pretty_print.sh_cd361eeca7e91bfab942b75d6c3422c7a456a111.err \
+ $(srcdir)/%reldir%/test_pretty_print.sh_cd361eeca7e91bfab942b75d6c3422c7a456a111.out \
+ $(srcdir)/%reldir%/test_pretty_print.sh_f8feb52a321026d9562b271eb37a2c56dfaed329.err \
+ $(srcdir)/%reldir%/test_pretty_print.sh_f8feb52a321026d9562b271eb37a2c56dfaed329.out \
+ $(srcdir)/%reldir%/test_sessions.sh_0300a1391c33b1c45ddfa90198a6bd0a5404a77f.err \
+ $(srcdir)/%reldir%/test_sessions.sh_0300a1391c33b1c45ddfa90198a6bd0a5404a77f.out \
+ $(srcdir)/%reldir%/test_sessions.sh_17b85654b929b2a8fc1705a170ced544783292fa.err \
+ $(srcdir)/%reldir%/test_sessions.sh_17b85654b929b2a8fc1705a170ced544783292fa.out \
+ $(srcdir)/%reldir%/test_sessions.sh_345b0e66dab7b881397c4b38380da81092ab70dd.err \
+ $(srcdir)/%reldir%/test_sessions.sh_345b0e66dab7b881397c4b38380da81092ab70dd.out \
+ $(srcdir)/%reldir%/test_sessions.sh_430b9522ba1a37983138f3c4935cba91b781e415.err \
+ $(srcdir)/%reldir%/test_sessions.sh_430b9522ba1a37983138f3c4935cba91b781e415.out \
+ $(srcdir)/%reldir%/test_sessions.sh_4f13dd3858546b6e04a27e244159d355e368f2ae.err \
+ $(srcdir)/%reldir%/test_sessions.sh_4f13dd3858546b6e04a27e244159d355e368f2ae.out \
+ $(srcdir)/%reldir%/test_sessions.sh_68a89b56c5e7f7db620084cca1eb547cbb19a2c9.err \
+ $(srcdir)/%reldir%/test_sessions.sh_68a89b56c5e7f7db620084cca1eb547cbb19a2c9.out \
+ $(srcdir)/%reldir%/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.err \
+ $(srcdir)/%reldir%/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.out \
+ $(srcdir)/%reldir%/test_sessions.sh_858fd0081ed9c46dd81e2f81f1090756f2463558.err \
+ $(srcdir)/%reldir%/test_sessions.sh_858fd0081ed9c46dd81e2f81f1090756f2463558.out \
+ $(srcdir)/%reldir%/test_sessions.sh_903b41c950f5f90d7786d7a09bb6e2f217654b15.err \
+ $(srcdir)/%reldir%/test_sessions.sh_903b41c950f5f90d7786d7a09bb6e2f217654b15.out \
+ $(srcdir)/%reldir%/test_sessions.sh_92a98a3e4e3a10bf1f2371d21a8282c5d3d4baa5.err \
+ $(srcdir)/%reldir%/test_sessions.sh_92a98a3e4e3a10bf1f2371d21a8282c5d3d4baa5.out \
+ $(srcdir)/%reldir%/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.err \
+ $(srcdir)/%reldir%/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.out \
+ $(srcdir)/%reldir%/test_sessions.sh_a92822d121a836140a401fd71535dc4a7a8d5b48.err \
+ $(srcdir)/%reldir%/test_sessions.sh_a92822d121a836140a401fd71535dc4a7a8d5b48.out \
+ $(srcdir)/%reldir%/test_sessions.sh_b3d71a87fcb4e3487f71ccad8c6ce681db220572.err \
+ $(srcdir)/%reldir%/test_sessions.sh_b3d71a87fcb4e3487f71ccad8c6ce681db220572.out \
+ $(srcdir)/%reldir%/test_sessions.sh_b932b33dd087b94d4306dd179c5d4f9ddd394960.err \
+ $(srcdir)/%reldir%/test_sessions.sh_b932b33dd087b94d4306dd179c5d4f9ddd394960.out \
+ $(srcdir)/%reldir%/test_sessions.sh_ddf45811e9906de9f3930fe802ac7b2cc6e48106.err \
+ $(srcdir)/%reldir%/test_sessions.sh_ddf45811e9906de9f3930fe802ac7b2cc6e48106.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.out \
+ $(srcdir)/%reldir%/test_sql.sh_02def66745b063518473df862987747909f56ccc.err \
+ $(srcdir)/%reldir%/test_sql.sh_02def66745b063518473df862987747909f56ccc.out \
+ $(srcdir)/%reldir%/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.err \
+ $(srcdir)/%reldir%/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.out \
+ $(srcdir)/%reldir%/test_sql.sh_0d46ee142f80f262c8c14a22751571cc567df525.err \
+ $(srcdir)/%reldir%/test_sql.sh_0d46ee142f80f262c8c14a22751571cc567df525.out \
+ $(srcdir)/%reldir%/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.err \
+ $(srcdir)/%reldir%/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.out \
+ $(srcdir)/%reldir%/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.err \
+ $(srcdir)/%reldir%/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.out \
+ $(srcdir)/%reldir%/test_sql.sh_2532083f215ed44630621f18df3dd7b77c06ae10.err \
+ $(srcdir)/%reldir%/test_sql.sh_2532083f215ed44630621f18df3dd7b77c06ae10.out \
+ $(srcdir)/%reldir%/test_sql.sh_26c0d94d7837792144f2d0f866fb3c12a0bd410d.err \
+ $(srcdir)/%reldir%/test_sql.sh_26c0d94d7837792144f2d0f866fb3c12a0bd410d.out \
+ $(srcdir)/%reldir%/test_sql.sh_2959f0c70fca61a07c6c772f193e73022f7794f1.err \
+ $(srcdir)/%reldir%/test_sql.sh_2959f0c70fca61a07c6c772f193e73022f7794f1.out \
+ $(srcdir)/%reldir%/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.err \
+ $(srcdir)/%reldir%/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.out \
+ $(srcdir)/%reldir%/test_sql.sh_2cc8a92c6eb73741080b187a2670d309b8171c90.err \
+ $(srcdir)/%reldir%/test_sql.sh_2cc8a92c6eb73741080b187a2670d309b8171c90.out \
+ $(srcdir)/%reldir%/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.err \
+ $(srcdir)/%reldir%/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.out \
+ $(srcdir)/%reldir%/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.err \
+ $(srcdir)/%reldir%/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.out \
+ $(srcdir)/%reldir%/test_sql.sh_3d77a2092192caf98e141a6039e886ede836f044.err \
+ $(srcdir)/%reldir%/test_sql.sh_3d77a2092192caf98e141a6039e886ede836f044.out \
+ $(srcdir)/%reldir%/test_sql.sh_4090f96ea11a344c1e2939211da778992dab47d8.err \
+ $(srcdir)/%reldir%/test_sql.sh_4090f96ea11a344c1e2939211da778992dab47d8.out \
+ $(srcdir)/%reldir%/test_sql.sh_4629b626c65a85d7a5595571e195b67afca272ba.err \
+ $(srcdir)/%reldir%/test_sql.sh_4629b626c65a85d7a5595571e195b67afca272ba.out \
+ $(srcdir)/%reldir%/test_sql.sh_50c0b2c93b646b848a017764bde8a4282c556e2d.err \
+ $(srcdir)/%reldir%/test_sql.sh_50c0b2c93b646b848a017764bde8a4282c556e2d.out \
+ $(srcdir)/%reldir%/test_sql.sh_528e48a03cdfa7cfbe263a6e22a65606247a8a95.err \
+ $(srcdir)/%reldir%/test_sql.sh_528e48a03cdfa7cfbe263a6e22a65606247a8a95.out \
+ $(srcdir)/%reldir%/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.err \
+ $(srcdir)/%reldir%/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.out \
+ $(srcdir)/%reldir%/test_sql.sh_56047c9470e515bc3e3709354c01e5d50462cde7.err \
+ $(srcdir)/%reldir%/test_sql.sh_56047c9470e515bc3e3709354c01e5d50462cde7.out \
+ $(srcdir)/%reldir%/test_sql.sh_57427f3c4b4ec785ffff7c5802c10db0d3e547cf.err \
+ $(srcdir)/%reldir%/test_sql.sh_57427f3c4b4ec785ffff7c5802c10db0d3e547cf.out \
+ $(srcdir)/%reldir%/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.err \
+ $(srcdir)/%reldir%/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.out \
+ $(srcdir)/%reldir%/test_sql.sh_5801770f3e0ecc1d62c7a97116d6da1981bbc7bd.err \
+ $(srcdir)/%reldir%/test_sql.sh_5801770f3e0ecc1d62c7a97116d6da1981bbc7bd.out \
+ $(srcdir)/%reldir%/test_sql.sh_5fe26fe4fc22f23f8dbe3a6aab394602886f2971.err \
+ $(srcdir)/%reldir%/test_sql.sh_5fe26fe4fc22f23f8dbe3a6aab394602886f2971.out \
+ $(srcdir)/%reldir%/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.err \
+ $(srcdir)/%reldir%/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.out \
+ $(srcdir)/%reldir%/test_sql.sh_6ad9d0adf85c36363f6b24f49950dcdc13dd34ab.err \
+ $(srcdir)/%reldir%/test_sql.sh_6ad9d0adf85c36363f6b24f49950dcdc13dd34ab.out \
+ $(srcdir)/%reldir%/test_sql.sh_6edb0c8d5323d1b962d90dd6ecdd7eee9008d7b5.err \
+ $(srcdir)/%reldir%/test_sql.sh_6edb0c8d5323d1b962d90dd6ecdd7eee9008d7b5.out \
+ $(srcdir)/%reldir%/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.err \
+ $(srcdir)/%reldir%/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.out \
+ $(srcdir)/%reldir%/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.err \
+ $(srcdir)/%reldir%/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.out \
+ $(srcdir)/%reldir%/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.err \
+ $(srcdir)/%reldir%/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.out \
+ $(srcdir)/%reldir%/test_sql.sh_85fe3b9803254ea54b864d4865d7bd4d7a7f86c6.err \
+ $(srcdir)/%reldir%/test_sql.sh_85fe3b9803254ea54b864d4865d7bd4d7a7f86c6.out \
+ $(srcdir)/%reldir%/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.err \
+ $(srcdir)/%reldir%/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.out \
+ $(srcdir)/%reldir%/test_sql.sh_9a209f3ee1b1f543ca2587b695d2eb0e63e74c51.err \
+ $(srcdir)/%reldir%/test_sql.sh_9a209f3ee1b1f543ca2587b695d2eb0e63e74c51.out \
+ $(srcdir)/%reldir%/test_sql.sh_9b03e9f7a1bc35e408b3a17ee90cfdadea164df6.err \
+ $(srcdir)/%reldir%/test_sql.sh_9b03e9f7a1bc35e408b3a17ee90cfdadea164df6.out \
+ $(srcdir)/%reldir%/test_sql.sh_9ceccab07fbf7130bffe3c201c710719e4a3e9af.err \
+ $(srcdir)/%reldir%/test_sql.sh_9ceccab07fbf7130bffe3c201c710719e4a3e9af.out \
+ $(srcdir)/%reldir%/test_sql.sh_9e1d05b821822ee40e13fadb24ec558f4bfcff10.err \
+ $(srcdir)/%reldir%/test_sql.sh_9e1d05b821822ee40e13fadb24ec558f4bfcff10.out \
+ $(srcdir)/%reldir%/test_sql.sh_a6b68b9f0044d18e7fa8f9287ddc9110701edc33.err \
+ $(srcdir)/%reldir%/test_sql.sh_a6b68b9f0044d18e7fa8f9287ddc9110701edc33.out \
+ $(srcdir)/%reldir%/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.err \
+ $(srcdir)/%reldir%/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.out \
+ $(srcdir)/%reldir%/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.err \
+ $(srcdir)/%reldir%/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.out \
+ $(srcdir)/%reldir%/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.err \
+ $(srcdir)/%reldir%/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.out \
+ $(srcdir)/%reldir%/test_sql.sh_b2694e4fbecdd128798af25ee0d069e7e35fb499.err \
+ $(srcdir)/%reldir%/test_sql.sh_b2694e4fbecdd128798af25ee0d069e7e35fb499.out \
+ $(srcdir)/%reldir%/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.err \
+ $(srcdir)/%reldir%/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.out \
+ $(srcdir)/%reldir%/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.err \
+ $(srcdir)/%reldir%/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.out \
+ $(srcdir)/%reldir%/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.err \
+ $(srcdir)/%reldir%/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.out \
+ $(srcdir)/%reldir%/test_sql.sh_c20b0320096342c180146a5d18a6de82319d70b2.err \
+ $(srcdir)/%reldir%/test_sql.sh_c20b0320096342c180146a5d18a6de82319d70b2.out \
+ $(srcdir)/%reldir%/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.err \
+ $(srcdir)/%reldir%/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.out \
+ $(srcdir)/%reldir%/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.err \
+ $(srcdir)/%reldir%/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.out \
+ $(srcdir)/%reldir%/test_sql.sh_c73dec2706fc0b9a124f5da3a83f40d8d3255beb.err \
+ $(srcdir)/%reldir%/test_sql.sh_c73dec2706fc0b9a124f5da3a83f40d8d3255beb.out \
+ $(srcdir)/%reldir%/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.err \
+ $(srcdir)/%reldir%/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.out \
+ $(srcdir)/%reldir%/test_sql.sh_cc77a633a66d1778705a34e3657737547b3fb08d.err \
+ $(srcdir)/%reldir%/test_sql.sh_cc77a633a66d1778705a34e3657737547b3fb08d.out \
+ $(srcdir)/%reldir%/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.err \
+ $(srcdir)/%reldir%/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.out \
+ $(srcdir)/%reldir%/test_sql.sh_e70dc7d2b686c7f91c2b41b10f3920c50f3ea405.err \
+ $(srcdir)/%reldir%/test_sql.sh_e70dc7d2b686c7f91c2b41b10f3920c50f3ea405.out \
+ $(srcdir)/%reldir%/test_sql.sh_ff8a978fc0de0fed675a3cd1454cf435a6856fd5.err \
+ $(srcdir)/%reldir%/test_sql.sh_ff8a978fc0de0fed675a3cd1454cf435a6856fd5.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_028d5d5af2f3519b59d349d41cb7ecf385253b51.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_028d5d5af2f3519b59d349d41cb7ecf385253b51.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_0a37c43350ddd7a2d0d75695be32fac083ad04a4.err \
+ $(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_1b29488b949c294479aa6054f80a35bc106b454b.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_1b29488b949c294479aa6054f80a35bc106b454b.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_331a152080d2e278b7cc0a37728eca1ded36ed72.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_331a152080d2e278b7cc0a37728eca1ded36ed72.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_4ca92f0da538c2f9d524211a021b306af0d2740d.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_4ca92f0da538c2f9d524211a021b306af0d2740d.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_73814eca259e469b57bf7469787b91e8e8569b17.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_73814eca259e469b57bf7469787b91e8e8569b17.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_74bc5fb90a0c94a1a37d30a8e9254ea02c192a75.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_74bc5fb90a0c94a1a37d30a8e9254ea02c192a75.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_7b183037479528581e1eacace7b9acae41c5aa8e.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_7b183037479528581e1eacace7b9acae41c5aa8e.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_96ebdc277ae760e1b6efae3195ff678654b04e52.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_96ebdc277ae760e1b6efae3195ff678654b04e52.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_99da5994c8c90536dbdb1b8ad7dbfb41698a5e8c.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_99da5994c8c90536dbdb1b8ad7dbfb41698a5e8c.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_b1a2ddce48beb3e4b1e3ca4b4229a7c21b83b7c4.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_b1a2ddce48beb3e4b1e3ca4b4229a7c21b83b7c4.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_be6839712d088fc7b31618ed90f8ce706c35a9c0.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_be6839712d088fc7b31618ed90f8ce706c35a9c0.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_c879ba94fdc1a099cf56bd33e5b3e9be65310036.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_c879ba94fdc1a099cf56bd33e5b3e9be65310036.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_c909647ed0e585002074f55c946f3033df1815b2.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_c909647ed0e585002074f55c946f3033df1815b2.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_ce0506ee7a12eb0f7b970522cc6a79180ecb20cc.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_ce0506ee7a12eb0f7b970522cc6a79180ecb20cc.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_f3c64191d6016767a5857fbb1bad26548586bb96.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_f3c64191d6016767a5857fbb1bad26548586bb96.out \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_077cab6e271c914daf5b221cc512853077891f35.err \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_077cab6e271c914daf5b221cc512853077891f35.out \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_0ce56741d3c34af274c8ddb4b90c4e5749d05971.err \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_0ce56741d3c34af274c8ddb4b90c4e5749d05971.out \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_180ad44fe073cc9642da642af1f442adfd98ec62.err \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_180ad44fe073cc9642da642af1f442adfd98ec62.out \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_2230714a0b2ab6aca9ddfe686734f313cef5a96b.err \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_2230714a0b2ab6aca9ddfe686734f313cef5a96b.out \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_68515cfd0a50880f6dfc8f9810c9e761493ebb12.err \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_68515cfd0a50880f6dfc8f9810c9e761493ebb12.out \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_6de2a86c53883ec4430b98edd06b0c0cdf23e741.err \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_6de2a86c53883ec4430b98edd06b0c0cdf23e741.out \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_918178c6dd9d70d0432ededfde5af5e53c094385.err \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_918178c6dd9d70d0432ededfde5af5e53c094385.out \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_c76a24a209987e4c668c87588c12b8f34294b144.err \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_c76a24a209987e4c668c87588c12b8f34294b144.out \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_cacb045d2bce6dc298c4da3d96bdc34dab2404df.err \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_cacb045d2bce6dc298c4da3d96bdc34dab2404df.out \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_cae4bc239c924bbc05a0b099b63f0e3af7560976.err \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_cae4bc239c924bbc05a0b099b63f0e3af7560976.out \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_d4e3c9f7a38458726900731d2b71c104d591ef14.err \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_d4e3c9f7a38458726900731d2b71c104d591ef14.out \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_d5c8f7ab91c3dbe46add7e08f532b17797d9975c.err \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_d5c8f7ab91c3dbe46add7e08f532b17797d9975c.out \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_eb2c424733ce978d1b6d1dcb93d6e45af7c8fa96.err \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_eb2c424733ce978d1b6d1dcb93d6e45af7c8fa96.out \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_f045e94d921bfcfbded83ee681bf11445a99ff6d.err \
+ $(srcdir)/%reldir%/test_sql_coll_func.sh_f045e94d921bfcfbded83ee681bf11445a99ff6d.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_109ff42de817b56a9082f605f63af71c0db8c9d7.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_109ff42de817b56a9082f605f63af71c0db8c9d7.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_17b09f79bfcac1762153ec9650fb1e545a24d8a3.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_17b09f79bfcac1762153ec9650fb1e545a24d8a3.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_18ddc138b263dd06f3fe81fec05bc4330caffef7.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_18ddc138b263dd06f3fe81fec05bc4330caffef7.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_20a76db446a0a558dcbdf41033f97d4a22ca1bfa.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_20a76db446a0a558dcbdf41033f97d4a22ca1bfa.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_2c3f66e78deb8721b1d1fe5a787e9958895401d7.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_2c3f66e78deb8721b1d1fe5a787e9958895401d7.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_3ed11101a413e47c3dfe219557b7a6df04a64253.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_3ed11101a413e47c3dfe219557b7a6df04a64253.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_469380561dccd79c7249562067107c330838eaad.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_469380561dccd79c7249562067107c330838eaad.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_54b004f301907860d360434b37fd6c81fcc12f99.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_54b004f301907860d360434b37fd6c81fcc12f99.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_73df81c6889d1f06fb3f3b6bf30c6046b3f52c8b.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_73df81c6889d1f06fb3f3b6bf30c6046b3f52c8b.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_74ca242a126316bcb82ccefd9369f9e43b7fd2e1.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_74ca242a126316bcb82ccefd9369f9e43b7fd2e1.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_7b116cb0ab7a28b866e0d2b80fe8ef0cd25f2aa3.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_7b116cb0ab7a28b866e0d2b80fe8ef0cd25f2aa3.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_7b5d7dd8d0003ab83e3e5cb0a5ce802fe9a0e3b3.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_7b5d7dd8d0003ab83e3e5cb0a5ce802fe9a0e3b3.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_917ffde411c1425e8a6addae0170900dcd553986.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_917ffde411c1425e8a6addae0170900dcd553986.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_a247b137e71124e496f1beab56c7fe85717c4199.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_a247b137e71124e496f1beab56c7fe85717c4199.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_b66242975fd6ecb7260cd96ac29accaf4f4af6ae.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_b66242975fd6ecb7260cd96ac29accaf4f4af6ae.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_c5d78cfbf5594cc27590277353c08a92e2497622.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_c5d78cfbf5594cc27590277353c08a92e2497622.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_cc402803bf14ee3673089c575f1af87220cb6a72.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_cc402803bf14ee3673089c575f1af87220cb6a72.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_cf307d87104e99a1858bb7c4f28ea3068340f188.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_cf307d87104e99a1858bb7c4f28ea3068340f188.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_d51ad77cd67a2a691838c9d95142638df1c07360.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_d51ad77cd67a2a691838c9d95142638df1c07360.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_e24cf3f35643f945392e7d7a4ca82fea98b4519e.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_e24cf3f35643f945392e7d7a4ca82fea98b4519e.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_f31f240313ddec806aa6f353ceed707dfd9aaf16.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_f31f240313ddec806aa6f353ceed707dfd9aaf16.out \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_026dd9752b6101e0791689d3a2026f7e517e36f5.err \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_026dd9752b6101e0791689d3a2026f7e517e36f5.out \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.err \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.out \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.err \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.out \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.err \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.out \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.err \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.out \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.err \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.out \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.err \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.out \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.err \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.out \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.err \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_017d24148f3e28f719429b709f4aa5478f458443.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_017d24148f3e28f719429b709f4aa5478f458443.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_191436b38db80b1dd9e7e0814c31c5fa7239dc51.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_191436b38db80b1dd9e7e0814c31c5fa7239dc51.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_1a74914cbf12fcd5c06935b992f6355acdbcf2d8.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_1a74914cbf12fcd5c06935b992f6355acdbcf2d8.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_1c1a2d438d2bde95abd9a859d113c3661e650a36.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_1c1a2d438d2bde95abd9a859d113c3661e650a36.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_238417283b8e5db23c992f966e3f106bd178f7d0.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_238417283b8e5db23c992f966e3f106bd178f7d0.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_32459ba8e8bb9a1d9e63b6c67059d7f065cf4301.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_32459ba8e8bb9a1d9e63b6c67059d7f065cf4301.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_39c13797278d765c027d3581a0b6e0574f5c56eb.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_39c13797278d765c027d3581a0b6e0574f5c56eb.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_3cf4b66d40c4b1979ff14a9eccad8bd5ac48151c.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_3cf4b66d40c4b1979ff14a9eccad8bd5ac48151c.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_4192f378e320cb3f2c3c228b63ec65de92044704.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_4192f378e320cb3f2c3c228b63ec65de92044704.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_57c3aecdced547b837177ab02d3776361363e48d.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_57c3aecdced547b837177ab02d3776361363e48d.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_5b4a95677a1fc7d11f4b87d92165f56a60a65828.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_5b4a95677a1fc7d11f4b87d92165f56a60a65828.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_61417198a652aab93e9495b6e8cf3a634af175c6.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_61417198a652aab93e9495b6e8cf3a634af175c6.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_79ab816ac01c9902ddbb0f6f20392ab2f2cd6172.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_79ab816ac01c9902ddbb0f6f20392ab2f2cd6172.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_7c01aaf09078aaa3f23d127f9e03a317dca066de.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_7c01aaf09078aaa3f23d127f9e03a317dca066de.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_80c97b22084a06fd765ad22c935616c578968d07.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_80c97b22084a06fd765ad22c935616c578968d07.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_83d8615c9ce5dfab5e4373570c1b68b8608155f5.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_83d8615c9ce5dfab5e4373570c1b68b8608155f5.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_8cae9740ddfd6ba4c865fca0117b7bea3bb556e5.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_8cae9740ddfd6ba4c865fca0117b7bea3bb556e5.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_8e229f1b5fa3d3803e9db2f295a8d1a490e1b3db.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_8e229f1b5fa3d3803e9db2f295a8d1a490e1b3db.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_8e3724c90bf96dff5d8ba3cfaf4b7e2eaa9e5f66.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_8e3724c90bf96dff5d8ba3cfaf4b7e2eaa9e5f66.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_93ba3ba52b0dd2d5a3ba43bcb7c3638c05ecfe75.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_93ba3ba52b0dd2d5a3ba43bcb7c3638c05ecfe75.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_97aa53b581838f5875fe2beda8d1cb245a24f3d6.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_97aa53b581838f5875fe2beda8d1cb245a24f3d6.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_98a83bc899a78c04d1fdb390b2c1e403c35428c7.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_98a83bc899a78c04d1fdb390b2c1e403c35428c7.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_98ce02dff32d955466524bb167fa45fdf8591788.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_98ce02dff32d955466524bb167fa45fdf8591788.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_9ab4f51486d7cc99c584721bf0e50c223dac4f18.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_9ab4f51486d7cc99c584721bf0e50c223dac4f18.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_9d260ed24b28579ef1dbed25b10c42741e52b023.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_9d260ed24b28579ef1dbed25b10c42741e52b023.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_9fbfe3c93467666c45b643f3b8ba990a294c17ff.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_9fbfe3c93467666c45b643f3b8ba990a294c17ff.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_a4ffc64f89cf9917fbc918227fd3c05e54d9e8b5.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_a4ffc64f89cf9917fbc918227fd3c05e54d9e8b5.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_a5e179607645aefce14b9fd12ddef34107afe337.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_a5e179607645aefce14b9fd12ddef34107afe337.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_b2fc37822e29f7f59497a02a8968c680b545ee1d.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_b2fc37822e29f7f59497a02a8968c680b545ee1d.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_bbd979ed74b46ae1696ed7312a48a436bcf99ec0.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_bbd979ed74b46ae1696ed7312a48a436bcf99ec0.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_c1ae603d969a5b106328287523c0ddfed07146ad.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_c1ae603d969a5b106328287523c0ddfed07146ad.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_ebafb98307f307ae8d8ab6921c32929aab3a1a16.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_ebafb98307f307ae8d8ab6921c32929aab3a1a16.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_ee36fbea10a33ca106a211feb05d61ecf8e74634.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_ee36fbea10a33ca106a211feb05d61ecf8e74634.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_f1cbc70771cc75520f807261eac3a88dc2d8fe6b.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_f1cbc70771cc75520f807261eac3a88dc2d8fe6b.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_f34205b59e04f261897ad89f659595c743a18ca9.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_f34205b59e04f261897ad89f659595c743a18ca9.out \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.err \
+ $(srcdir)/%reldir%/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.out \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.err \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.out \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.err \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.out \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.err \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.out \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.err \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.out \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_d42e1fcfe6d42394f79da84be2d37e62c4c0ea63.err \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_d42e1fcfe6d42394f79da84be2d37e62c4c0ea63.out \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.err \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.out \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.err \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.out \
+ $(srcdir)/%reldir%/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.err \
+ $(srcdir)/%reldir%/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.out \
+ $(srcdir)/%reldir%/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.err \
+ $(srcdir)/%reldir%/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.out \
+ $(srcdir)/%reldir%/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.err \
+ $(srcdir)/%reldir%/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.out \
+ $(srcdir)/%reldir%/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.err \
+ $(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_005b9365ac99596e539f47c9fe432668c209b21f.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_005b9365ac99596e539f47c9fe432668c209b21f.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_04712488fe50554eb36d3ced80f9a033602f3daa.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_04712488fe50554eb36d3ced80f9a033602f3daa.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_11bcc5d32eabbedb6974f160dace9ef1ef0009e9.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_11bcc5d32eabbedb6974f160dace9ef1ef0009e9.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_129e58679e72f3cc5864812026e49a7917baf3d0.err \
+ $(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_1e7362ac3d9690b1b2cfbd320b6129c46ecfbb8a.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_1e7362ac3d9690b1b2cfbd320b6129c46ecfbb8a.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_211c5428db0590795072c31cb116ef35281e02b5.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_211c5428db0590795072c31cb116ef35281e02b5.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_2f189f0785bb81a1298db35e9e166983b633c73f.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_2f189f0785bb81a1298db35e9e166983b633c73f.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_30f65162174b886130b94a5dd1f094e7f09debed.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_30f65162174b886130b94a5dd1f094e7f09debed.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_352434d199f7b493668c9f2774472eb69ef0d9f0.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_352434d199f7b493668c9f2774472eb69ef0d9f0.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_36fc9005464f1106f969559e640d9fa36d5fadad.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_36fc9005464f1106f969559e640d9fa36d5fadad.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_3de72fe5c1751dd212a1cd45cf2caa7f3b52bced.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_3de72fe5c1751dd212a1cd45cf2caa7f3b52bced.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_4b402274da152135c6c99456b693e1ecabca0256.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_4b402274da152135c6c99456b693e1ecabca0256.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_51055e40d709332ee772ba5719039314bbf5e411.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_51055e40d709332ee772ba5719039314bbf5e411.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.err \
+ $(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_5abe3717393fba14ec510a37b4b94fedc67aae8e.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_5abe3717393fba14ec510a37b4b94fedc67aae8e.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_5e436fbd4efb140600999c5208886a5a57b8a30e.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_5e436fbd4efb140600999c5208886a5a57b8a30e.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_5f9979fa5ce7b76efe714bb27ffbe9f5927ae941.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_5f9979fa5ce7b76efe714bb27ffbe9f5927ae941.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_60a005a9f0d44ad022b5554415319933d5743c51.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_60a005a9f0d44ad022b5554415319933d5743c51.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_660288b48d9b30244621d873944938f7ef043976.err \
+ $(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_69f5d49e62da48e188bd9d6af4bd3adeb21eb7d1.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_69f5d49e62da48e188bd9d6af4bd3adeb21eb7d1.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_71f37db33504b2c08a7a3323c482556f53d88100.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_71f37db33504b2c08a7a3323c482556f53d88100.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_77fc174faeec1eda687a9373dbdbdd1aaef56e20.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_77fc174faeec1eda687a9373dbdbdd1aaef56e20.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_790da4aab5af901feeff5426790876eb91b967cb.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_790da4aab5af901feeff5426790876eb91b967cb.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_7a544cd702579c1fab35870428788ad763cf1143.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_7a544cd702579c1fab35870428788ad763cf1143.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_7b6e7c26e8a80459fef55d56156d6ff93c00bd49.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_7b6e7c26e8a80459fef55d56156d6ff93c00bd49.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_7c1e7604ac050e7047201638dca0a6b0fcfd8bdf.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_7c1e7604ac050e7047201638dca0a6b0fcfd8bdf.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_7f751009d0db15fc97f9113c5c84db05ff1de9c3.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_7f751009d0db15fc97f9113c5c84db05ff1de9c3.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_836e3f721a0f945ad27e7aa241121ba739aab618.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_836e3f721a0f945ad27e7aa241121ba739aab618.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_838e9bc7873b2b238157ba0358e0dfd6a01d837d.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_838e9bc7873b2b238157ba0358e0dfd6a01d837d.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_84e77dedec887c5e2433dbc5b130000cd88963bd.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_84e77dedec887c5e2433dbc5b130000cd88963bd.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_887afe94962d958aca2e03f7873d58ca93e190b5.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_887afe94962d958aca2e03f7873d58ca93e190b5.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_8c9ef83431ea75050fd16824075bf72056cf5f53.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_8c9ef83431ea75050fd16824075bf72056cf5f53.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_8cef54f0617960320b5d3615068eb27333dcf6a3.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_8cef54f0617960320b5d3615068eb27333dcf6a3.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_8f4f0ed74c4dc6b821e02a44552b694614cd9353.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_8f4f0ed74c4dc6b821e02a44552b694614cd9353.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_a4d84a0082a7df34c95c2e6e070bbf6effaa5594.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_a4d84a0082a7df34c95c2e6e070bbf6effaa5594.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_a65d2fb2f841578619528ca10168ca4d650218e9.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_a65d2fb2f841578619528ca10168ca4d650218e9.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_ac7ecdda0fcc4279a4694291edaa2f1411f5262e.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_ac7ecdda0fcc4279a4694291edaa2f1411f5262e.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_b0e5bf23bbbc0defa8bb26817782c9d46a778ad8.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_b0e5bf23bbbc0defa8bb26817782c9d46a778ad8.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_b2aafbcaa7befe426d3f9df71c24f16fdc9d2856.err \
+ $(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_bac7f6531a2adf70cd1871fb13eab26dff133b7c.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_bfb7088916412360f77683009058b0747784630a.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_bfb7088916412360f77683009058b0747784630a.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_bfe8b09e23389af0ef14359b66d68228d0285185.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_bfe8b09e23389af0ef14359b66d68228d0285185.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_c26269b10b9b9e8485aa97c2be2afb2cc3ee910d.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_c26269b10b9b9e8485aa97c2be2afb2cc3ee910d.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_c9e2f41431bef879364dc37a472ab01f64d89f89.err \
+ $(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_ce9db1dbc2e5fee87247135d17787ff3af014d77.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_ce9db1dbc2e5fee87247135d17787ff3af014d77.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_d3367527118052081a541a660b091f6f495b1c0d.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_d3367527118052081a541a660b091f6f495b1c0d.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_d4e805ff08d4ccf62865dbf8db8d526f7ce02f37.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_d4e805ff08d4ccf62865dbf8db8d526f7ce02f37.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_d8d4cde8bbc98175069be579ff5634de43880b8c.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_d8d4cde8bbc98175069be579ff5634de43880b8c.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_e68167bf5edc7a7b1defd06bdfb694ffa8b00df2.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_e68167bf5edc7a7b1defd06bdfb694ffa8b00df2.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_ec939e82da809965c61f1c00f68d7afaa4a88382.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_ec939e82da809965c61f1c00f68d7afaa4a88382.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_028e99419eb1ac80b03b36148ef1d4ae1c38c44c.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_028e99419eb1ac80b03b36148ef1d4ae1c38c44c.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_123c85ff1178743f5cb78efeaf98b637bcbe55ff.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_123c85ff1178743f5cb78efeaf98b637bcbe55ff.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_14737ee9597b7d22519d23fbe34c0eb7d6c09ff2.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_14737ee9597b7d22519d23fbe34c0eb7d6c09ff2.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_1fbeb1ba69a95284eb1d4d052f5068ede7968704.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_1fbeb1ba69a95284eb1d4d052f5068ede7968704.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_20477acc218c96f1385dc97e4d28c80a05c93709.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_20477acc218c96f1385dc97e4d28c80a05c93709.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_243454526f6b5e19485db771b4932ddffd6f83a4.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_243454526f6b5e19485db771b4932ddffd6f83a4.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_28638a132caae65fd89a68459d1b4af0000b8aef.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_28638a132caae65fd89a68459d1b4af0000b8aef.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_3b551281347a8144c84f00ade2664db9ac4aacab.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_3b551281347a8144c84f00ade2664db9ac4aacab.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_4035ee76938269e9247f9a696927a9ac18cce80a.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_4035ee76938269e9247f9a696927a9ac18cce80a.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_4b96fe71bc2d18955e3625b765a6095ab1f7a75d.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_4b96fe71bc2d18955e3625b765a6095ab1f7a75d.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_53b76b094e47691b5bca106142ee470e82e8e420.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_53b76b094e47691b5bca106142ee470e82e8e420.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_6288a9e690d381602b2be5665cc1cd3552733bc2.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_6288a9e690d381602b2be5665cc1cd3552733bc2.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_652bbd00b5159e22d94970ab1e882997d14b5777.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_652bbd00b5159e22d94970ab1e882997d14b5777.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_6832a58259168622af8b3370b0c89534f98f3f9f.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_6832a58259168622af8b3370b0c89534f98f3f9f.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_7797302b63d73234c9ec9f0405c7c0a748daf8e9.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_7797302b63d73234c9ec9f0405c7c0a748daf8e9.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_9569ab40cb2e51c60f818a6c2729c60d86565e7e.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_9569ab40cb2e51c60f818a6c2729c60d86565e7e.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_9e649c4bc10f4d178519983358f7092e9c5dfe71.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_9e649c4bc10f4d178519983358f7092e9c5dfe71.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_b0257ced663fc444801a5e6cba89c3053acca11e.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_b0257ced663fc444801a5e6cba89c3053acca11e.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_b5f9ec3ea8b4551fd40017398d74c524fb54ebc9.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_b5f9ec3ea8b4551fd40017398d74c524fb54ebc9.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_dbe786c096d5a7a5e1d05311b929f1427d8bac79.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_dbe786c096d5a7a5e1d05311b929f1427d8bac79.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_f3b1ea49779117bf45f85ad5615fdc5e89193db6.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_f3b1ea49779117bf45f85ad5615fdc5e89193db6.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_28e23f4e98b1acd6478e39844fd9306b444550c3.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_28e23f4e98b1acd6478e39844fd9306b444550c3.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_662b5f9b17aa69a8e3aa9a18acb30d9acf6e2837.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_662b5f9b17aa69a8e3aa9a18acb30d9acf6e2837.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_764ea85863d4f0ea3b7cb40850ac7c8fde682d57.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_764ea85863d4f0ea3b7cb40850ac7c8fde682d57.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_81ffd4ed3f62228494a966512791202cea7e3b57.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_81ffd4ed3f62228494a966512791202cea7e3b57.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_87f53d441e22c1d27c27eaa6003c83da1207c063.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_87f53d441e22c1d27c27eaa6003c83da1207c063.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_977cdf5d396522194d6b9e945169ff8073b4296b.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_977cdf5d396522194d6b9e945169ff8073b4296b.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_9a5be90921256e90428c77753eca5ea0d31bd910.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_9a5be90921256e90428c77753eca5ea0d31bd910.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_ac1f6e9a88608ef8939f9c2f7061a25a86742d46.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_ac1f6e9a88608ef8939f9c2f7061a25a86742d46.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_ade121f29bedea0d1a54452cc994b2302ad9dabb.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_ade121f29bedea0d1a54452cc994b2302ad9dabb.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_e036fabdc6c15f65a374b95c9922212670d494ee.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_e036fabdc6c15f65a374b95c9922212670d494ee.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_ec4623bd63ff353f50db44da1231e46a1a4f1824.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_ec4623bd63ff353f50db44da1231e46a1a4f1824.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_f7476c76ea51cf479a6a79b037e0cb59871b629c.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_f7476c76ea51cf479a6a79b037e0cb59871b629c.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_f8340cb4c62aabd839ea09235b6ebe41b2bb48f4.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_f8340cb4c62aabd839ea09235b6ebe41b2bb48f4.out \
+ $(srcdir)/%reldir%/test_sql_xml_func.sh_46dfa23e2effabf3fa150c4b871fd8d22b1c834d.err \
+ $(srcdir)/%reldir%/test_sql_xml_func.sh_46dfa23e2effabf3fa150c4b871fd8d22b1c834d.out \
+ $(srcdir)/%reldir%/test_sql_xml_func.sh_4effabf11b59580e5f0727199eb74fba049c0cda.err \
+ $(srcdir)/%reldir%/test_sql_xml_func.sh_4effabf11b59580e5f0727199eb74fba049c0cda.out \
+ $(srcdir)/%reldir%/test_sql_xml_func.sh_8912b59d5b515ab1373a3d9bc635ebabacd01dfd.err \
+ $(srcdir)/%reldir%/test_sql_xml_func.sh_8912b59d5b515ab1373a3d9bc635ebabacd01dfd.out \
+ $(srcdir)/%reldir%/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.err \
+ $(srcdir)/%reldir%/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.out \
+ $(srcdir)/%reldir%/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.err \
+ $(srcdir)/%reldir%/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.out \
+ $(srcdir)/%reldir%/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.err \
+ $(srcdir)/%reldir%/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.out \
+ $(srcdir)/%reldir%/test_sql_yaml_func.sh_dc189d02e8979b7ed245d5d750f68b9965984699.err \
+ $(srcdir)/%reldir%/test_sql_yaml_func.sh_dc189d02e8979b7ed245d5d750f68b9965984699.out \
+ $(srcdir)/%reldir%/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.err \
+ $(srcdir)/%reldir%/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.out \
+ $(srcdir)/%reldir%/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.err \
+ $(srcdir)/%reldir%/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.out \
+ $(srcdir)/%reldir%/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.err \
+ $(srcdir)/%reldir%/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.out \
+ $(srcdir)/%reldir%/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.err \
+ $(srcdir)/%reldir%/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.out \
+ $(srcdir)/%reldir%/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.err \
+ $(srcdir)/%reldir%/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.out \
+ $(srcdir)/%reldir%/test_text_file.sh_ac872aadda29b9a824361a2c711d62ec1c75d40f.err \
+ $(srcdir)/%reldir%/test_text_file.sh_ac872aadda29b9a824361a2c711d62ec1c75d40f.out \
+ $(srcdir)/%reldir%/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.err \
+ $(srcdir)/%reldir%/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.out \
+ $(srcdir)/%reldir%/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.err \
+ $(srcdir)/%reldir%/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.out \
+ $()
diff --git a/test/expected/test_cli.sh_17a68b798354f9a6cdfab372006caeb74038d15c.err b/test/expected/test_cli.sh_17a68b798354f9a6cdfab372006caeb74038d15c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cli.sh_17a68b798354f9a6cdfab372006caeb74038d15c.err
diff --git a/test/expected/test_cli.sh_17a68b798354f9a6cdfab372006caeb74038d15c.out b/test/expected/test_cli.sh_17a68b798354f9a6cdfab372006caeb74038d15c.out
new file mode 100644
index 0000000..3b130be
--- /dev/null
+++ b/test/expected/test_cli.sh_17a68b798354f9a6cdfab372006caeb74038d15c.out
@@ -0,0 +1 @@
+2021-07-03T21:49:29 Test
diff --git a/test/expected/test_cli.sh_5524542b1a6954ff9741155101497270a2f0c557.err b/test/expected/test_cli.sh_5524542b1a6954ff9741155101497270a2f0c557.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cli.sh_5524542b1a6954ff9741155101497270a2f0c557.err
diff --git a/test/expected/test_cli.sh_5524542b1a6954ff9741155101497270a2f0c557.out b/test/expected/test_cli.sh_5524542b1a6954ff9741155101497270a2f0c557.out
new file mode 100644
index 0000000..4c63930
--- /dev/null
+++ b/test/expected/test_cli.sh_5524542b1a6954ff9741155101497270a2f0c557.out
@@ -0,0 +1 @@
+a a a
diff --git a/test/expected/test_cli.sh_97e19b9ff3775d84074455a2e8993a0611b1c269.err b/test/expected/test_cli.sh_97e19b9ff3775d84074455a2e8993a0611b1c269.err
new file mode 100644
index 0000000..9d07883
--- /dev/null
+++ b/test/expected/test_cli.sh_97e19b9ff3775d84074455a2e8993a0611b1c269.err
@@ -0,0 +1,8 @@
+✘ error: invalid value for “-c” option
+ --> command-line argument
+ |  -c foo 
+ |  ^ command type prefix is missing
+ = help: command arguments must start with one of the following symbols to denote the type of command:
+ : - an lnav command (e.g. :goto 42)
+ ; - an SQL statement (e.g. ;SELECT * FROM syslog_log)
+ | - an lnav script (e.g. |rename-stdin foo)
diff --git a/test/expected/test_cli.sh_97e19b9ff3775d84074455a2e8993a0611b1c269.out b/test/expected/test_cli.sh_97e19b9ff3775d84074455a2e8993a0611b1c269.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cli.sh_97e19b9ff3775d84074455a2e8993a0611b1c269.out
diff --git a/test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.err b/test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.err
diff --git a/test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.out b/test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.out
new file mode 100644
index 0000000..1e0a993
--- /dev/null
+++ b/test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.out
@@ -0,0 +1,3 @@
+2013-06-06T19:13:20.123 Hello, World!
+2013-06-06T19:13:20.123 Goodbye, World!
+2013-06-06T19:13:20.123 ---- END-OF-STDIN ----
diff --git a/test/expected/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.err b/test/expected/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.err
diff --git a/test/expected/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.out b/test/expected/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.out
new file mode 100644
index 0000000..751c83b
--- /dev/null
+++ b/test/expected/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.out
@@ -0,0 +1,2 @@
+filepath lines 
+stdin   4 
diff --git a/test/expected/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.err b/test/expected/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.err
new file mode 100644
index 0000000..0d53487
--- /dev/null
+++ b/test/expected/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.err
@@ -0,0 +1,6 @@
+✘ error: no log files loaded
+ --> command-option:2
+ | :close 
+ = help: :close
+ ══════════════════════════════════════════════════════════════════════
+ Close the top file in the view
diff --git a/test/expected/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.out b/test/expected/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.out
diff --git a/test/expected/test_cmds.sh_0b1e4b1523dfca71927b1fe721c74490c51361d1.err b/test/expected/test_cmds.sh_0b1e4b1523dfca71927b1fe721c74490c51361d1.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_0b1e4b1523dfca71927b1fe721c74490c51361d1.err
diff --git a/test/expected/test_cmds.sh_0b1e4b1523dfca71927b1fe721c74490c51361d1.out b/test/expected/test_cmds.sh_0b1e4b1523dfca71927b1fe721c74490c51361d1.out
new file mode 100644
index 0000000..689436e
--- /dev/null
+++ b/test/expected/test_cmds.sh_0b1e4b1523dfca71927b1fe721c74490c51361d1.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:21:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:21:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:21:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_0b41fe57743ba0be088037d9ba29bc465e7c9bf9.err b/test/expected/test_cmds.sh_0b41fe57743ba0be088037d9ba29bc465e7c9bf9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_0b41fe57743ba0be088037d9ba29bc465e7c9bf9.err
diff --git a/test/expected/test_cmds.sh_0b41fe57743ba0be088037d9ba29bc465e7c9bf9.out b/test/expected/test_cmds.sh_0b41fe57743ba0be088037d9ba29bc465e7c9bf9.out
new file mode 100644
index 0000000..ccd015e
--- /dev/null
+++ b/test/expected/test_cmds.sh_0b41fe57743ba0be088037d9ba29bc465e7c9bf9.out
@@ -0,0 +1,3 @@
+c1,c2
+1,"Hello
+World!"
diff --git a/test/expected/test_cmds.sh_0f0ab532d8d845f8201af65bf5f6fc994e21a8aa.err b/test/expected/test_cmds.sh_0f0ab532d8d845f8201af65bf5f6fc994e21a8aa.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_0f0ab532d8d845f8201af65bf5f6fc994e21a8aa.err
diff --git a/test/expected/test_cmds.sh_0f0ab532d8d845f8201af65bf5f6fc994e21a8aa.out b/test/expected/test_cmds.sh_0f0ab532d8d845f8201af65bf5f6fc994e21a8aa.out
new file mode 100644
index 0000000..0dd4cb7
--- /dev/null
+++ b/test/expected/test_cmds.sh_0f0ab532d8d845f8201af65bf5f6fc994e21a8aa.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_109a44ac6a8f1be2736c8e9c47aeed187e0581ee.err b/test/expected/test_cmds.sh_109a44ac6a8f1be2736c8e9c47aeed187e0581ee.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_109a44ac6a8f1be2736c8e9c47aeed187e0581ee.err
diff --git a/test/expected/test_cmds.sh_109a44ac6a8f1be2736c8e9c47aeed187e0581ee.out b/test/expected/test_cmds.sh_109a44ac6a8f1be2736c8e9c47aeed187e0581ee.out
new file mode 100644
index 0000000..d51a68c
--- /dev/null
+++ b/test/expected/test_cmds.sh_109a44ac6a8f1be2736c8e9c47aeed187e0581ee.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_12856706bfb4a8e2686098dd2644a7989d370b02.err b/test/expected/test_cmds.sh_12856706bfb4a8e2686098dd2644a7989d370b02.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_12856706bfb4a8e2686098dd2644a7989d370b02.err
diff --git a/test/expected/test_cmds.sh_12856706bfb4a8e2686098dd2644a7989d370b02.out b/test/expected/test_cmds.sh_12856706bfb4a8e2686098dd2644a7989d370b02.out
new file mode 100644
index 0000000..d18c6b1
--- /dev/null
+++ b/test/expected/test_cmds.sh_12856706bfb4a8e2686098dd2644a7989d370b02.out
@@ -0,0 +1 @@
+How are you?
diff --git a/test/expected/test_cmds.sh_12b4cb9bd6586f9694100db76734b19a75158eab.err b/test/expected/test_cmds.sh_12b4cb9bd6586f9694100db76734b19a75158eab.err
new file mode 100644
index 0000000..f90b5d3
--- /dev/null
+++ b/test/expected/test_cmds.sh_12b4cb9bd6586f9694100db76734b19a75158eab.err
@@ -0,0 +1,7 @@
+✘ error: call to timeslice(time, slice) failed
+ reason: unable to parse time slice value: bad -- Unrecognized input
+ --> command-option:1
+ | :filter-expr timeslice(:log_time_msecs, 'bad') is not null
+ = help: :filter-expr expr
+ ══════════════════════════════════════════════════════════════════════
+ Set the filter expression
diff --git a/test/expected/test_cmds.sh_12b4cb9bd6586f9694100db76734b19a75158eab.out b/test/expected/test_cmds.sh_12b4cb9bd6586f9694100db76734b19a75158eab.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_12b4cb9bd6586f9694100db76734b19a75158eab.out
diff --git a/test/expected/test_cmds.sh_145126309709179759926289caf729703ef6e1c6.err b/test/expected/test_cmds.sh_145126309709179759926289caf729703ef6e1c6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_145126309709179759926289caf729703ef6e1c6.err
diff --git a/test/expected/test_cmds.sh_145126309709179759926289caf729703ef6e1c6.out b/test/expected/test_cmds.sh_145126309709179759926289caf729703ef6e1c6.out
new file mode 100644
index 0000000..d51a68c
--- /dev/null
+++ b/test/expected/test_cmds.sh_145126309709179759926289caf729703ef6e1c6.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_148007d2626b3c92d00ac31639b6918b1fc4aa60.err b/test/expected/test_cmds.sh_148007d2626b3c92d00ac31639b6918b1fc4aa60.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_148007d2626b3c92d00ac31639b6918b1fc4aa60.err
diff --git a/test/expected/test_cmds.sh_148007d2626b3c92d00ac31639b6918b1fc4aa60.out b/test/expected/test_cmds.sh_148007d2626b3c92d00ac31639b6918b1fc4aa60.out
new file mode 100644
index 0000000..6ebd88b
--- /dev/null
+++ b/test/expected/test_cmds.sh_148007d2626b3c92d00ac31639b6918b1fc4aa60.out
@@ -0,0 +1,2 @@
+Hello, World!
+-07-20 22:59:30,221:ERROR:Goodbye, Bork!
diff --git a/test/expected/test_cmds.sh_1cab7d240cf85ff2c3538f5a06af141b01bc83ad.err b/test/expected/test_cmds.sh_1cab7d240cf85ff2c3538f5a06af141b01bc83ad.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_1cab7d240cf85ff2c3538f5a06af141b01bc83ad.err
diff --git a/test/expected/test_cmds.sh_1cab7d240cf85ff2c3538f5a06af141b01bc83ad.out b/test/expected/test_cmds.sh_1cab7d240cf85ff2c3538f5a06af141b01bc83ad.out
new file mode 100644
index 0000000..45e6c41
--- /dev/null
+++ b/test/expected/test_cmds.sh_1cab7d240cf85ff2c3538f5a06af141b01bc83ad.out
@@ -0,0 +1,3 @@
+-07-20 22:59:27,672:DEBUG:Hello, Bork!
+ How are you today?
+-07-20 22:59:30,221:ERROR:Goodbye, Bork!
diff --git a/test/expected/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.err b/test/expected/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.err
diff --git a/test/expected/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.out b/test/expected/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.out
new file mode 100644
index 0000000..6dfcc1c
--- /dev/null
+++ b/test/expected/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.out
@@ -0,0 +1,68 @@
+[
+ {
+ "log_line": 0,
+ "log_part": null,
+ "log_time": "2009-07-20 22:59:26.000",
+ "log_idle_msecs": 0,
+ "log_level": "info",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "c_ip": "192.168.202.254",
+ "cs_method": "GET",
+ "cs_referer": "-",
+ "cs_uri_query": null,
+ "cs_uri_stem": "/vmw/cgi/tramp",
+ "cs_user_agent": "gPXE/0.9.7",
+ "cs_username": "-",
+ "cs_version": "HTTP/1.0",
+ "sc_bytes": 134,
+ "sc_status": 200,
+ "cs_host": null
+ },
+ {
+ "log_line": 1,
+ "log_part": null,
+ "log_time": "2009-07-20 22:59:29.000",
+ "log_idle_msecs": 3000,
+ "log_level": "error",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "c_ip": "192.168.202.254",
+ "cs_method": "GET",
+ "cs_referer": "-",
+ "cs_uri_query": null,
+ "cs_uri_stem": "/vmw/vSphere/default/vmkboot.gz",
+ "cs_user_agent": "gPXE/0.9.7",
+ "cs_username": "-",
+ "cs_version": "HTTP/1.0",
+ "sc_bytes": 46210,
+ "sc_status": 404,
+ "cs_host": null
+ },
+ {
+ "log_line": 2,
+ "log_part": null,
+ "log_time": "2009-07-20 22:59:29.000",
+ "log_idle_msecs": 0,
+ "log_level": "info",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "c_ip": "192.168.202.254",
+ "cs_method": "GET",
+ "cs_referer": "-",
+ "cs_uri_query": null,
+ "cs_uri_stem": "/vmw/vSphere/default/vmkernel.gz",
+ "cs_user_agent": "gPXE/0.9.7",
+ "cs_username": "-",
+ "cs_version": "HTTP/1.0",
+ "sc_bytes": 78929,
+ "sc_status": 200,
+ "cs_host": null
+ }
+]
diff --git a/test/expected/test_cmds.sh_1e1c8492b295913ce5afcd104cde0ec4ca1dcdac.err b/test/expected/test_cmds.sh_1e1c8492b295913ce5afcd104cde0ec4ca1dcdac.err
new file mode 100644
index 0000000..52606d5
--- /dev/null
+++ b/test/expected/test_cmds.sh_1e1c8492b295913ce5afcd104cde0ec4ca1dcdac.err
@@ -0,0 +1,6 @@
+✘ error: highlight does not exist -- foobar
+ --> command-option:1
+ | :clear-highlight foobar 
+ = help: :clear-highlight pattern
+ ══════════════════════════════════════════════════════════════════════
+ Remove a previously set highlight regular expression
diff --git a/test/expected/test_cmds.sh_1e1c8492b295913ce5afcd104cde0ec4ca1dcdac.out b/test/expected/test_cmds.sh_1e1c8492b295913ce5afcd104cde0ec4ca1dcdac.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_1e1c8492b295913ce5afcd104cde0ec4ca1dcdac.out
diff --git a/test/expected/test_cmds.sh_1f53f5b16c7c5aa695ed2e6427d822a1b940fcf4.err b/test/expected/test_cmds.sh_1f53f5b16c7c5aa695ed2e6427d822a1b940fcf4.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_1f53f5b16c7c5aa695ed2e6427d822a1b940fcf4.err
diff --git a/test/expected/test_cmds.sh_1f53f5b16c7c5aa695ed2e6427d822a1b940fcf4.out b/test/expected/test_cmds.sh_1f53f5b16c7c5aa695ed2e6427d822a1b940fcf4.out
new file mode 100644
index 0000000..0dd4cb7
--- /dev/null
+++ b/test/expected/test_cmds.sh_1f53f5b16c7c5aa695ed2e6427d822a1b940fcf4.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_22577861cb0921a7e7f3d1af6485938f4930ba7b.err b/test/expected/test_cmds.sh_22577861cb0921a7e7f3d1af6485938f4930ba7b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_22577861cb0921a7e7f3d1af6485938f4930ba7b.err
diff --git a/test/expected/test_cmds.sh_22577861cb0921a7e7f3d1af6485938f4930ba7b.out b/test/expected/test_cmds.sh_22577861cb0921a7e7f3d1af6485938f4930ba7b.out
new file mode 100644
index 0000000..d51a68c
--- /dev/null
+++ b/test/expected/test_cmds.sh_22577861cb0921a7e7f3d1af6485938f4930ba7b.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_2339d09953b6937981d8a448000c3fdc2837f8c4.err b/test/expected/test_cmds.sh_2339d09953b6937981d8a448000c3fdc2837f8c4.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_2339d09953b6937981d8a448000c3fdc2837f8c4.err
diff --git a/test/expected/test_cmds.sh_2339d09953b6937981d8a448000c3fdc2837f8c4.out b/test/expected/test_cmds.sh_2339d09953b6937981d8a448000c3fdc2837f8c4.out
new file mode 100644
index 0000000..83f15c5
--- /dev/null
+++ b/test/expected/test_cmds.sh_2339d09953b6937981d8a448000c3fdc2837f8c4.out
@@ -0,0 +1,12 @@
+Dec 6 13:01:34 ubu-mac avahi-daemon[786]: Joining mDNS multicast group on interface virbr0.IPv4 with address 192.168.122.1.
+Dec 6 13:01:34 ubu-mac avahi-daemon[786]: New relevant interface virbr0.IPv4 for mDNS.
+Dec 6 13:01:34 ubu-mac avahi-daemon[786]: Registering new address record for 192.168.122.1 on virbr0.IPv4.
+Dec 6 13:01:34 ubu-mac dnsmasq[1840]: started, version 2.68 cachesize 150
+Dec 6 13:01:34 ubu-mac dnsmasq[1840]: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth
+Dec 6 13:01:34 ubu-mac dnsmasq-dhcp[1840]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h
+Dec 6 13:01:34 ubu-mac dnsmasq-dhcp[1840]: DHCP, sockets bound exclusively to interface virbr0
+Dec 6 13:01:34 ubu-mac dnsmasq[1840]: reading /etc/resolv.conf
+Dec 6 13:01:34 ubu-mac dnsmasq[1840]: using nameserver 192.168.1.1#53
+Dec 6 13:01:34 ubu-mac dnsmasq[1840]: read /etc/hosts - 5 addresses
+Dec 6 13:01:34 ubu-mac dnsmasq[1840]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
+Dec 6 13:01:34 ubu-mac dnsmasq-dhcp[1840]: read /var/lib/libvirt/dnsmasq/default.hostsfile
diff --git a/test/expected/test_cmds.sh_2539ff9c4dbed93df3f0408ccc5fd81df34d1193.err b/test/expected/test_cmds.sh_2539ff9c4dbed93df3f0408ccc5fd81df34d1193.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_2539ff9c4dbed93df3f0408ccc5fd81df34d1193.err
diff --git a/test/expected/test_cmds.sh_2539ff9c4dbed93df3f0408ccc5fd81df34d1193.out b/test/expected/test_cmds.sh_2539ff9c4dbed93df3f0408ccc5fd81df34d1193.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_2539ff9c4dbed93df3f0408ccc5fd81df34d1193.out
diff --git a/test/expected/test_cmds.sh_29f0c808f4e93c6ef3890e6b793bee274a5b36ca.err b/test/expected/test_cmds.sh_29f0c808f4e93c6ef3890e6b793bee274a5b36ca.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_29f0c808f4e93c6ef3890e6b793bee274a5b36ca.err
diff --git a/test/expected/test_cmds.sh_29f0c808f4e93c6ef3890e6b793bee274a5b36ca.out b/test/expected/test_cmds.sh_29f0c808f4e93c6ef3890e6b793bee274a5b36ca.out
new file mode 100644
index 0000000..721d34f
--- /dev/null
+++ b/test/expected/test_cmds.sh_29f0c808f4e93c6ef3890e6b793bee274a5b36ca.out
@@ -0,0 +1 @@
+Hello, $XYZ!
diff --git a/test/expected/test_cmds.sh_2a449c0a43e895e85c8b1c9547f32d7b5b4f84f6.err b/test/expected/test_cmds.sh_2a449c0a43e895e85c8b1c9547f32d7b5b4f84f6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_2a449c0a43e895e85c8b1c9547f32d7b5b4f84f6.err
diff --git a/test/expected/test_cmds.sh_2a449c0a43e895e85c8b1c9547f32d7b5b4f84f6.out b/test/expected/test_cmds.sh_2a449c0a43e895e85c8b1c9547f32d7b5b4f84f6.out
new file mode 100644
index 0000000..b693f51
--- /dev/null
+++ b/test/expected/test_cmds.sh_2a449c0a43e895e85c8b1c9547f32d7b5b4f84f6.out
@@ -0,0 +1 @@
+/ui/clock-format = "%Y-%m-%dT%H:%M:%S %Z"
diff --git a/test/expected/test_cmds.sh_2a535de164de4c060d2bff34aa7cc75ac7cac2c2.err b/test/expected/test_cmds.sh_2a535de164de4c060d2bff34aa7cc75ac7cac2c2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_2a535de164de4c060d2bff34aa7cc75ac7cac2c2.err
diff --git a/test/expected/test_cmds.sh_2a535de164de4c060d2bff34aa7cc75ac7cac2c2.out b/test/expected/test_cmds.sh_2a535de164de4c060d2bff34aa7cc75ac7cac2c2.out
new file mode 100644
index 0000000..6ae2e70
--- /dev/null
+++ b/test/expected/test_cmds.sh_2a535de164de4c060d2bff34aa7cc75ac7cac2c2.out
@@ -0,0 +1,2 @@
+2009-07-20 22:59:27,672:DEBUG:Hello, World!
+ How are you today?
diff --git a/test/expected/test_cmds.sh_2cd167954a3be3e130e5f9601b72794a856cef92.err b/test/expected/test_cmds.sh_2cd167954a3be3e130e5f9601b72794a856cef92.err
new file mode 100644
index 0000000..30a1ac4
--- /dev/null
+++ b/test/expected/test_cmds.sh_2cd167954a3be3e130e5f9601b72794a856cef92.err
@@ -0,0 +1,6 @@
+✘ error: expecting file name or '-' to write to the terminal
+ --> command-option:1
+ | :write-to 
+ = help: :write-to [--anonymize] path
+ ══════════════════════════════════════════════════════════════════════
+ Overwrite the given file with any marked lines in the current view
diff --git a/test/expected/test_cmds.sh_2cd167954a3be3e130e5f9601b72794a856cef92.out b/test/expected/test_cmds.sh_2cd167954a3be3e130e5f9601b72794a856cef92.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_2cd167954a3be3e130e5f9601b72794a856cef92.out
diff --git a/test/expected/test_cmds.sh_2de9ec294e2f533d13e04c70d9525f8b58d47bb2.err b/test/expected/test_cmds.sh_2de9ec294e2f533d13e04c70d9525f8b58d47bb2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_2de9ec294e2f533d13e04c70d9525f8b58d47bb2.err
diff --git a/test/expected/test_cmds.sh_2de9ec294e2f533d13e04c70d9525f8b58d47bb2.out b/test/expected/test_cmds.sh_2de9ec294e2f533d13e04c70d9525f8b58d47bb2.out
new file mode 100644
index 0000000..8d4265f
--- /dev/null
+++ b/test/expected/test_cmds.sh_2de9ec294e2f533d13e04c70d9525f8b58d47bb2.out
@@ -0,0 +1,2 @@
+Hello, World!
+Goodbye, World!
diff --git a/test/expected/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.err b/test/expected/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.err
diff --git a/test/expected/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.out b/test/expected/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.out
new file mode 100644
index 0000000..8c91cd9
--- /dev/null
+++ b/test/expected/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.out
@@ -0,0 +1 @@
+2009-07-20 22:59:30,221:ERROR:Goodbye, World!
diff --git a/test/expected/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.err b/test/expected/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.err
diff --git a/test/expected/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.out b/test/expected/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.out
new file mode 100644
index 0000000..3f55261
--- /dev/null
+++ b/test/expected/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.out
@@ -0,0 +1,23 @@
+Apr 7 00:49:42 Tim-Abaft-iMac abashed[0]: Aberrant [abhorrent5701Aberrant]: Link up on en0, 1-Aboard, Full-abortive, Abounding flow-abrupt, Absent [796d,2301,0de1,0300,cde1,3800]
+Apr 7 05:49:53 Tim-Abaft-iMac.absorbing Abstracted[17212]: -[absurd abundant] absurd abusive accept: <acceptable:0x511f30
+ accessible=<KSOmahaServer:0x510d80>
+ url="https://achondroplasia.example.com/account/accurate2"
+ achiever=0
+ acid=1
+ acidic=1
+ acoustic=1
+ body=
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+ <o:gupdate xmlns:o="http://acinetobacter-infections.example.com/accurate2/acrid" protocol="2.0" version="Act-1.2.0.7709" ismachine="1" requestid="{1ca0a968-cbe9-e75b-d00b-4859609878ea}">
+ <o:os platform="mac" version="activity" sp="10.10.2_x86_64h"></o:os>
+ <o:app appid="com.actually.Ad hoc" version="1.2.0.7709" lang="en-us" installage="180" brand="GGLG">
+ <o:ping r="1" a="1"></o:ping>
+ <o:updatecheck></o:updatecheck>
+ </o:app>
+ </o:gupdate>
+ >
+Apr 7 07:31:56 Tim-Abaft-iMac.absorbing Add[36403]: ADDICTED: The Adhesive adjoining adjustment is admit 10.9.2 adorable of 10.10.2. Use advice's afford afraid to get afterthought aggressive agonizing agree
+ Call agreement:
+Apr 7 07:31:56 Tim-Abaft-iMac.absorbing Add[36403]: 0 Ahead 0x00007fff8a9b3d9b ___Adhesive_Air_airplane_airport + 113
+Apr 7 07:31:56 Tim-Abaft-iMac.absorbing Add[36403]: 1 ajar.alarm 0x00007fff8bc84c13 _alcoholic_alert_alike + 8
+Apr 7 07:32:56 Tim-Abaft-iMac.absorbing alive[234]: Bad data { abc, 123, 456 )}]
diff --git a/test/expected/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.err b/test/expected/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.err
diff --git a/test/expected/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.out b/test/expected/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.out
new file mode 100644
index 0000000..c6eedf2
--- /dev/null
+++ b/test/expected/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.out
@@ -0,0 +1 @@
+2009-07-20 22:59:30,221:ERROR:Goodbye, World!
diff --git a/test/expected/test_cmds.sh_305b1dfdfe785b945df4220aad6671ae1d364f55.err b/test/expected/test_cmds.sh_305b1dfdfe785b945df4220aad6671ae1d364f55.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_305b1dfdfe785b945df4220aad6671ae1d364f55.err
diff --git a/test/expected/test_cmds.sh_305b1dfdfe785b945df4220aad6671ae1d364f55.out b/test/expected/test_cmds.sh_305b1dfdfe785b945df4220aad6671ae1d364f55.out
new file mode 100644
index 0000000..8735c57
--- /dev/null
+++ b/test/expected/test_cmds.sh_305b1dfdfe785b945df4220aad6671ae1d364f55.out
@@ -0,0 +1 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_3429080ed14d01c6a887900186f37750df0d5ff0.err b/test/expected/test_cmds.sh_3429080ed14d01c6a887900186f37750df0d5ff0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_3429080ed14d01c6a887900186f37750df0d5ff0.err
diff --git a/test/expected/test_cmds.sh_3429080ed14d01c6a887900186f37750df0d5ff0.out b/test/expected/test_cmds.sh_3429080ed14d01c6a887900186f37750df0d5ff0.out
new file mode 100644
index 0000000..d51a68c
--- /dev/null
+++ b/test/expected/test_cmds.sh_3429080ed14d01c6a887900186f37750df0d5ff0.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_34a6bcaa2877471b8ea718374101fa9ce3b78235.err b/test/expected/test_cmds.sh_34a6bcaa2877471b8ea718374101fa9ce3b78235.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_34a6bcaa2877471b8ea718374101fa9ce3b78235.err
diff --git a/test/expected/test_cmds.sh_34a6bcaa2877471b8ea718374101fa9ce3b78235.out b/test/expected/test_cmds.sh_34a6bcaa2877471b8ea718374101fa9ce3b78235.out
new file mode 100644
index 0000000..8ab686e
--- /dev/null
+++ b/test/expected/test_cmds.sh_34a6bcaa2877471b8ea718374101fa9ce3b78235.out
@@ -0,0 +1 @@
+Hello, World!
diff --git a/test/expected/test_cmds.sh_35b0dd8a030396742bc5acfde7715fb19f312f29.err b/test/expected/test_cmds.sh_35b0dd8a030396742bc5acfde7715fb19f312f29.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_35b0dd8a030396742bc5acfde7715fb19f312f29.err
diff --git a/test/expected/test_cmds.sh_35b0dd8a030396742bc5acfde7715fb19f312f29.out b/test/expected/test_cmds.sh_35b0dd8a030396742bc5acfde7715fb19f312f29.out
new file mode 100644
index 0000000..fc2b6b9
--- /dev/null
+++ b/test/expected/test_cmds.sh_35b0dd8a030396742bc5acfde7715fb19f312f29.out
@@ -0,0 +1,3 @@
+/ui/clock-format = "%Y-%m-%dT%H:%M:%S %Z"
+info: changed config option -- /ui/clock-format
+/ui/clock-format = "abc"
diff --git a/test/expected/test_cmds.sh_36800217930a6a30e68c4efb20f6959c4f71aeb0.err b/test/expected/test_cmds.sh_36800217930a6a30e68c4efb20f6959c4f71aeb0.err
new file mode 100644
index 0000000..28d2b21
--- /dev/null
+++ b/test/expected/test_cmds.sh_36800217930a6a30e68c4efb20f6959c4f71aeb0.err
@@ -0,0 +1,7 @@
+✘ error: invalid filter expression: :sc_bytes # ff
+ reason: unrecognized token: "#"
+ --> command-option:1
+ | :filter-expr :sc_bytes # ff 
+ = help: :filter-expr expr
+ ══════════════════════════════════════════════════════════════════════
+ Set the filter expression
diff --git a/test/expected/test_cmds.sh_36800217930a6a30e68c4efb20f6959c4f71aeb0.out b/test/expected/test_cmds.sh_36800217930a6a30e68c4efb20f6959c4f71aeb0.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_36800217930a6a30e68c4efb20f6959c4f71aeb0.out
diff --git a/test/expected/test_cmds.sh_38fa2a95b703d4ce12e82882eca1938264822690.err b/test/expected/test_cmds.sh_38fa2a95b703d4ce12e82882eca1938264822690.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_38fa2a95b703d4ce12e82882eca1938264822690.err
diff --git a/test/expected/test_cmds.sh_38fa2a95b703d4ce12e82882eca1938264822690.out b/test/expected/test_cmds.sh_38fa2a95b703d4ce12e82882eca1938264822690.out
new file mode 100644
index 0000000..9ea386d
--- /dev/null
+++ b/test/expected/test_cmds.sh_38fa2a95b703d4ce12e82882eca1938264822690.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET ⋮ HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET ⋮ HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET ⋮ HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_3b20a298e2c059d7f6045cbc0c07ca3db3917695.err b/test/expected/test_cmds.sh_3b20a298e2c059d7f6045cbc0c07ca3db3917695.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_3b20a298e2c059d7f6045cbc0c07ca3db3917695.err
diff --git a/test/expected/test_cmds.sh_3b20a298e2c059d7f6045cbc0c07ca3db3917695.out b/test/expected/test_cmds.sh_3b20a298e2c059d7f6045cbc0c07ca3db3917695.out
new file mode 100644
index 0000000..d51a68c
--- /dev/null
+++ b/test/expected/test_cmds.sh_3b20a298e2c059d7f6045cbc0c07ca3db3917695.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.err b/test/expected/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.err
diff --git a/test/expected/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.out b/test/expected/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.out
new file mode 100644
index 0000000..dcd3557
--- /dev/null
+++ b/test/expected/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.out
@@ -0,0 +1,2 @@
+2009-07-20 22:59:30,221:ERROR:Goodbye, World!
+2009-07-20 22:59:30,221:ERROR:Goodbye, World!
diff --git a/test/expected/test_cmds.sh_4b2d91b19008d5b775090e3ef87c111f9e603b15.err b/test/expected/test_cmds.sh_4b2d91b19008d5b775090e3ef87c111f9e603b15.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_4b2d91b19008d5b775090e3ef87c111f9e603b15.err
diff --git a/test/expected/test_cmds.sh_4b2d91b19008d5b775090e3ef87c111f9e603b15.out b/test/expected/test_cmds.sh_4b2d91b19008d5b775090e3ef87c111f9e603b15.out
new file mode 100644
index 0000000..8d4265f
--- /dev/null
+++ b/test/expected/test_cmds.sh_4b2d91b19008d5b775090e3ef87c111f9e603b15.out
@@ -0,0 +1,2 @@
+Hello, World!
+Goodbye, World!
diff --git a/test/expected/test_cmds.sh_4dbe20c11056a07d2c7efb5ed15903050d628216.err b/test/expected/test_cmds.sh_4dbe20c11056a07d2c7efb5ed15903050d628216.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_4dbe20c11056a07d2c7efb5ed15903050d628216.err
diff --git a/test/expected/test_cmds.sh_4dbe20c11056a07d2c7efb5ed15903050d628216.out b/test/expected/test_cmds.sh_4dbe20c11056a07d2c7efb5ed15903050d628216.out
new file mode 100644
index 0000000..0dd4cb7
--- /dev/null
+++ b/test/expected/test_cmds.sh_4dbe20c11056a07d2c7efb5ed15903050d628216.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.err b/test/expected/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.err
diff --git a/test/expected/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.out b/test/expected/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.out
new file mode 100644
index 0000000..ef822cd
--- /dev/null
+++ b/test/expected/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.out
@@ -0,0 +1,3 @@
+2009-07-20 22:59:27,672:DEBUG:Hello, World!
+ How are you today?
+2009-07-20 22:59:30,221:ERROR:Goodbye, World!
diff --git a/test/expected/test_cmds.sh_512872aebaae73ca4f33fa93acb2f4e3b018f8b4.err b/test/expected/test_cmds.sh_512872aebaae73ca4f33fa93acb2f4e3b018f8b4.err
new file mode 100644
index 0000000..60db783
--- /dev/null
+++ b/test/expected/test_cmds.sh_512872aebaae73ca4f33fa93acb2f4e3b018f8b4.err
@@ -0,0 +1,5 @@
+✘ error: cannot open file: /non-existent
+ reason: No such file or directory
+ --> command-option:2
+ | :open /non-existent 
+ = help: make sure the file exists and is accessible
diff --git a/test/expected/test_cmds.sh_512872aebaae73ca4f33fa93acb2f4e3b018f8b4.out b/test/expected/test_cmds.sh_512872aebaae73ca4f33fa93acb2f4e3b018f8b4.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_512872aebaae73ca4f33fa93acb2f4e3b018f8b4.out
diff --git a/test/expected/test_cmds.sh_53a9686102f69b07b034df291f554a00b265ed20.err b/test/expected/test_cmds.sh_53a9686102f69b07b034df291f554a00b265ed20.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_53a9686102f69b07b034df291f554a00b265ed20.err
diff --git a/test/expected/test_cmds.sh_53a9686102f69b07b034df291f554a00b265ed20.out b/test/expected/test_cmds.sh_53a9686102f69b07b034df291f554a00b265ed20.out
new file mode 100644
index 0000000..39589f4
--- /dev/null
+++ b/test/expected/test_cmds.sh_53a9686102f69b07b034df291f554a00b265ed20.out
@@ -0,0 +1,2 @@
+toplevel here 123 456
+nested here nested.lnav abc 789
diff --git a/test/expected/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.err b/test/expected/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.err
new file mode 100644
index 0000000..e90b75a
--- /dev/null
+++ b/test/expected/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.err
@@ -0,0 +1,4 @@
+✘ error: unknown bookmark type: foobar
+ --> command-option:2
+ | :next-mark foobar 
+ = help: available types: error, file, meta, search, user, user-expr, warning
diff --git a/test/expected/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.out b/test/expected/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.out
diff --git a/test/expected/test_cmds.sh_5bfd08c1639701476d7b9348c36afd46fdbe6f2a.err b/test/expected/test_cmds.sh_5bfd08c1639701476d7b9348c36afd46fdbe6f2a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_5bfd08c1639701476d7b9348c36afd46fdbe6f2a.err
diff --git a/test/expected/test_cmds.sh_5bfd08c1639701476d7b9348c36afd46fdbe6f2a.out b/test/expected/test_cmds.sh_5bfd08c1639701476d7b9348c36afd46fdbe6f2a.out
new file mode 100644
index 0000000..d51a68c
--- /dev/null
+++ b/test/expected/test_cmds.sh_5bfd08c1639701476d7b9348c36afd46fdbe6f2a.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_624a41e152675575f4b07c19b2cf0e3a028429a2.err b/test/expected/test_cmds.sh_624a41e152675575f4b07c19b2cf0e3a028429a2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_624a41e152675575f4b07c19b2cf0e3a028429a2.err
diff --git a/test/expected/test_cmds.sh_624a41e152675575f4b07c19b2cf0e3a028429a2.out b/test/expected/test_cmds.sh_624a41e152675575f4b07c19b2cf0e3a028429a2.out
new file mode 100644
index 0000000..565e1c6
--- /dev/null
+++ b/test/expected/test_cmds.sh_624a41e152675575f4b07c19b2cf0e3a028429a2.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_62d68c0a11757c996f24c8f003e6b4059c3e30b2.err b/test/expected/test_cmds.sh_62d68c0a11757c996f24c8f003e6b4059c3e30b2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_62d68c0a11757c996f24c8f003e6b4059c3e30b2.err
diff --git a/test/expected/test_cmds.sh_62d68c0a11757c996f24c8f003e6b4059c3e30b2.out b/test/expected/test_cmds.sh_62d68c0a11757c996f24c8f003e6b4059c3e30b2.out
new file mode 100644
index 0000000..493283c
--- /dev/null
+++ b/test/expected/test_cmds.sh_62d68c0a11757c996f24c8f003e6b4059c3e30b2.out
@@ -0,0 +1 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_661ec61acdd8f6fa6ec1e3c2cf5f896eef431351.err b/test/expected/test_cmds.sh_661ec61acdd8f6fa6ec1e3c2cf5f896eef431351.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_661ec61acdd8f6fa6ec1e3c2cf5f896eef431351.err
diff --git a/test/expected/test_cmds.sh_661ec61acdd8f6fa6ec1e3c2cf5f896eef431351.out b/test/expected/test_cmds.sh_661ec61acdd8f6fa6ec1e3c2cf5f896eef431351.out
new file mode 100644
index 0000000..541a9b8
--- /dev/null
+++ b/test/expected/test_cmds.sh_661ec61acdd8f6fa6ec1e3c2cf5f896eef431351.out
@@ -0,0 +1,14 @@
+''
+{
+ "foo bar" : null,
+  "array" : [
+  1,
+  2,
+  3
+ ],
+ "obj" : {
+ "one" : 1,
+ "two" : true
+ }
+}
+''
diff --git a/test/expected/test_cmds.sh_6a6031113aca32fabc5a3da64b7be46f5ce5a312.err b/test/expected/test_cmds.sh_6a6031113aca32fabc5a3da64b7be46f5ce5a312.err
new file mode 100644
index 0000000..bcc3200
--- /dev/null
+++ b/test/expected/test_cmds.sh_6a6031113aca32fabc5a3da64b7be46f5ce5a312.err
@@ -0,0 +1,8 @@
+✘ error: expecting file name to open
+ --> command-option:1
+ | :open 
+ = help: :open path1 [... pathN]
+ ══════════════════════════════════════════════════════════════════════
+ Open the given file(s) in lnav. Opening files on machines
+ accessible via SSH can be done using the syntax:
+ [user@]host:/path/to/logs
diff --git a/test/expected/test_cmds.sh_6a6031113aca32fabc5a3da64b7be46f5ce5a312.out b/test/expected/test_cmds.sh_6a6031113aca32fabc5a3da64b7be46f5ce5a312.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_6a6031113aca32fabc5a3da64b7be46f5ce5a312.out
diff --git a/test/expected/test_cmds.sh_6e016c0ed61fc652be1a79b864875ffede64f281.err b/test/expected/test_cmds.sh_6e016c0ed61fc652be1a79b864875ffede64f281.err
new file mode 100644
index 0000000..6c8e8ae
--- /dev/null
+++ b/test/expected/test_cmds.sh_6e016c0ed61fc652be1a79b864875ffede64f281.err
@@ -0,0 +1,4 @@
+✘ error: invalid zoom level: bad
+ --> command-option:1
+ | :zoom-to bad 
+ = help: available levels: 1-second, 30-second, 1-minute, 5-minute, 15-minute, 1-hour, 4-hour, 8-hour, 1-day, 1-week
diff --git a/test/expected/test_cmds.sh_6e016c0ed61fc652be1a79b864875ffede64f281.out b/test/expected/test_cmds.sh_6e016c0ed61fc652be1a79b864875ffede64f281.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_6e016c0ed61fc652be1a79b864875ffede64f281.out
diff --git a/test/expected/test_cmds.sh_7270e37dab4549cfa7c5232451c031e1e04b4aef.err b/test/expected/test_cmds.sh_7270e37dab4549cfa7c5232451c031e1e04b4aef.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_7270e37dab4549cfa7c5232451c031e1e04b4aef.err
diff --git a/test/expected/test_cmds.sh_7270e37dab4549cfa7c5232451c031e1e04b4aef.out b/test/expected/test_cmds.sh_7270e37dab4549cfa7c5232451c031e1e04b4aef.out
new file mode 100644
index 0000000..bccea86
--- /dev/null
+++ b/test/expected/test_cmds.sh_7270e37dab4549cfa7c5232451c031e1e04b4aef.out
@@ -0,0 +1 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_73ea99c84fb1d4570e8bcd45c423b4a28fe41e81.err b/test/expected/test_cmds.sh_73ea99c84fb1d4570e8bcd45c423b4a28fe41e81.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_73ea99c84fb1d4570e8bcd45c423b4a28fe41e81.err
diff --git a/test/expected/test_cmds.sh_73ea99c84fb1d4570e8bcd45c423b4a28fe41e81.out b/test/expected/test_cmds.sh_73ea99c84fb1d4570e8bcd45c423b4a28fe41e81.out
new file mode 100644
index 0000000..0dd4cb7
--- /dev/null
+++ b/test/expected/test_cmds.sh_73ea99c84fb1d4570e8bcd45c423b4a28fe41e81.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.err b/test/expected/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.err
diff --git a/test/expected/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.out b/test/expected/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.out
new file mode 100644
index 0000000..7ad9d78
--- /dev/null
+++ b/test/expected/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.out
@@ -0,0 +1,5 @@
+┏━━┳━━━━━━━━━━━━━┓
+┃c1┃ c2 ┃
+┡━━╇━━━━━━━━━━━━━┩
+│ 1│Hello, World!│
+└━━┴━━━━━━━━━━━━━┘
diff --git a/test/expected/test_cmds.sh_7e14e7f18219719453838835fa96c3451f78996d.err b/test/expected/test_cmds.sh_7e14e7f18219719453838835fa96c3451f78996d.err
new file mode 100644
index 0000000..22e6c3e
--- /dev/null
+++ b/test/expected/test_cmds.sh_7e14e7f18219719453838835fa96c3451f78996d.err
@@ -0,0 +1,6 @@
+✘ error: expecting an SQL expression
+ --> command-option:1
+ | :mark-expr 
+ = help: :mark-expr expr
+ ══════════════════════════════════════════════════════════════════════
+ Set the bookmark expression
diff --git a/test/expected/test_cmds.sh_7e14e7f18219719453838835fa96c3451f78996d.out b/test/expected/test_cmds.sh_7e14e7f18219719453838835fa96c3451f78996d.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_7e14e7f18219719453838835fa96c3451f78996d.out
diff --git a/test/expected/test_cmds.sh_819b3dd21348f7242f3914ad0a8c5b1cdb3f91af.err b/test/expected/test_cmds.sh_819b3dd21348f7242f3914ad0a8c5b1cdb3f91af.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_819b3dd21348f7242f3914ad0a8c5b1cdb3f91af.err
diff --git a/test/expected/test_cmds.sh_819b3dd21348f7242f3914ad0a8c5b1cdb3f91af.out b/test/expected/test_cmds.sh_819b3dd21348f7242f3914ad0a8c5b1cdb3f91af.out
new file mode 100644
index 0000000..67f6093
--- /dev/null
+++ b/test/expected/test_cmds.sh_819b3dd21348f7242f3914ad0a8c5b1cdb3f91af.out
@@ -0,0 +1 @@
+Hello: Jules
diff --git a/test/expected/test_cmds.sh_8298805f897346b4bb0f14e53c06b4fa28e309e3.err b/test/expected/test_cmds.sh_8298805f897346b4bb0f14e53c06b4fa28e309e3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_8298805f897346b4bb0f14e53c06b4fa28e309e3.err
diff --git a/test/expected/test_cmds.sh_8298805f897346b4bb0f14e53c06b4fa28e309e3.out b/test/expected/test_cmds.sh_8298805f897346b4bb0f14e53c06b4fa28e309e3.out
new file mode 100644
index 0000000..220b552
--- /dev/null
+++ b/test/expected/test_cmds.sh_8298805f897346b4bb0f14e53c06b4fa28e309e3.out
@@ -0,0 +1,3 @@
+⋮ - - [20/Jul/2009:22:59:26 +0000] "GET ⋮ HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+⋮ - - [20/Jul/2009:22:59:29 +0000] "GET ⋮ HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+⋮ - - [20/Jul/2009:22:59:29 +0000] "GET ⋮ HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_83654557317602d2e00adde1e5cba190d9db0dff.err b/test/expected/test_cmds.sh_83654557317602d2e00adde1e5cba190d9db0dff.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_83654557317602d2e00adde1e5cba190d9db0dff.err
diff --git a/test/expected/test_cmds.sh_83654557317602d2e00adde1e5cba190d9db0dff.out b/test/expected/test_cmds.sh_83654557317602d2e00adde1e5cba190d9db0dff.out
new file mode 100644
index 0000000..a90f29f
--- /dev/null
+++ b/test/expected/test_cmds.sh_83654557317602d2e00adde1e5cba190d9db0dff.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_85ae6ac1eb9a8378f7a6c39659f52671218ce64b.err b/test/expected/test_cmds.sh_85ae6ac1eb9a8378f7a6c39659f52671218ce64b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_85ae6ac1eb9a8378f7a6c39659f52671218ce64b.err
diff --git a/test/expected/test_cmds.sh_85ae6ac1eb9a8378f7a6c39659f52671218ce64b.out b/test/expected/test_cmds.sh_85ae6ac1eb9a8378f7a6c39659f52671218ce64b.out
new file mode 100644
index 0000000..6be811e
--- /dev/null
+++ b/test/expected/test_cmds.sh_85ae6ac1eb9a8378f7a6c39659f52671218ce64b.out
@@ -0,0 +1 @@
+1Hello, World!
diff --git a/test/expected/test_cmds.sh_85ed177028f226e86b1d164eb1a4e18eaf036c9d.err b/test/expected/test_cmds.sh_85ed177028f226e86b1d164eb1a4e18eaf036c9d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_85ed177028f226e86b1d164eb1a4e18eaf036c9d.err
diff --git a/test/expected/test_cmds.sh_85ed177028f226e86b1d164eb1a4e18eaf036c9d.out b/test/expected/test_cmds.sh_85ed177028f226e86b1d164eb1a4e18eaf036c9d.out
new file mode 100644
index 0000000..f586ffe
--- /dev/null
+++ b/test/expected/test_cmds.sh_85ed177028f226e86b1d164eb1a4e18eaf036c9d.out
@@ -0,0 +1 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_8758082427d6232a15053433942a4b5ad9f2e3ce.err b/test/expected/test_cmds.sh_8758082427d6232a15053433942a4b5ad9f2e3ce.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_8758082427d6232a15053433942a4b5ad9f2e3ce.err
diff --git a/test/expected/test_cmds.sh_8758082427d6232a15053433942a4b5ad9f2e3ce.out b/test/expected/test_cmds.sh_8758082427d6232a15053433942a4b5ad9f2e3ce.out
new file mode 100644
index 0000000..493283c
--- /dev/null
+++ b/test/expected/test_cmds.sh_8758082427d6232a15053433942a4b5ad9f2e3ce.out
@@ -0,0 +1 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_876116da8ab46c0c8a212ce230d1b8a13970f78f.err b/test/expected/test_cmds.sh_876116da8ab46c0c8a212ce230d1b8a13970f78f.err
new file mode 100644
index 0000000..2276bac
--- /dev/null
+++ b/test/expected/test_cmds.sh_876116da8ab46c0c8a212ce230d1b8a13970f78f.err
@@ -0,0 +1,6 @@
+✘ error: expecting a unix time value
+ --> command-option:1
+ | :unix-time 
+ = help: :unix-time seconds
+ ══════════════════════════════════════════════════════════════════════
+ Convert epoch time to a human-readable form
diff --git a/test/expected/test_cmds.sh_876116da8ab46c0c8a212ce230d1b8a13970f78f.out b/test/expected/test_cmds.sh_876116da8ab46c0c8a212ce230d1b8a13970f78f.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_876116da8ab46c0c8a212ce230d1b8a13970f78f.out
diff --git a/test/expected/test_cmds.sh_8765cbf326648e9014f8cf5f761895010fff443a.err b/test/expected/test_cmds.sh_8765cbf326648e9014f8cf5f761895010fff443a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_8765cbf326648e9014f8cf5f761895010fff443a.err
diff --git a/test/expected/test_cmds.sh_8765cbf326648e9014f8cf5f761895010fff443a.out b/test/expected/test_cmds.sh_8765cbf326648e9014f8cf5f761895010fff443a.out
new file mode 100644
index 0000000..330e041
--- /dev/null
+++ b/test/expected/test_cmds.sh_8765cbf326648e9014f8cf5f761895010fff443a.out
@@ -0,0 +1,37 @@
+2015-03-12T23:16:52.071:INFO:com.root:Response :
+ <?xml version="1.0"?>
+<response>
+ <locale>en-US</locale>
+ <requestid>ipInfo</requestid>
+ <value id="ipv4Gateway" actions="enabled">198.51.100.253</value>
+ <value id="ipv6Gateway" actions="enabled"/>
+ <value id="ipv6Enabled" actions="enabled">true</value>
+ <value id="ipv4Enabled" actions="enabled">true</value>
+ <value id="name" actions="enabled">nic1</value>
+ <value id="v4config" actions="enabled">
+ <value id="defaultGateway" actions="enabled">0.0.0.0</value>
+ <value id="updateable" actions="enabled">True</value>
+ <value id="prefix" actions="enabled">22</value>
+ <value id="mode" actions="enabled">dhcp</value>
+ <value id="address" actions="enabled">198.51.100.110</value>
+ <value id="interface" actions="enabled">nic1</value>
+ </value>
+ <value id="v6config" actions="enabled">
+ <value id="defaultGateway" actions="enabled">fe80::214:f609:19f7:6bf1</value>
+ <value id="updateable" actions="enabled">True</value>
+ <value id="interface" actions="enabled">nic1</value>
+ <value id="dhcp" actions="enabled">False</value>
+ <value id="autoconf" actions="enabled">False</value>
+ <value id="addresses" actions="enabled">
+ <value id="origin" actions="enabled">other</value>
+ <value id="status" actions="enabled">preferred</value>
+ <value id="prefix" actions="enabled">64</value>
+ <value id="address" actions="enabled">fe80::250:56ff:feaa:5abf</value>
+ </value>
+ </value>
+ <value id="interfaceInfo" actions="enabled">
+ <value id="status" actions="enabled">up</value>
+ <value id="mac" actions="enabled">00:50:56:aa:5a:bf</value>
+ <value id="name" actions="enabled">nic1</value>
+ </value>
+</response>
diff --git a/test/expected/test_cmds.sh_89afa826d1b33be6926df48443faa1d1c5f285a7.err b/test/expected/test_cmds.sh_89afa826d1b33be6926df48443faa1d1c5f285a7.err
new file mode 100644
index 0000000..492a07d
--- /dev/null
+++ b/test/expected/test_cmds.sh_89afa826d1b33be6926df48443faa1d1c5f285a7.err
@@ -0,0 +1,6 @@
+✘ error: write-json-to -- unavailable in secure mode
+ --> command-option:2
+ | :write-json-to /tmp/bad 
+ = help: :write-json-to [--anonymize] path
+ ══════════════════════════════════════════════════════════════════════
+ Write SQL results to the given file in JSON format
diff --git a/test/expected/test_cmds.sh_89afa826d1b33be6926df48443faa1d1c5f285a7.out b/test/expected/test_cmds.sh_89afa826d1b33be6926df48443faa1d1c5f285a7.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_89afa826d1b33be6926df48443faa1d1c5f285a7.out
diff --git a/test/expected/test_cmds.sh_8d5b43c693e78804a8fb06989392fa8cccb46b7b.err b/test/expected/test_cmds.sh_8d5b43c693e78804a8fb06989392fa8cccb46b7b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_8d5b43c693e78804a8fb06989392fa8cccb46b7b.err
diff --git a/test/expected/test_cmds.sh_8d5b43c693e78804a8fb06989392fa8cccb46b7b.out b/test/expected/test_cmds.sh_8d5b43c693e78804a8fb06989392fa8cccb46b7b.out
new file mode 100644
index 0000000..3cc484d
--- /dev/null
+++ b/test/expected/test_cmds.sh_8d5b43c693e78804a8fb06989392fa8cccb46b7b.out
@@ -0,0 +1,2 @@
+info: hiding lines before 2009-07-20 22:59:29.000
+info: hiding lines before 2009-07-20 22:59:29.000
diff --git a/test/expected/test_cmds.sh_9445861db011dfa2d21a44788047de345ee291e8.err b/test/expected/test_cmds.sh_9445861db011dfa2d21a44788047de345ee291e8.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_9445861db011dfa2d21a44788047de345ee291e8.err
diff --git a/test/expected/test_cmds.sh_9445861db011dfa2d21a44788047de345ee291e8.out b/test/expected/test_cmds.sh_9445861db011dfa2d21a44788047de345ee291e8.out
new file mode 100644
index 0000000..0dd4cb7
--- /dev/null
+++ b/test/expected/test_cmds.sh_9445861db011dfa2d21a44788047de345ee291e8.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_95beaabe41d72cf4c6810e79c623da759ac1c71b.err b/test/expected/test_cmds.sh_95beaabe41d72cf4c6810e79c623da759ac1c71b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_95beaabe41d72cf4c6810e79c623da759ac1c71b.err
diff --git a/test/expected/test_cmds.sh_95beaabe41d72cf4c6810e79c623da759ac1c71b.out b/test/expected/test_cmds.sh_95beaabe41d72cf4c6810e79c623da759ac1c71b.out
new file mode 100644
index 0000000..d51a68c
--- /dev/null
+++ b/test/expected/test_cmds.sh_95beaabe41d72cf4c6810e79c623da759ac1c71b.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_968dac54dc80d91a5da2322890c6c26dfa0d8462.err b/test/expected/test_cmds.sh_968dac54dc80d91a5da2322890c6c26dfa0d8462.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_968dac54dc80d91a5da2322890c6c26dfa0d8462.err
diff --git a/test/expected/test_cmds.sh_968dac54dc80d91a5da2322890c6c26dfa0d8462.out b/test/expected/test_cmds.sh_968dac54dc80d91a5da2322890c6c26dfa0d8462.out
new file mode 100644
index 0000000..2678e6c
--- /dev/null
+++ b/test/expected/test_cmds.sh_968dac54dc80d91a5da2322890c6c26dfa0d8462.out
@@ -0,0 +1 @@
+10.112.81.15 - - [15/Feb/2013:06:00:31 +0000] "-" 400 0 "-" "-"
diff --git a/test/expected/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.err b/test/expected/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.err
diff --git a/test/expected/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.out b/test/expected/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.out
new file mode 100644
index 0000000..01761e9
--- /dev/null
+++ b/test/expected/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.out
@@ -0,0 +1,4 @@
+ Thu Nov 03 09:20:00  1 normal 2 errors 0 warnings  0 marks
+ Thu Nov 03 09:45:00  1 normal 0 errors 0 warnings 0 marks
+ Fri Feb 03 09:20:00  0 normal 1 errors 0 warnings 0 marks
+ Wed Jan 03 09:20:00  1 normal 0 errors 0 warnings 0 marks
diff --git a/test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.err b/test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.err
diff --git a/test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.out b/test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.out
new file mode 100644
index 0000000..1d3eae4
--- /dev/null
+++ b/test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.out
@@ -0,0 +1,2 @@
+log_top_line() 
+ 51
diff --git a/test/expected/test_cmds.sh_a1123427c31c022433d66d05ee5d5e1c8ab415e4.err b/test/expected/test_cmds.sh_a1123427c31c022433d66d05ee5d5e1c8ab415e4.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_a1123427c31c022433d66d05ee5d5e1c8ab415e4.err
diff --git a/test/expected/test_cmds.sh_a1123427c31c022433d66d05ee5d5e1c8ab415e4.out b/test/expected/test_cmds.sh_a1123427c31c022433d66d05ee5d5e1c8ab415e4.out
new file mode 100644
index 0000000..d51a68c
--- /dev/null
+++ b/test/expected/test_cmds.sh_a1123427c31c022433d66d05ee5d5e1c8ab415e4.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_a190bfc279fa046a823864f1484f899d27d22953.err b/test/expected/test_cmds.sh_a190bfc279fa046a823864f1484f899d27d22953.err
new file mode 100644
index 0000000..5f4c49b
--- /dev/null
+++ b/test/expected/test_cmds.sh_a190bfc279fa046a823864f1484f899d27d22953.err
@@ -0,0 +1,3 @@
+✘ error: unknown script -- nonexistent.lnav -- file not found
+ --> command-option:1
+ | |nonexistent.lnav 
diff --git a/test/expected/test_cmds.sh_a190bfc279fa046a823864f1484f899d27d22953.out b/test/expected/test_cmds.sh_a190bfc279fa046a823864f1484f899d27d22953.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_a190bfc279fa046a823864f1484f899d27d22953.out
diff --git a/test/expected/test_cmds.sh_a5742238bad948b1372d32f7a491f03fa4e8b711.err b/test/expected/test_cmds.sh_a5742238bad948b1372d32f7a491f03fa4e8b711.err
new file mode 100644
index 0000000..1c20a91
--- /dev/null
+++ b/test/expected/test_cmds.sh_a5742238bad948b1372d32f7a491f03fa4e8b711.err
@@ -0,0 +1,6 @@
+✘ error: unknown configuration option -- /bad/option
+ --> command-option:1
+ | :config /bad/option 
+ = help: :config option [value]
+ ══════════════════════════════════════════════════════════════════════
+ Read or write a configuration option
diff --git a/test/expected/test_cmds.sh_a5742238bad948b1372d32f7a491f03fa4e8b711.out b/test/expected/test_cmds.sh_a5742238bad948b1372d32f7a491f03fa4e8b711.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_a5742238bad948b1372d32f7a491f03fa4e8b711.out
diff --git a/test/expected/test_cmds.sh_a6c431f2871ea96cfdf4e11465b3bca543c7b678.err b/test/expected/test_cmds.sh_a6c431f2871ea96cfdf4e11465b3bca543c7b678.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_a6c431f2871ea96cfdf4e11465b3bca543c7b678.err
diff --git a/test/expected/test_cmds.sh_a6c431f2871ea96cfdf4e11465b3bca543c7b678.out b/test/expected/test_cmds.sh_a6c431f2871ea96cfdf4e11465b3bca543c7b678.out
new file mode 100644
index 0000000..c3813a5
--- /dev/null
+++ b/test/expected/test_cmds.sh_a6c431f2871ea96cfdf4e11465b3bca543c7b678.out
@@ -0,0 +1,10 @@
+Sep 13 03:12:04 Tim-Stacks-iMac kernel[0]: vm_compressor_record_warmup (9478314 - 9492476)
+Sep 13 03:12:04 Tim-Stacks-iMac kernel[0]: AppleBCM5701Ethernet [en0]: 0 0 memWrInd fBJP_Wakeup_Timer
+Sep 13 01:25:39 Tim-Stacks-iMac kernel[0]: AppleThunderboltNHIType2::waitForOk2Go2Sx - retries = 60000
+Sep 13 03:12:04 Tim-Stacks-iMac kernel[0]: hibernate_page_list_setall(preflight 0) start 0xffffff8428276000, 0xffffff8428336000
+Sep 13 03:12:58 Tim-Stacks-iMac kernel[0]: *** kernel exceeded 500 log message per second limit - remaining messages this second discarded ***
+Sep 13 03:46:03 Tim-Stacks-iMac kernel[0]: IOThunderboltSwitch<0xffffff803f4b3000>(0x0)::listenerCallback - Thunderbolt HPD packet for route = 0x0 port = 11 unplug = 0
+Sep 13 03:46:03 Tim-Stacks-iMac kernel[0]: vm_compressor_flush - starting
+Sep 13 03:46:03 Tim-Stacks-iMac kernel[0]: AppleBCM5701Ethernet [en0]: 0 0 memWrInd fBJP_Wakeup_Timer
+Sep 13 03:13:16 Tim-Stacks-iMac kernel[0]: AppleThunderboltNHIType2::waitForOk2Go2Sx - retries = 60000
+Sep 13 03:46:03 Tim-Stacks-iMac kernel[0]: hibernate_page_list_setall(preflight 0) start 0xffffff838f1fc000, 0xffffff838f2bc000
diff --git a/test/expected/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.err b/test/expected/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.err
new file mode 100644
index 0000000..644b202
--- /dev/null
+++ b/test/expected/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.err
@@ -0,0 +1,7 @@
+✘ error: filter limit reached, try combining filters with a pipe symbol (e.g. foo|bar)
+ --> command-option:32
+ | :filter-out 32 
+ = help: :filter-out pattern
+ ══════════════════════════════════════════════════════════════════════
+ Remove lines that match the given regular expression in the current
+ view
diff --git a/test/expected/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.out b/test/expected/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.out
diff --git a/test/expected/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.err b/test/expected/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.err
diff --git a/test/expected/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.out b/test/expected/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.out
new file mode 100644
index 0000000..fa6a319
--- /dev/null
+++ b/test/expected/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.out
@@ -0,0 +1,12 @@
+{
+ "foo bar": null,
+ "array": [
+ 1,
+ 2,
+ 3
+ ],
+ "obj": {
+ "one": 1,
+ "two": true
+ }
+}
diff --git a/test/expected/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.err b/test/expected/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.err
diff --git a/test/expected/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.out b/test/expected/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.out
new file mode 100644
index 0000000..be06882
--- /dev/null
+++ b/test/expected/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.out
@@ -0,0 +1 @@
+ Sat Nov 03 08:00:00 1 normal 0 errors 0 warnings 0 marks
diff --git a/test/expected/test_cmds.sh_b5a530d16c982cf769151291f0bfd612ea71183f.err b/test/expected/test_cmds.sh_b5a530d16c982cf769151291f0bfd612ea71183f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_b5a530d16c982cf769151291f0bfd612ea71183f.err
diff --git a/test/expected/test_cmds.sh_b5a530d16c982cf769151291f0bfd612ea71183f.out b/test/expected/test_cmds.sh_b5a530d16c982cf769151291f0bfd612ea71183f.out
new file mode 100644
index 0000000..8ab686e
--- /dev/null
+++ b/test/expected/test_cmds.sh_b5a530d16c982cf769151291f0bfd612ea71183f.out
@@ -0,0 +1 @@
+Hello, World!
diff --git a/test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.err b/test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.err
diff --git a/test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.out b/test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.out
new file mode 100644
index 0000000..f828498
--- /dev/null
+++ b/test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.out
@@ -0,0 +1,4417 @@
+
+lnav
+
+A fancy log file viewer for the terminal.
+
+Overview
+
+The Logfile Navigator, lnav, is an enhanced log file viewer that takes
+advantage of any semantic information that can be gleaned from the
+files being viewed, such as timestamps and log levels. Using this
+extra semantic information, lnav can do things like interleaving
+messages from different files, generate histograms of messages over
+time, and providing hotkeys for navigating through the file. It is
+hoped that these features will allow the user to quickly and
+efficiently zero in on problems.
+
+Opening Paths/URLs
+
+The main arguments to lnav are the local/remote files, directories,
+glob patterns, or URLs to be viewed. If no arguments are given, the
+default syslog file for your system will be opened. These arguments
+will be polled periodically so that any new data or files will be
+automatically loaded. If a previously loaded file is removed or
+replaced, it will be closed and the replacement opened.
+
+Note: When opening SFTP URLs, if the password is not provided for the
+host, the SSH agent can be used to do authentication.
+
+Options
+
+Lnav takes a list of files to view and/or you can use the flag
+arguments to load well-known log files, such as the syslog log files.
+The flag arguments are:
+
+ •  -a  Load all of the most recent log file types.
+ •  -r  Recursively load files from the given directory
+ hierarchies.
+ •  -R  Load older rotated log files as well.
+
+When using the flag arguments, lnav will look for the files relative
+to the current directory and its parent directories. In other words,
+if you are working within a directory that has the well-known log
+files, those will be preferred over any others.
+
+If you do not want the default syslog file to be loaded when no files
+are specified, you can pass the  -N  flag.
+
+Any files given on the command-line are scanned to determine their log
+file format and to create an index for each line in the file. You do
+not have to manually specify the log file format. The currently
+supported formats are: syslog, apache, strace, tcsh history, and
+generic log files with timestamps.
+
+Lnav will also display data piped in on the standard input. The
+following options are available when doing so:
+
+ •  -t  Prepend timestamps to the lines of data being read
+ in on the standard input.
+ •  -w file  Write the contents of the standard input to
+ this file.
+
+To automatically execute queries or lnav commands after the files have
+been loaded, you can use the following options:
+
+ •  -c cmd  A command, query, or file to execute. The
+ first character determines the type of operation: a colon
+ ( : ) is used for the built-in commands; a semi-colon ( ;
+ ) for SQL queries; and a pipe symbol ( | ) for executing
+ a file containing other commands. For example, to open
+ the file "foo.log" and go to the tenth line in the file,
+ you can do:
+
+ ▌lnav -c ':goto 10' foo.log 
+
+ This option can be given multiple times to execute
+ multiple operations in sequence.
+ •  -f file  A file that contains commands, queries, or
+ files to execute. This option is a shortcut for  -c '|file'
+ . You can use a dash ( - ) to execute commands from the
+ standard input.
+
+To execute commands/queries without opening the interactive text UI,
+you can pass the  -n  option. This combination of options allows you
+to write scripts for processing logs with lnav. For example, to get a
+list of IP addresses that dhclient has bound to in CSV format:
+
+ ▌#! /usr/bin/lnav -nf 
+ ▌ 
+ ▌# Usage: dhcp_ip.lnav /var/log/messages 
+ ▌# Only include lines that look like: 
+ ▌# Apr 29 00:31:56 example-centos5 dhclient: bound to 10.1.10.103 -- renewal in 9938 seconds. 
+ ▌ 
+ ▌:filter-in dhclient: bound to 
+ ▌ 
+ ▌# The log message parser will extract the IP address 
+ ▌# as col_0, so we select that and alias it to "dhcp_ip". 
+ ▌;SELECT DISTINCT col_0 AS dhcp_ip FROM logline; 
+ ▌ 
+ ▌# Finally, write the results of the query to stdout. 
+ ▌:write-csv-to - 
+
+Display
+
+The main part of the display shows the log lines from the files
+interleaved based on time-of-day. New lines are automatically loaded
+as they are appended to the files and, if you are viewing the bottom
+of the files, lnav will scroll down to display the new lines, much
+like  tail -f .
+
+On color displays, the lines will be highlighted as follows:
+
+ • Errors will be colored in red;
+ • warnings will be yellow;
+ • boundaries between days will be underlined; and
+ • various color highlights will be applied to: IP
+ addresses, SQL keywords, XML tags, file and line numbers
+ in Java backtraces, and quoted strings.
+
+To give you an idea of where you are spatially, the right side of the
+display has a proportionally sized 'scroll bar' that indicates your
+current position in the files. The scroll bar will also show areas of
+the file where warnings or errors are detected by coloring the bar
+yellow or red, respectively. Tick marks will also be added to the left
+and right-hand side of the bar, for search hits and bookmarks.
+
+The bar on the left side indicates the file the log message is from. A
+break in the bar means that the next log message comes from a
+different file. The color of the bar is derived from the file name.
+Pressing the left-arrow or  h  will reveal the source file names for
+each message and pressing again will show the full paths.
+
+Above and below the main body are status lines that display a variety
+of information. The top line displays:
+
+ • The current time, configurable by the  /ui/clock-format 
+ property.
+ • The highest priority message from the  lnav_user_notifications 
+ table. You can insert rows into this table to display
+ your own status messages. The default message displayed
+ on startup explains how to focus on the next status line
+ at the top, which is an interactive breadcrumb bar.
+
+The second status line at the top display breadcrumbs for the top line
+in the main view. Pressing  ENTER  will focus input on the breadcrumb
+bar, the cursor keys can be used to select a breadcrumb. The common
+breadcrumbs are:
+
+ • The name of the current view.
+ • In the log view, the timestamp of the top log message.
+ • In the log view, the format of the log file the top log
+ message is from.
+ • The name of the file the top line was pulled from.
+ • If the top line is within a larger chunk of structured
+ data, the path to the value in the top line will be
+ shown.
+
+Notes:
+
+ 1. Pressing  CTRL-A / CTRL-E  will select the first/last
+ breadcrumb.
+ 2. Typing text while a breadcrumb is selected will
+ perform a fuzzy search on the possibilities.
+
+The bottom status bar displays:
+
+ • The line number for the top line in the display.
+ • The current search hit, the total number of hits, and
+ the search term.
+
+If the view supports filtering, there will be a status line showing
+the following:
+
+ • The number of enabled filters and the total number of
+ filters.
+ • The number of lines not displayed because of filtering.
+
+To edit the filters, you can press TAB to change the focus from the
+main view to the filter editor. The editor allows you to create,
+enable/disable, and delete filters easily.
+
+Along with filters, a "Files" panel will also be available for viewing
+and controlling the files that lnav is currently monitoring.
+
+Finally, the last line on the display is where you can enter search
+patterns and execute internal commands, such as converting a
+unix-timestamp into a human-readable date. The command-line is
+implemented using the readline library, so the usual set of keyboard
+shortcuts are available. Most commands and searches also support
+tab-completion.
+
+The body of the display is also used to display other content, such
+as: the help file, histograms of the log messages over time, and SQL
+results. The views are organized into a stack so that any time you
+activate a new view with a key press or command, the new view is
+pushed onto the stack. Pressing the same key again will pop the view
+off of the stack and return you to the previous view. Note that you
+can always use  q  to pop the top view off of the stack.
+
+Default Key Bindings
+
+Views
+
+ Key(s) Action
+═══════════════════════════════════════════════════════════
+ ? View/leave this help message.
+ q Leave the current view or quit the program when in
+ the log file view.
+ Q Similar to  q , except it will try to sync the top
+ time between the current and former views. For
+ example, when leaving the spectrogram view with  Q
+ , the top time in that view will be matched to the
+ top time in the log view.
+ TAB Toggle focusing on the filter editor or the main
+ view.
+ ENTER Focus on the breadcrumb bar.
+ a/A Restore the view that was previously popped with  q
+ / Q . The  A  hotkey will try to match the top
+ times between the two views.
+ X Close the current text file or log file.
+
+Spatial Navigation
+
+ Key(s) Action
+═══════════════════════════════════════════════════════════════
+ g/Home Move to the top of the file.
+ G/End Move to the end of the file. If the view is
+ already at the end, it will move to the last line.
+ SPACE/PgDn Move down a page.
+ b/PgUp Move up a page.
+ j/↓ Move down a line.
+ k/↑ Move up a line.
+ h/← Move to the left. In the log view, moving left
+ will reveal the source log file names for each
+ line. Pressing again will reveal the full path.
+ l/→ Move to the right.
+ H/Shift ← Move to the left by a smaller increment.
+ L/Shift → Move to the right by a smaller increment.
+ e/E Move to the next/previous error.
+ w/W Move to the next/previous warning.
+ n/N Move to the next/previous search hit. When pressed
+ repeatedly within a short time, the view will move
+ at least a full page at a time instead of moving
+ to the next hit.
+ f/F Move to the next/previous file. In the log view,
+ this moves to the next line from a different file.
+ In the text view, this rotates the view to the
+ next file.
+ >/< Move horizontally to the next/previous search hit.
+ o/O Move forward/backward to the log message with a
+ matching 'operation ID' (opid) field.
+ u/U Move forward/backward through any user bookmarks
+ you have added using the 'm' key. This hotkey will
+ also jump to the start of any log partitions that
+ have been created with the 'partition-name'
+ command.
+ s/S Move to the next/previous "slow down" in the log
+ message rate. A slow down is detected by measuring
+ how quickly the message rate has changed over the
+ previous several messages. For example, if one
+ message is logged every second for five seconds
+ and then the last message arrives five seconds
+ later, the last message will be highlighted as a
+ slow down.
+ {/} Move to the previous/next location in history.
+ Whenever you jump to a new location in the view,
+ the location will be added to the history. The
+ history is not updated when using only the arrow
+ keys.
+
+Chronological Navigation
+
+ Key(s) Action
+══════════════════════════════════════════════════════════════════
+ d/D Move forward/backward 24 hours from the current
+ position in the log file.
+ 1-6/Shift 1-6 Move to the next/previous n'th ten minute of the
+ hour. For example, '4' would move to the first log
+ line in the fortieth minute of the current hour in
+ the log. And, '6' would move to the next hour
+ boundary.
+ 7/8 Move to the previous/next minute.
+ 0/Shift 0 Move to the next/previous day boundary.
+ r/R Move forward/backward based on the relative time
+ that was last used with the 'goto' command. For
+ example, executing ':goto a minute later' will
+ move the log view forward a minute and then
+ pressing 'r' will move it forward a minute again.
+ Pressing 'R' will then move the view in the
+ opposite direction, so backwards a minute.
+
+Bookmarks
+
+ Key(s) Action
+═══════════════════════════════════════════════════════════
+ m Mark/unmark the line at the top of the display.
+ The line will be highlighted with reverse video to
+ indicate that it is a user bookmark. You can use
+ the  u  hotkey to iterate through marks you have
+ added.
+ M Mark/unmark all the lines between the top of the
+ display and the last line marked/unmarked.
+ J Mark/unmark the next line after the previously
+ marked line.
+ K Like  J  except it toggles the mark on the
+ previous line.
+ c Copy the marked text to the X11 selection buffer
+ or OS X clipboard.
+ C Clear all marked lines.
+
+Display options
+
+ Key(s) Action
+══════════════════════════════════════════════════════════════════
+ P Switch to/from the pretty-printed view of the log
+ or text files currently displayed. In this view,
+ structured data, such as XML, will be reformatted
+ to make it easier to read.
+ t Switch to/from the text file view. The text file
+ view is for any files that are not recognized as
+ log files.
+ = Pause/unpause loading of new file data.
+ Ctrl-L (Lo-fi mode) Exit screen-mode and write the
+ displayed log lines in plain text to the terminal
+ until a key is pressed. Useful for copying long
+ lines from the terminal without picking up any of
+ the extra decorations.
+ T Toggle the display of the "elapsed time" column
+ that shows the time elapsed since the beginning of
+ the logs or the offset from the previous bookmark.
+ Sharp changes in the message rate are highlighted
+ by coloring the separator between the time column
+ and the log message. A red highlight means the
+ message rate has slowed down and green means it
+ has sped up. You can use the "s/S" hotkeys to scan
+ through the slow downs.
+ i View/leave a histogram of the log messages over
+ time. The histogram counts the number of displayed
+ log lines for each bucket of time. The bars are
+ layed out horizontally with colored segments
+ representing the different log levels. You can use
+ the  z  hotkey to change the size of the time
+ buckets (e.g. ten minutes, one hour, one day).
+ I Switch between the log and histogram views while
+ keeping the time displayed at the top of each view
+ in sync. For example, if the top line in the log
+ view is "11:40", hitting  I  will switch to the
+ histogram view and scrolled to display "11:00" at
+ the top (if the zoom level is hours).
+ z/Shift Z Zoom in or out one step in the histogram view.
+ v Switch to/from the SQL result view.
+ V Switch between the log and SQL result views while
+ keeping the top line number in the log view in
+ sync with the log_line column in the SQL view. For
+ example, doing a query that selects for
+ "log_idle_msecs" and "log_line", you can move the
+ top of the SQL view to a line and hit 'V' to
+ switch to the log view and move to the line number
+ that was selected in the "log_line" column. If
+ there is no "log_line" column, lnav will find the
+ first column with a timestamp and move to
+ corresponding time in the log view.
+ TAB/Shift TAB In the SQL result view, cycle through the columns
+ that are graphed. Initially, all number values are
+ displayed in a stacked graph. Pressing TAB will
+ change the display to only graph the first column.
+ Repeatedly pressing TAB will cycle through the
+ columns until they are all graphed again.
+ p In the log view: enable or disable the display of
+ the fields that the log message parser knows about
+ or has discovered. This overlay is temporarily
+ enabled when the semicolon key (;) is pressed so
+ that it is easier to write queries.
+ In the DB view: enable or disable the display of
+ values in columns containing JSON-encoded values
+ in the top row. The overlay will display the
+ JSON-Pointer reference and value for all fields in
+ the JSON data.
+ CTRL-W Toggle word-wrapping.
+ CTRL-P Show/hide the data preview panel that may be
+ opened when entering commands or SQL queries.
+ CTRL-F Toggle the enabled/disabled state of all filters
+ in the current view.
+ x Toggle the hiding of log message fields. The
+ hidden fields will be replaced with three bullets
+ and highlighted in yellow.
+ F2 Toggle mouse support.
+
+Query
+
+ Key(s) Action
+════════════════════════════════════════════════════════════════════════
+ /regexp Start a search for the given regular expression.
+ The search is live, so when there is a pause in
+ typing, the currently running search will be
+ canceled and a new one started. The first ten
+ lines that match the search will be displayed in
+ the preview window at the bottom of the view.
+ History is maintained for your searches so you can
+ rerun them easily. Words that are currently
+ displayed are also available for tab-completion,
+ so you can easily search for values without
+ needing to copy-and-paste the string. If there is
+ an error encountered while trying to interpret the
+ expression, the error will be displayed in red on
+ the status line. While the search is active, the
+ 'hits' field in the status line will be green,
+ when finished it will turn back to black.
+ :<command> Execute an internal command. The commands are
+ listed below. History is also supported in this
+ context as well as tab-completion for commands and
+ some arguments. The result of the command replaces
+ the command you typed.
+ ;<sql> Execute an SQL query. Most supported log file
+ formats provide a sqlite virtual table backend
+ that can be used in queries. See the SQL section
+ below for more information.
+ |<script> [arg1...] Execute an lnav script contained in a format
+ directory (e.g. ~/.lnav/formats/default). The
+ script can contain lines starting with  : ,  ; ,
+ or  |  to execute commands, SQL queries or execute
+ other files in lnav. Any values after the script
+ name are treated as arguments can be referenced in
+ the script using  $1 ,  $2 , and so on, like in a
+ shell script.
+ CTRL+], ESCAPE Abort command-line entry started with  / ,  : ,  ;
+ , or  | .
+
+ ▌Note: The regular expression format used by lnav is PCRE[1]
+ ▌(Perl-Compatible Regular Expressions).
+ ▌
+ ▌ ▌[1] - http://perldoc.perl.org/perlre.html
+ ▌
+ ▌If the search string is not valid PCRE, a search is done for
+ ▌the exact string instead of doing a regex search.
+
+Session
+
+ Key(s) Action
+═══════════════════════════════════════════════════════════
+ CTRL-R Reset the session state. This will save the
+ current session state (filters, highlights) and
+ then reset the state to the factory default.
+
+Filter Editor
+
+The following hotkeys are only available when the focus is on the
+filter editor. You can change the focus by pressing TAB.
+
+ Key(s) Action
+═══════════════════════════════════════════════════════════
+ q Switch the focus back to the main view.
+ j/↓ Select the next filter.
+ k/↑ Select the previous filter.
+ o Create a new "out" filter.
+ i Create a new "in" filter .
+ SPACE Toggle the enabled/disabled state of the currently
+ selected filter.
+ t Toggle the type of filter between "in" and "out".
+ ENTER Edit the selected filter.
+ D Delete the selected filter.
+
+Mouse Support (experimental)
+
+If you are using Xterm, or a compatible terminal, you can use the
+mouse to mark lines of text and move the view by grabbing the
+scrollbar.
+
+NOTE: You need to manually enable this feature by setting the LNAV_EXP
+environment variable to "mouse". F2 toggles mouse support.
+
+SQL Queries (experimental)
+
+Lnav has support for performing SQL queries on log files using the
+Sqlite3 "virtual" table feature. For all supported log file types,
+lnav will create tables that can be queried using the subset of SQL
+that is supported by Sqlite3. For example, to get the top ten URLs
+being accessed in any loaded Apache log files, you can execute:
+
+ ▌;SELECT cs_uri_stem, count(*) AS total FROM access_log 
+ ▌ GROUP BY cs_uri_stem ORDER BY total DESC LIMIT 10; 
+
+The query result view shows the results and graphs any numeric values
+found in the result, much like the histogram view.
+
+The builtin set of log tables are listed below. Note that only the log
+messages that match a particular format can be queried by a particular
+table. You can find the file format and table name for the top log
+message by looking in the upper right hand corner of the log file
+view.
+
+Some commonly used format tables are:
+
+ Name Description
+════════════════════════════════════════════════════════════════
+ access_log Apache common access log format
+ syslog_log Syslog format
+ strace_log Strace log format
+ generic_log 'Generic' log format. This table contains messages
+ from files that have a very simple format with a
+ leading timestamp followed by the message.
+
+NOTE: You can get a dump of the schema for the internal tables, and
+any attached databases, by running the  .schema  SQL command.
+
+The columns available for the top log line in the view will
+automatically be displayed after pressing the semicolon ( ; ) key. All
+log tables contain at least the following columns:
+
+ Column Description
+═══════════════════════════════════════════════════════════════════
+ log_line The line number in the file, starting at zero.
+ log_part The name of the partition. You can change this
+ column using an UPDATE SQL statement or with the
+ 'partition-name' command. After a value is set,
+ the following log messages will have the same
+ partition name up until another name is set.
+ log_time The time of the log entry.
+ log_idle_msecs The amount of time, in milliseconds, between the
+ current log message and the previous one.
+ log_level The log level (e.g. info, error, etc...).
+ log_mark The bookmark status for the line. This column can
+ be written to using an UPDATE query.
+ log_path The full path to the file.
+ log_text The raw line of text. Note that this column is
+ not included in the result of a 'select *', but it
+ does exist.
+
+The following tables include the basic columns as listed above and
+include a few more columns since the log file format is more
+structured.
+
+ •  syslog_log 
+
+ Column Description
+ ═════════════════════════════════════════════════════════════════
+ log_hostname The hostname the message was received from.
+ log_procname The name of the process that sent the message.
+ log_pid The process ID of the process that sent the
+ message.
+ •  access_log  (The column names are the same as those in
+ the Microsoft LogParser tool.)
+
+ Column Description
+ ══════════════════════════════════════════════════════════
+ c_ip The client IP address.
+ cs_username The client user name.
+ cs_method The HTTP method.
+ cs_uri_stem The stem portion of the URI.
+ cs_uri_query The query portion of the URI.
+ cs_version The HTTP version string.
+ sc_status The status number returned to the client.
+ sc_bytes The number of bytes sent to the client.
+ cs_referrer The URL of the referring page.
+ cs_user_agent The user agent string.
+ •  strace_log  (Currently, you need to run strace with
+ the  -tt -T options so there are timestamps for each
+ function call.)
+
+ Column Description
+ ═══════════════════════════════════════════════════════
+ funcname The name of the syscall.
+ result The result code.
+ duration The amount of time spent in the syscall.
+ arg0 - arg9 The arguments passed to the syscall.
+
+These tables are created dynamically and not stored in memory or on
+disk. If you would like to persist some information from the tables,
+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:
+
+ ▌;ATTACH DATABASE '/tmp/topten.db' AS topten; 
+ ▌;CREATE TABLE topten.foo AS SELECT cs_uri_stem, count(*) AS total 
+ ▌ FROM access_log GROUP BY cs_uri_stem ORDER BY total DESC 
+ ▌ LIMIT 10; 
+
+Dynamic logline Table (experimental)
+
+(NOTE: This feature is still very new and not completely reliable yet,
+use with care.)
+
+For log formats that lack message structure, lnav can parse the log
+message and attempt to extract any data fields that it finds. This
+feature is available through the  logline  log table. This table is
+dynamically created and defined based on the message at the top of the
+log view. For example, given the following log message from "sudo",
+lnav will create the "logline" table with columns for "TTY", "PWD",
+"USER", and "COMMAND":
+
+ ▌May 24 06:48:38 Tim-Stacks-iMac.local sudo[76387]: stack : TTY=ttys003 ; PWD=/Users/stack/github/lbuild ; USER=root ; COMMAND=/bin/echo Hello, World! 
+
+Queries executed against this table will then only return results for
+other log messages that have the same format. So, if you were to
+execute the following query while viewing the above line, you might
+get the following results:
+
+ ▌;SELECT USER,COMMAND FROM logline; 
+
+ USER COMMAND
+═════════════════════════════════
+ root /bin/echo Hello, World!
+ mal /bin/echo Goodbye, World!
+
+The log parser works by examining each message for key/value pairs
+separated by an equal sign (=) or a colon (:). For example, in the
+previous example of a "sudo" message, the parser sees the "USER=root"
+string as a pair where the key is "USER" and the value is "root". If
+no pairs can be found, then anything that looks like a value is
+extracted and assigned a numbered column. For example, the following
+line is from "dhcpd":
+
+ ▌Sep 16 22:35:57 drill dhcpd: DHCPDISCOVER from 00:16:ce:54:4e:f3 via hme3 
+
+In this case, the lnav parser recognizes that "DHCPDISCOVER", the MAC
+address and the "hme3" device name are values and not normal words.
+So, it builds a table with three columns for each of these values. The
+regular words in the message, like "from" and "via", are then used to
+find other messages with a similar format.
+
+If you would like to execute queries against log messages of different
+formats at the same time, you can use the 'create-logline-table'
+command to permanently create a table using the top line of the log
+view as a template.
+
+Other SQL Features
+
+Environment variables can be used in SQL statements by prefixing the
+variable name with a dollar-sign ($). For example, to read the value
+of the  HOME  variable, you can do:
+
+ ▌;SELECT $HOME; 
+
+To select the syslog messages that have a hostname field that is equal
+to the  HOSTNAME  variable:
+
+ ▌;SELECT * FROM syslog_log WHERE log_hostname = $HOSTNAME; 
+
+NOTE: Variable substitution is done for fields in the query and is not
+a plain text substitution. For example, the following statement WILL
+NOT WORK:
+
+ ▌;SELECT * FROM $TABLE_NAME; -- Syntax error 
+
+Access to lnav's environment variables is also available via the
+"environ" table. The table has two columns (name, value) and can be
+read and written to using SQL SELECT, INSERT, UPDATE, and DELETE
+statements. For example, to set the "FOO" variable to the value "BAR":
+
+ ▌;INSERT INTO environ SELECT 'FOO', 'BAR'; 
+
+As a more complex example, you can set the variable "LAST" to the last
+syslog line number by doing:
+
+ ▌;INSERT INTO environ SELECT 'LAST', (SELECT max(log_line) FROM syslog_log); 
+
+A delete will unset the environment variable:
+
+ ▌;DELETE FROM environ WHERE name='LAST'; 
+
+The table allows you to easily use the results of a SQL query in lnav
+commands, which is especially useful when scripting lnav.
+
+Contact
+
+For more information, visit the lnav website at:
+
+http://lnav.org
+
+For support questions, email:
+
+ • lnav@googlegroups.com
+ • support@lnav.org
+
+Command Reference
+
+:adjust-log-time timestamp
+══════════════════════════════════════════════════════════════════════
+ Change the timestamps of the top file to be relative to the given
+ date
+Parameter
+ timestamp The new timestamp for the top line in the
+ view
+
+Examples
+#1 To set the top timestamp to a given date:
+ :adjust-log-time 2017-01-02T05:33:00 
+
+
+#2 To set the top timestamp back an hour:
+ :adjust-log-time -1h 
+
+
+
+:alt-msg msg
+══════════════════════════════════════════════════════════════════════
+ Display a message in the alternate command position
+Parameter
+ msg The message to display
+See Also
+ :echo, :eval, :export-session-to, :rebuild, :redirect-to,
+ :write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to,
+ :write-screen-to, :write-table-to, :write-to, :write-view-to
+Example
+#1 To display 'Press t to switch to the text view' on the bottom right:
+ :alt-msg Press t to switch to the text view 
+
+
+
+:append-to path
+══════════════════════════════════════════════════════════════════════
+ Append marked lines in the current view to the given file
+Parameter
+ path The path to the file to append to
+See Also
+ :echo, :export-session-to, :pipe-line-to, :pipe-to, :redirect-to,
+ :write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to,
+ :write-screen-to, :write-table-to, :write-to, :write-view-to, echoln()
+Example
+#1 To append marked lines to the file /tmp/interesting-lines.txt:
+ :append-to /tmp/interesting-lines.txt 
+
+
+
+:clear-comment
+══════════════════════════════════════════════════════════════════════
+ Clear the comment attached to the top log line
+See Also
+ :comment, :tag
+
+:clear-filter-expr
+══════════════════════════════════════════════════════════════════════
+ Clear the filter expression
+See Also
+ :filter-expr, :filter-in, :filter-out, :hide-lines-after,
+ :hide-lines-before, :hide-unmarked-lines, :toggle-filtering
+
+:clear-highlight pattern
+══════════════════════════════════════════════════════════════════════
+ Remove a previously set highlight regular expression
+Parameter
+ pattern The regular expression previously used with
+ :highlight
+See Also
+ :enable-word-wrap, :hide-fields, :highlight
+Example
+#1 To clear the highlight with the pattern 'foobar':
+ :clear-highlight foobar 
+
+
+
+:clear-mark-expr
+══════════════════════════════════════════════════════════════════════
+ Clear the mark expression
+See Also
+ :hide-unmarked-lines, :mark, :mark-expr, :next-mark, :prev-mark
+
+:clear-partition
+══════════════════════════════════════════════════════════════════════
+ Clear the partition the top line is a part of
+
+
+:close
+══════════════════════════════════════════════════════════════════════
+ Close the top file in the view
+
+
+:comment text
+══════════════════════════════════════════════════════════════════════
+ Attach a comment to the top log line. The comment will be displayed
+ right below the log message it is associated with. The comment can
+ be formatted using markdown and you can add new-lines with '\n'.
+Parameter
+ text The comment text
+See Also
+ :clear-comment, :tag
+Example
+#1 To add the comment 'This is where it all went wrong' to the top line:
+ :comment This is where it all went wrong 
+
+
+
+:config option [value]
+══════════════════════════════════════════════════════════════════════
+ Read or write a configuration option
+Parameters
+ option The path to the option to read or write
+ value The value to write. If not given, the current
+ value is returned
+See Also
+ :reset-config
+Examples
+#1 To read the configuration of the '/ui/clock-format' option:
+ :config /ui/clock-format 
+
+
+#2 To set the '/ui/dim-text' option to 'false':
+ :config /ui/dim-text false 
+
+
+
+:create-logline-table table-name
+══════════════════════════════════════════════════════════════════════
+ Create an SQL table using the top line of the log view as a template
+Parameter
+ table-name The name for the new table
+See Also
+ :create-search-table, :create-search-table, :write-csv-to,
+ :write-json-to, :write-jsonlines-to, :write-raw-to, :write-screen-to,
+ :write-table-to, :write-view-to
+Example
+#1 To create a logline-style table named 'task_durations':
+ :create-logline-table task_durations 
+
+
+
+:create-search-table table-name [pattern]
+══════════════════════════════════════════════════════════════════════
+ Create an SQL table based on a regex search
+Parameters
+ table-name The name of the table to create
+ pattern The regular expression used to capture the
+ table columns. If not given, the current search
+ pattern is used.
+See Also
+ :create-logline-table, :create-logline-table, :delete-search-table,
+ :delete-search-table, :write-csv-to, :write-json-to,
+ :write-jsonlines-to, :write-raw-to, :write-screen-to, :write-table-to,
+ :write-view-to
+Example
+#1 To create a table named 'task_durations' that matches log messages with the pattern
+ 'duration=(?<duration>\d+)':
+ :create-search-table task_durations duration=(?<duration>\d+)
+
+
+
+:current-time
+══════════════════════════════════════════════════════════════════════
+ Print the current time in human-readable form and seconds since the
+ epoch
+
+
+:delete-filter pattern
+══════════════════════════════════════════════════════════════════════
+ Delete the filter created with :filter-in or :filter-out
+Parameter
+ pattern The regular expression to match
+See Also
+ :filter-in, :filter-out, :hide-lines-after, :hide-lines-before,
+ :hide-unmarked-lines, :toggle-filtering
+Example
+#1 To delete the filter with the pattern 'last message repeated':
+ :delete-filter last message repeated 
+
+
+
+:delete-logline-table table-name
+══════════════════════════════════════════════════════════════════════
+ Delete a table created with create-logline-table
+Parameter
+ table-name The name of the table to delete
+See Also
+ :create-logline-table, :create-logline-table, :create-search-table,
+ :create-search-table, :write-csv-to, :write-json-to,
+ :write-jsonlines-to, :write-raw-to, :write-screen-to, :write-table-to,
+ :write-view-to
+Example
+#1 To delete the logline-style table named 'task_durations':
+ :delete-logline-table task_durations 
+
+
+
+:delete-search-table table-name
+══════════════════════════════════════════════════════════════════════
+ Create an SQL table based on a regex search
+Parameter
+ table-name The name of the table to create
+See Also
+ :create-logline-table, :create-logline-table, :create-search-table,
+ :create-search-table, :write-csv-to, :write-json-to,
+ :write-jsonlines-to, :write-raw-to, :write-screen-to, :write-table-to,
+ :write-view-to
+Example
+#1 To delete the search table named 'task_durations':
+ :delete-search-table task_durations 
+
+
+
+:delete-tags tag1 [... tagN]
+══════════════════════════════════════════════════════════════════════
+ Remove the given tags from all log lines
+Parameter
+ tag The tags to delete
+See Also
+ :comment, :tag
+Example
+#1 To remove the tags '#BUG123' and '#needs-review' from all log lines:
+ :delete-tags #BUG123 #needs-review 
+
+
+
+:disable-filter pattern
+══════════════════════════════════════════════════════════════════════
+ Disable a filter created with filter-in/filter-out
+Parameter
+ pattern The regular expression used in the filter
+ command
+See Also
+ :enable-filter, :filter-in, :filter-out, :hide-lines-after,
+ :hide-lines-before, :hide-unmarked-lines, :toggle-filtering
+Example
+#1 To disable the filter with the pattern 'last message repeated':
+ :disable-filter last message repeated 
+
+
+
+:disable-word-wrap
+══════════════════════════════════════════════════════════════════════
+ Disable word-wrapping for the current view
+See Also
+ :enable-word-wrap, :hide-fields, :highlight
+
+:echo [-n] msg
+══════════════════════════════════════════════════════════════════════
+ Echo the given message to the screen or, if :redirect-to has been
+ called, to output file specified in the redirect. Variable
+ substitution is performed on the message. Use a backslash to escape
+ any special characters, like '$'
+Parameters
+ -n Do not print a line-feed at the end of the output
+ msg The message to display
+See Also
+ :alt-msg, :append-to, :eval, :export-session-to, :export-session-to,
+ :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
+ :write-csv-to, :write-csv-to, :write-json-to, :write-json-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
+ :write-screen-to, :write-screen-to, :write-table-to, :write-table-to,
+ :write-to, :write-to, :write-view-to, :write-view-to, echoln()
+Example
+#1 To output 'Hello, World!':
+ :echo Hello, World! 
+
+
+
+:enable-filter pattern
+══════════════════════════════════════════════════════════════════════
+ Enable a previously created and disabled filter
+Parameter
+ pattern The regular expression used in the filter
+ command
+See Also
+ :filter-in, :filter-out, :hide-lines-after, :hide-lines-before,
+ :hide-unmarked-lines, :toggle-filtering
+Example
+#1 To enable the disabled filter with the pattern 'last message repeated':
+ :enable-filter last message repeated 
+
+
+
+:enable-word-wrap
+══════════════════════════════════════════════════════════════════════
+ Enable word-wrapping for the current view
+See Also
+ :disable-word-wrap, :hide-fields, :highlight
+
+:eval command
+══════════════════════════════════════════════════════════════════════
+ Evaluate the given command/query after doing environment variable
+ substitution
+Parameter
+ command The command or query to perform substitution on.
+See Also
+ :alt-msg, :echo, :export-session-to, :rebuild, :redirect-to,
+ :write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to,
+ :write-screen-to, :write-table-to, :write-to, :write-view-to
+Example
+#1 To substitute the table name from a variable:
+ :eval ;SELECT * FROM ${table} 
+
+
+
+:export-session-to path
+══════════════════════════════════════════════════════════════════════
+ Export the current lnav state to an executable lnav script file that
+ contains the commands needed to restore the current session
+Parameter
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :echo, :echo, :eval, :pipe-line-to, :pipe-to,
+ :rebuild, :redirect-to, :redirect-to, :write-csv-to, :write-csv-to,
+ :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-screen-to,
+ :write-screen-to, :write-table-to, :write-table-to, :write-to,
+ :write-to, :write-view-to, :write-view-to, echoln()
+
+:filter-expr expr
+══════════════════════════════════════════════════════════════════════
+ Set the filter expression
+Parameter
+ expr The SQL expression to evaluate for each log message.
+ The message values can be accessed using column names
+ prefixed with a colon
+See Also
+ :clear-filter-expr, :filter-in, :filter-out, :hide-lines-after,
+ :hide-lines-before, :hide-unmarked-lines, :toggle-filtering
+Examples
+#1 To set a filter expression that matched syslog messages from 'syslogd':
+ :filter-expr :log_procname = 'syslogd' 
+
+
+#2 To set a filter expression that matches log messages where 'id' is followed by a
+ number and contains the string 'foo':
+ :filter-expr :log_body REGEXP 'id\d+' AND :log_body REGEXP 'foo'
+
+
+
+:filter-in pattern
+══════════════════════════════════════════════════════════════════════
+ Only show lines that match the given regular expression in the
+ current view
+Parameter
+ pattern The regular expression to match
+See Also
+ :delete-filter, :disable-filter, :filter-out, :hide-lines-after,
+ :hide-lines-before, :hide-unmarked-lines, :toggle-filtering
+Example
+#1 To filter out log messages that do not have the string 'dhclient':
+ :filter-in dhclient 
+
+
+
+:filter-out pattern
+══════════════════════════════════════════════════════════════════════
+ Remove lines that match the given regular expression in the current
+ view
+Parameter
+ pattern The regular expression to match
+See Also
+ :delete-filter, :disable-filter, :filter-in, :hide-lines-after,
+ :hide-lines-before, :hide-unmarked-lines, :toggle-filtering
+Example
+#1 To filter out log messages that contain the string 'last message repeated':
+ :filter-out last message repeated 
+
+
+
+:goto line#|N%|timestamp|#anchor
+══════════════════════════════════════════════════════════════════════
+ Go to the given location in the top view
+Parameter
+ line#|N%|timestamp|#anchor A line
+ number, percent into the file,
+ timestamp, or an anchor in a text file
+See Also
+ :next-location, :next-mark, :prev-location, :prev-mark, :relative-goto
+Examples
+#1 To go to line 22:
+ :goto 22 
+
+
+#2 To go to the line 75% of the way into the view:
+ :goto 75% 
+
+
+#3 To go to the first message on the first day of 2017:
+ :goto 2017-01-01 
+
+
+#4 To go to the Screenshots section:
+ :goto #screenshots 
+
+
+
+:help
+══════════════════════════════════════════════════════════════════════
+ Open the help text view
+
+
+:hide-fields field-name1 [... field-nameN]
+══════════════════════════════════════════════════════════════════════
+ Hide log message fields by replacing them with an ellipsis
+Parameter
+ field-name The name of the field to hide in the
+ format for the top log line. A qualified name can be
+ used where the field name is prefixed by the format
+ name and a dot to hide any field.
+See Also
+ :enable-word-wrap, :highlight, :show-fields
+Examples
+#1 To hide the log_procname fields in all formats:
+ :hide-fields log_procname 
+
+
+#2 To hide only the log_procname field in the syslog format:
+ :hide-fields syslog_log.log_procname 
+
+
+
+:hide-file path
+══════════════════════════════════════════════════════════════════════
+ Hide the given file(s) and skip indexing until it is shown again.
+ If no path is given, the current file in the view is hidden
+Parameter
+ path A path or glob pattern that specifies the files to
+ hide
+
+
+:hide-lines-after date
+══════════════════════════════════════════════════════════════════════
+ Hide lines that come after the given date
+Parameter
+ date An absolute or relative date
+See Also
+ :filter-in, :filter-out, :hide-lines-before, :hide-unmarked-lines,
+ :show-lines-before-and-after, :toggle-filtering
+Examples
+#1 To hide the lines after the top line in the view:
+ :hide-lines-after here 
+
+
+#2 To hide the lines after 6 AM today:
+ :hide-lines-after 6am 
+
+
+
+:hide-lines-before date
+══════════════════════════════════════════════════════════════════════
+ Hide lines that come before the given date
+Parameter
+ date An absolute or relative date
+See Also
+ :filter-in, :filter-out, :hide-lines-after, :hide-unmarked-lines,
+ :show-lines-before-and-after, :toggle-filtering
+Examples
+#1 To hide the lines before the top line in the view:
+ :hide-lines-before here 
+
+
+#2 To hide the log messages before 6 AM today:
+ :hide-lines-before 6am 
+
+
+
+:hide-unmarked-lines
+══════════════════════════════════════════════════════════════════════
+ Hide lines that have not been bookmarked
+See Also
+ :filter-in, :filter-out, :hide-lines-after, :hide-lines-before, :mark,
+ :next-mark, :prev-mark, :toggle-filtering
+
+:highlight pattern
+══════════════════════════════════════════════════════════════════════
+ Add coloring to log messages fragments that match the given regular
+ expression
+Parameter
+ pattern The regular expression to match
+See Also
+ :clear-highlight, :enable-word-wrap, :hide-fields
+Example
+#1 To highlight numbers with three or more digits:
+ :highlight \d{3,} 
+
+
+
+:load-session
+══════════════════════════════════════════════════════════════════════
+ Load the latest session state
+
+
+:mark
+══════════════════════════════════════════════════════════════════════
+ Toggle the bookmark state for the top line in the current view
+See Also
+ :hide-unmarked-lines, :next-mark, :prev-mark
+
+:mark-expr expr
+══════════════════════════════════════════════════════════════════════
+ Set the bookmark expression
+Parameter
+ expr The SQL expression to evaluate for each log message.
+ The message values can be accessed using column names
+ prefixed with a colon
+See Also
+ :clear-mark-expr, :hide-unmarked-lines, :mark, :next-mark, :prev-mark
+Example
+#1 To mark lines from 'dhclient' that mention 'eth0':
+ :mark-expr :log_procname = 'dhclient' AND :log_body LIKE '%eth0%'
+
+
+
+:next-location
+══════════════════════════════════════════════════════════════════════
+ Move to the next position in the location history
+See Also
+ :goto, :next-mark, :prev-location, :prev-mark, :relative-goto
+
+:next-mark type1 [... typeN]
+══════════════════════════════════════════════════════════════════════
+ Move to the next bookmark of the given type in the current view
+Parameter
+ type The type of bookmark -- error, warning, search, user,
+ file, meta
+See Also
+ :goto, :hide-unmarked-lines, :mark, :next-location, :prev-location,
+ :prev-mark, :prev-mark, :relative-goto
+Example
+#1 To go to the next error:
+ :next-mark error 
+
+
+
+:open path1 [... pathN]
+══════════════════════════════════════════════════════════════════════
+ Open the given file(s) in lnav. Opening files on machines
+ accessible via SSH can be done using the syntax:
+ [user@]host:/path/to/logs
+Parameter
+ path The path to the file to open
+
+Examples
+#1 To open the file '/path/to/file':
+ :open /path/to/file 
+
+
+#2 To open the remote file '/var/log/syslog.log':
+ :open dean@host1.example.com:/var/log/syslog.log 
+
+
+
+:partition-name name
+══════════════════════════════════════════════════════════════════════
+ Mark the top line in the log view as the start of a new partition
+ with the given name
+Parameter
+ name The name for the new partition
+
+Example
+#1 To mark the top line as the start of the partition named 'boot #1':
+ :partition-name boot #1 
+
+
+
+:pipe-line-to shell-cmd
+══════════════════════════════════════════════════════════════════════
+ Pipe the top line to the given shell command
+Parameter
+ shell-cmd The shell command-line to execute
+See Also
+ :append-to, :echo, :export-session-to, :pipe-to, :redirect-to,
+ :write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to,
+ :write-screen-to, :write-table-to, :write-to, :write-view-to, echoln()
+Example
+#1 To write the top line to 'sed' for processing:
+ :pipe-line-to sed -e 's/foo/bar/g' 
+
+
+
+:pipe-to shell-cmd
+══════════════════════════════════════════════════════════════════════
+ Pipe the marked lines to the given shell command
+Parameter
+ shell-cmd The shell command-line to execute
+See Also
+ :append-to, :echo, :export-session-to, :pipe-line-to, :redirect-to,
+ :write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to,
+ :write-screen-to, :write-table-to, :write-to, :write-view-to, echoln()
+Example
+#1 To write marked lines to 'sed' for processing:
+ :pipe-to sed -e s/foo/bar/g 
+
+
+
+:prev-location
+══════════════════════════════════════════════════════════════════════
+ Move to the previous position in the location history
+See Also
+ :goto, :next-location, :next-mark, :prev-mark, :relative-goto
+
+:prev-mark type1 [... typeN]
+══════════════════════════════════════════════════════════════════════
+ Move to the previous bookmark of the given type in the current view
+Parameter
+ type The type of bookmark -- error, warning, search, user,
+ file, meta
+See Also
+ :goto, :hide-unmarked-lines, :mark, :next-location, :next-mark,
+ :next-mark, :prev-location, :relative-goto
+Example
+#1 To go to the previous error:
+ :prev-mark error 
+
+
+
+:prompt type [--alt] [prompt] [initial-value]
+══════════════════════════════════════════════════════════════════════
+ Open the given prompt
+Parameters
+ type The type of prompt -- command,
+ script, search, sql, user
+ --alt Perform the alternate action for
+ this prompt by default
+ prompt The prompt to display
+ initial-value The initial value to fill in for the
+ prompt
+
+Examples
+#1 To open the command prompt with 'filter-in' already filled in:
+ :prompt command : 'filter-in ' 
+
+
+#2 To ask the user a question:
+ :prompt user 'Are you sure? ' 
+
+
+
+:quit
+══════════════════════════════════════════════════════════════════════
+ Quit lnav
+
+
+:quit
+══════════════════════════════════════════════════════════════════════
+ Quit lnav
+
+
+:quit
+══════════════════════════════════════════════════════════════════════
+ Quit lnav
+
+
+:rebuild
+══════════════════════════════════════════════════════════════════════
+ Forcefully rebuild file indexes
+See Also
+ :alt-msg, :echo, :eval, :export-session-to, :redirect-to,
+ :write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to,
+ :write-screen-to, :write-table-to, :write-to, :write-view-to
+
+:redirect-to [path]
+══════════════════════════════════════════════════════════════════════
+ Redirect the output of commands that write to stdout to the given
+ file
+Parameter
+ path The path to the file to write. If not specified, the
+ current redirect will be cleared
+See Also
+ :alt-msg, :append-to, :echo, :echo, :eval, :export-session-to,
+ :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :write-csv-to,
+ :write-csv-to, :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-screen-to,
+ :write-screen-to, :write-table-to, :write-table-to, :write-to,
+ :write-to, :write-view-to, :write-view-to, echoln()
+Example
+#1 To write the output of lnav commands to the file /tmp/script-output.txt:
+ :redirect-to /tmp/script-output.txt 
+
+
+
+:redraw
+══════════════════════════════════════════════════════════════════════
+ Do a full redraw of the screen
+
+
+:relative-goto line-count|N%
+══════════════════════════════════════════════════════════════════════
+ Move the current view up or down by the given amount
+Parameter
+ line-count|N% The amount to move the view by.
+See Also
+ :goto, :next-location, :next-mark, :prev-location, :prev-mark
+Examples
+#1 To move 22 lines down in the view:
+ :relative-goto +22 
+
+
+#2 To move 10 percent back in the view:
+ :relative-goto -10% 
+
+
+
+:reset-config option
+══════════════════════════════════════════════════════════════════════
+ Reset the configuration option to its default value
+Parameter
+ option The path to the option to reset
+See Also
+ :config
+Example
+#1 To reset the '/ui/clock-format' option back to the builtin default:
+ :reset-config /ui/clock-format 
+
+
+
+:reset-session
+══════════════════════════════════════════════════════════════════════
+ Reset the session state, clearing all filters, highlights, and
+ bookmarks
+
+
+:save-session
+══════════════════════════════════════════════════════════════════════
+ Save the current state as a session
+
+
+:session lnav-command
+══════════════════════════════════════════════════════════════════════
+ Add the given command to the session file (~/.lnav/session)
+Parameter
+ lnav-command The lnav command to save.
+
+Example
+#1 To add the command ':highlight foobar' to the session file:
+ :session :highlight foobar 
+
+
+
+:set-min-log-level log-level
+══════════════════════════════════════════════════════════════════════
+ Set the minimum log level to display in the log view
+Parameter
+ log-level The new minimum log level
+
+Example
+#1 To set the minimum log level displayed to error:
+ :set-min-log-level error 
+
+
+
+:show-fields field-name1 [... field-nameN]
+══════════════════════════════════════════════════════════════════════
+ Show log message fields that were previously hidden
+Parameter
+ field-name The name of the field to show
+See Also
+ :enable-word-wrap, :hide-fields, :highlight
+Example
+#1 To show all the log_procname fields in all formats:
+ :show-fields log_procname 
+
+
+
+:show-file path
+══════════════════════════════════════════════════════════════════════
+ Show the given file(s) and resume indexing.
+Parameter
+ path The path or glob pattern that specifies the files to
+ show
+
+
+:show-lines-before-and-after
+══════════════════════════════════════════════════════════════════════
+ Show lines that were hidden by the 'hide-lines' commands
+See Also
+ :filter-in, :filter-out, :hide-lines-after, :hide-lines-before,
+ :hide-unmarked-lines, :toggle-filtering
+
+:show-only-this-file
+══════════════════════════════════════════════════════════════════════
+ Show only the file for the top line in the view
+
+
+:show-unmarked-lines
+══════════════════════════════════════════════════════════════════════
+ Show lines that have not been bookmarked
+See Also
+ :filter-in, :filter-out, :hide-lines-after, :hide-lines-before,
+ :hide-unmarked-lines, :hide-unmarked-lines, :mark, :next-mark,
+ :prev-mark, :toggle-filtering
+
+:spectrogram field-name
+══════════════════════════════════════════════════════════════════════
+ Visualize the given message field or database column using a
+ spectrogram
+Parameter
+ field-name The name of the numeric field to
+ visualize.
+
+Example
+#1 To visualize the sc_bytes field in the access_log format:
+ :spectrogram sc_bytes 
+
+
+
+:summarize column-name
+══════════════════════════════════════════════════════════════════════
+ Execute a SQL query that computes the characteristics of the values
+ in the given column
+Parameter
+ column-name The name of the column to analyze.
+
+Example
+#1 To get a summary of the sc_bytes column in the access_log table:
+ :summarize sc_bytes 
+
+
+
+:switch-to-view view-name
+══════════════════════════════════════════════════════════════════════
+ Switch to the given view
+Parameter
+ view-name The name of the view to switch to.
+
+Example
+#1 To switch to the 'schema' view:
+ :switch-to-view schema 
+
+
+
+:tag tag1 [... tagN]
+══════════════════════════════════════════════════════════════════════
+ Attach tags to the top log line
+Parameter
+ tag The tags to attach
+See Also
+ :comment, :delete-tags, :untag
+Example
+#1 To add the tags '#BUG123' and '#needs-review' to the top line:
+ :tag #BUG123 #needs-review 
+
+
+
+:toggle-filtering
+══════════════════════════════════════════════════════════════════════
+ Toggle the filtering flag for the current view
+See Also
+ :filter-in, :filter-out, :hide-lines-after, :hide-lines-before,
+ :hide-unmarked-lines
+
+:toggle-view view-name
+══════════════════════════════════════════════════════════════════════
+ Switch to the given view or, if it is already displayed, switch to
+ the previous view
+Parameter
+ view-name The name of the view to toggle the display
+ of.
+
+Example
+#1 To switch to the 'schema' view if it is not displayed or switch back to the previous
+ view:
+ :toggle-view schema 
+
+
+
+:unix-time seconds
+══════════════════════════════════════════════════════════════════════
+ Convert epoch time to a human-readable form
+Parameter
+ seconds The epoch timestamp to convert
+
+Example
+#1 To convert the epoch time 1490191111:
+ :unix-time 1490191111 
+
+
+
+:untag tag1 [... tagN]
+══════════════════════════════════════════════════════════════════════
+ Detach tags from the top log line
+Parameter
+ tag The tags to detach
+See Also
+ :comment, :tag
+Example
+#1 To remove the tags '#BUG123' and '#needs-review' from the top line:
+ :untag #BUG123 #needs-review 
+
+
+
+:write-table-to [--anonymize] path
+══════════════════════════════════════════════════════════════════════
+ Write SQL results to the given file in a tabular format
+Parameters
+ --anonymize Anonymize the table contents
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :export-session-to, :export-session-to,
+ :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
+ :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to,
+ :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
+ :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
+ :write-to, :write-to, :write-view-to, :write-view-to, :write-view-to,
+ echoln()
+Example
+#1 To write SQL results as text to /tmp/table.txt:
+ :write-table-to /tmp/table.txt 
+
+
+
+:write-csv-to [--anonymize] path
+══════════════════════════════════════════════════════════════════════
+ Write SQL results to the given file in CSV format
+Parameters
+ --anonymize Anonymize the row contents
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :export-session-to, :export-session-to,
+ :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
+ :write-json-to, :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
+ :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
+ :write-table-to, :write-table-to, :write-table-to, :write-to,
+ :write-to, :write-view-to, :write-view-to, :write-view-to, echoln()
+Example
+#1 To write SQL results as CSV to /tmp/table.csv:
+ :write-csv-to /tmp/table.csv 
+
+
+
+:write-json-to [--anonymize] path
+══════════════════════════════════════════════════════════════════════
+ Write SQL results to the given file in JSON format
+Parameters
+ --anonymize Anonymize the JSON values
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :export-session-to, :export-session-to,
+ :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
+ :write-csv-to, :write-csv-to, :write-csv-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
+ :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
+ :write-table-to, :write-table-to, :write-table-to, :write-to,
+ :write-to, :write-view-to, :write-view-to, :write-view-to, echoln()
+Example
+#1 To write SQL results as JSON to /tmp/table.json:
+ :write-json-to /tmp/table.json 
+
+
+
+:write-jsonlines-to [--anonymize] path
+══════════════════════════════════════════════════════════════════════
+ Write SQL results to the given file in JSON Lines format
+Parameters
+ --anonymize Anonymize the JSON values
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :export-session-to, :export-session-to,
+ :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
+ :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to,
+ :write-json-to, :write-json-to, :write-raw-to, :write-raw-to,
+ :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
+ :write-table-to, :write-table-to, :write-table-to, :write-to,
+ :write-to, :write-view-to, :write-view-to, :write-view-to, echoln()
+Example
+#1 To write SQL results as JSON Lines to /tmp/table.json:
+ :write-jsonlines-to /tmp/table.json 
+
+
+
+:write-raw-to [--view={log,db}] [--anonymize] path
+══════════════════════════════════════════════════════════════════════
+ In the log view, write the original log file content of the marked
+ messages to the file. In the DB view, the contents of the cells are
+ written to the output file.
+Parameters
+ --view={log,db} The view to use as the source of
+ data
+ --anonymize Anonymize the lines
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :export-session-to, :export-session-to,
+ :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
+ :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to,
+ :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-screen-to,
+ :write-screen-to, :write-screen-to, :write-table-to, :write-table-to,
+ :write-table-to, :write-to, :write-to, :write-view-to, :write-view-to,
+ :write-view-to, echoln()
+Example
+#1 To write the marked lines in the log view to /tmp/table.txt:
+ :write-raw-to /tmp/table.txt 
+
+
+
+:write-screen-to [--anonymize] path
+══════════════════════════════════════════════════════════════════════
+ Write the displayed text or SQL results to the given file without
+ any formatting
+Parameters
+ --anonymize Anonymize the lines
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :export-session-to, :export-session-to,
+ :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
+ :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to,
+ :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
+ :write-raw-to, :write-table-to, :write-table-to, :write-table-to,
+ :write-to, :write-to, :write-view-to, :write-view-to, :write-view-to,
+ echoln()
+Example
+#1 To write only the displayed text to /tmp/table.txt:
+ :write-screen-to /tmp/table.txt 
+
+
+
+:write-table-to [--anonymize] path
+══════════════════════════════════════════════════════════════════════
+ Write SQL results to the given file in a tabular format
+Parameters
+ --anonymize Anonymize the table contents
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :export-session-to, :export-session-to,
+ :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
+ :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to,
+ :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
+ :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
+ :write-to, :write-to, :write-view-to, :write-view-to, :write-view-to,
+ echoln()
+Example
+#1 To write SQL results as text to /tmp/table.txt:
+ :write-table-to /tmp/table.txt 
+
+
+
+:write-to [--anonymize] path
+══════════════════════════════════════════════════════════════════════
+ Overwrite the given file with any marked lines in the current view
+Parameters
+ --anonymize Anonymize the lines
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :echo, :echo, :eval, :export-session-to,
+ :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :redirect-to,
+ :redirect-to, :write-csv-to, :write-csv-to, :write-json-to,
+ :write-json-to, :write-jsonlines-to, :write-jsonlines-to,
+ :write-raw-to, :write-raw-to, :write-screen-to, :write-screen-to,
+ :write-table-to, :write-table-to, :write-view-to, :write-view-to,
+ echoln()
+Example
+#1 To write marked lines to the file /tmp/interesting-lines.txt:
+ :write-to /tmp/interesting-lines.txt 
+
+
+
+:write-view-to [--anonymize] path
+══════════════════════════════════════════════════════════════════════
+ Write the text in the top view to the given file without any
+ formatting
+Parameters
+ --anonymize Anonymize the lines
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :export-session-to, :export-session-to,
+ :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
+ :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to,
+ :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
+ :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
+ :write-table-to, :write-table-to, :write-table-to, :write-to,
+ :write-to, echoln()
+Example
+#1 To write the top view to /tmp/table.txt:
+ :write-view-to /tmp/table.txt 
+
+
+
+:zoom-to zoom-level
+══════════════════════════════════════════════════════════════════════
+ Zoom the histogram view to the given level
+Parameter
+ zoom-level The zoom level
+
+Example
+#1 To set the zoom level to '1-week':
+ :zoom-to 1-week 
+
+
+SQL Reference
+
+CAST(expr AS type-name)
+══════════════════════════════════════════════════════════════════════
+ Convert the value of the given expression to a different storage
+ class specified by type-name.
+Parameters
+ expr The value to convert.
+ type-name The name of the type to convert to.
+
+Example
+#1 To cast the value 1.23 as an integer:
+ ;SELECT CAST(1.23 AS INTEGER) 
+
+
+
+OVER([base-window-name] PARTITION BY expr, ... ORDER BY expr, ...,
+ [frame-spec])
+══════════════════════════════════════════════════════════════════════
+ Executes the preceding function over a window
+Parameters
+ base-window-name The name of the window
+ definition
+ expr The values to use for
+ partitioning
+ expr The values used to order the
+ rows in the window
+ frame-spec Determines which output rows
+ are read by an aggregate window function
+
+
+abs(x)
+══════════════════════════════════════════════════════════════════════
+ Return the absolute value of the argument
+Parameter
+ x The number to convert
+See Also
+ acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the absolute value of -1:
+ ;SELECT abs(-1) 
+
+
+
+acos(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the arccosine of a number, in radians
+Parameter
+ num A cosine value that is between -1 and 1
+See Also
+ abs(), acosh(), asin(), asinh(), atan(), atan2(), atanh(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the arccosine of 0.2:
+ ;SELECT acos(0.2) 
+
+
+
+acosh(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the hyperbolic arccosine of a number
+Parameter
+ num A number that is one or more
+See Also
+ abs(), acos(), asin(), asinh(), atan(), atan2(), atanh(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the hyperbolic arccosine of 1.2:
+ ;SELECT acosh(1.2) 
+
+
+
+anonymize(value)
+══════════════════════════════════════════════════════════════════════
+ Replace identifying information with random values.
+Parameter
+ value The text to anonymize
+See Also
+ char(), charindex(), decode(), encode(), endswith(), extract(),
+ group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+Example
+#1 To anonymize an IP address:
+ ;SELECT anonymize('Hello, 192.168.1.2') 
+
+
+
+asin(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the arcsine of a number, in radians
+Parameter
+ num A sine value that is between -1 and 1
+See Also
+ abs(), acos(), acosh(), asinh(), atan(), atan2(), atanh(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the arcsine of 0.2:
+ ;SELECT asin(0.2) 
+
+
+
+asinh(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the hyperbolic arcsine of a number
+Parameter
+ num The number
+See Also
+ abs(), acos(), acosh(), asin(), atan(), atan2(), atanh(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the hyperbolic arcsine of 0.2:
+ ;SELECT asinh(0.2) 
+
+
+
+atan(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the arctangent of a number, in radians
+Parameter
+ num The number
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan2(), atanh(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the arctangent of 0.2:
+ ;SELECT atan(0.2) 
+
+
+
+atan2(y, x)
+══════════════════════════════════════════════════════════════════════
+ Returns the angle in the plane between the positive X axis and the
+ ray from (0, 0) to the point (x, y)
+Parameters
+ y The y coordinate of the point
+ x The x coordinate of the point
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atanh(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the angle, in degrees, for the point at (5, 5):
+ ;SELECT degrees(atan2(5, 5)) 
+
+
+
+atanh(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the hyperbolic arctangent of a number
+Parameter
+ num The number
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the hyperbolic arctangent of 0.2:
+ ;SELECT atanh(0.2) 
+
+
+
+atn2(y, x)
+══════════════════════════════════════════════════════════════════════
+ Returns the angle in the plane between the positive X axis and the
+ ray from (0, 0) to the point (x, y)
+Parameters
+ y The y coordinate of the point
+ x The x coordinate of the point
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the angle, in degrees, for the point at (5, 5):
+ ;SELECT degrees(atn2(5, 5)) 
+
+
+
+avg(X)
+══════════════════════════════════════════════════════════════════════
+ Returns the average value of all non-NULL numbers within a group.
+Parameter
+ X The value to compute the average of.
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), ceil(), degrees(), exp(), floor(), log(), log10(), max(),
+ min(), pi(), power(), radians(), round(), sign(), square(), sum(),
+ total()
+Examples
+#1 To get the average of the column 'ex_duration' from the table 'lnav_example_log':
+ ;SELECT avg(ex_duration) FROM lnav_example_log 
+
+
+#2 To get the average of the column 'ex_duration' from the table 'lnav_example_log'
+ when grouped by 'ex_procname':
+ ;SELECT ex_procname, avg(ex_duration) FROM lnav_example_log GROUP BY ex_procname
+
+
+
+basename(path)
+══════════════════════════════════════════════════════════════════════
+ Extract the base portion of a pathname.
+Parameter
+ path The path
+See Also
+ dirname(), joinpath(), readlink(), realpath()
+Examples
+#1 To get the base of a plain file name:
+ ;SELECT basename('foobar') 
+
+
+#2 To get the base of a path:
+ ;SELECT basename('foo/bar') 
+
+
+#3 To get the base of a directory:
+ ;SELECT basename('foo/bar/') 
+
+
+#4 To get the base of an empty string:
+ ;SELECT basename('') 
+
+
+#5 To get the base of a Windows path:
+ ;SELECT basename('foo\bar') 
+
+
+#6 To get the base of the root directory:
+ ;SELECT basename('/') 
+
+
+
+ceil(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the smallest integer that is not less than the argument
+Parameter
+ num The number to raise to the ceiling
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the ceiling of 1.23:
+ ;SELECT ceil(1.23) 
+
+
+
+changes()
+══════════════════════════════════════════════════════════════════════
+ The number of database rows that were changed, inserted, or deleted
+ by the most recent statement.
+
+
+char(X, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns a string composed of characters having the given unicode
+ code point values
+Parameter
+ X The unicode code point values
+See Also
+ anonymize(), charindex(), decode(), encode(), endswith(), extract(),
+ group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+Example
+#1 To get a string with the code points 0x48 and 0x49:
+ ;SELECT char(0x48, 0x49) 
+
+
+
+charindex(needle, haystack, [start])
+══════════════════════════════════════════════════════════════════════
+ Finds the first occurrence of the needle within the haystack and
+ returns the number of prior characters plus 1, or 0 if Y is nowhere
+ found within X
+Parameters
+ needle The string to look for in the haystack
+ haystack The string to search within
+ start The one-based index within the haystack to
+ start the search
+See Also
+ anonymize(), char(), decode(), encode(), endswith(), extract(),
+ group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+Examples
+#1 To search for the string 'abc' within 'abcabc' and starting at position 2:
+ ;SELECT charindex('abc', 'abcabc', 2) 
+
+
+#2 To search for the string 'abc' within 'abcdef' and starting at position 2:
+ ;SELECT charindex('abc', 'abcdef', 2) 
+
+
+
+coalesce(X, Y, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns a copy of its first non-NULL argument, or NULL if all
+ arguments are NULL
+Parameters
+ X A value to check for NULL-ness
+ Y A value to check for NULL-ness
+
+Example
+#1 To get the first non-null value from three parameters:
+ ;SELECT coalesce(null, 0, null) 
+
+
+
+count(X)
+══════════════════════════════════════════════════════════════════════
+ If the argument is '*', the total number of rows in the group is
+ returned. Otherwise, the number of times the argument is non-NULL.
+Parameter
+ X The value to count.
+
+Examples
+#1 To get the count of the non-NULL rows of 'lnav_example_log':
+ ;SELECT count(*) FROM lnav_example_log 
+
+
+#2 To get the count of the non-NULL values of 'log_part' from 'lnav_example_log':
+ ;SELECT count(log_part) FROM lnav_example_log 
+
+
+
+cume_dist()
+══════════════════════════════════════════════════════════════════════
+ Returns the cumulative distribution
+See Also
+ dense_rank(), first_value(), lag(), last_value(), lead(), nth_value(),
+ ntile(), percent_rank(), rank(), row_number()
+
+date(timestring, modifier, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the date in this format: YYYY-MM-DD.
+Parameters
+ timestring The string to convert to a date.
+ modifier A transformation that is applied to the
+ value to the left.
+See Also
+ datetime(), humanize_duration(), julianday(), strftime(), time(),
+ timediff(), timeslice()
+Examples
+#1 To get the date portion of the timestamp '2017-01-02T03:04:05':
+ ;SELECT date('2017-01-02T03:04:05') 
+
+
+#2 To get the date portion of the timestamp '2017-01-02T03:04:05' plus one day:
+ ;SELECT date('2017-01-02T03:04:05', '+1 day') 
+
+
+#3 To get the date portion of the epoch timestamp 1491341842:
+ ;SELECT date(1491341842, 'unixepoch') 
+
+
+
+datetime(timestring, modifier, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the date and time in this format: YYYY-MM-DD HH:MM:SS.
+Parameters
+ timestring The string to convert to a date with time.
+ modifier A transformation that is applied to the
+ value to the left.
+See Also
+ date(), humanize_duration(), julianday(), strftime(), time(),
+ timediff(), timeslice()
+Examples
+#1 To get the date and time portion of the timestamp '2017-01-02T03:04:05':
+ ;SELECT datetime('2017-01-02T03:04:05') 
+
+
+#2 To get the date and time portion of the timestamp '2017-01-02T03:04:05' plus one
+ minute:
+ ;SELECT datetime('2017-01-02T03:04:05', '+1 minute')
+
+
+#3 To get the date and time portion of the epoch timestamp 1491341842:
+ ;SELECT datetime(1491341842, 'unixepoch') 
+
+
+
+decode(value, algorithm)
+══════════════════════════════════════════════════════════════════════
+ Decode the value using the given algorithm
+Parameters
+ value The value to decode
+ algorithm One of the following encoding algorithms:
+ base64, hex, uri
+See Also
+ anonymize(), char(), charindex(), encode(), endswith(), extract(),
+ group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+Example
+#1 To decode the URI-encoded string '%63%75%72%6c':
+ ;SELECT decode('%63%75%72%6c', 'uri') 
+
+
+
+degrees(radians)
+══════════════════════════════════════════════════════════════════════
+ Converts radians to degrees
+Parameter
+ radians The radians value to convert to degrees
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To convert PI to degrees:
+ ;SELECT degrees(pi()) 
+
+
+
+dense_rank()
+══════════════════════════════════════════════════════════════════════
+ Returns the row_number() of the first peer in each group without
+ gaps
+See Also
+ cume_dist(), first_value(), lag(), last_value(), lead(), nth_value(),
+ ntile(), percent_rank(), rank(), row_number()
+
+dirname(path)
+══════════════════════════════════════════════════════════════════════
+ Extract the directory portion of a pathname.
+Parameter
+ path The path
+See Also
+ basename(), joinpath(), readlink(), realpath()
+Examples
+#1 To get the directory of a relative file path:
+ ;SELECT dirname('foo/bar') 
+
+
+#2 To get the directory of an absolute file path:
+ ;SELECT dirname('/foo/bar') 
+
+
+#3 To get the directory of a file in the root directory:
+ ;SELECT dirname('/bar') 
+
+
+#4 To get the directory of a Windows path:
+ ;SELECT dirname('foo\bar') 
+
+
+#5 To get the directory of an empty path:
+ ;SELECT dirname('') 
+
+
+
+echoln(value)
+══════════════════════════════════════════════════════════════════════
+ Echo the argument to the current output file and return it
+Parameter
+ value The value to write to the current output file
+See Also
+ :append-to, :echo, :export-session-to, :pipe-line-to, :pipe-to,
+ :redirect-to, :write-csv-to, :write-json-to, :write-jsonlines-to,
+ :write-raw-to, :write-screen-to, :write-table-to, :write-to,
+ :write-view-to
+
+encode(value, algorithm)
+══════════════════════════════════════════════════════════════════════
+ Encode the value using the given algorithm
+Parameters
+ value The value to encode
+ algorithm One of the following encoding algorithms:
+ base64, hex, uri
+See Also
+ anonymize(), char(), charindex(), decode(), endswith(), extract(),
+ group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+Examples
+#1 To base64-encode 'Hello, World!':
+ ;SELECT encode('Hello, World!', 'base64') 
+
+
+#2 To hex-encode 'Hello, World!':
+ ;SELECT encode('Hello, World!', 'hex') 
+
+
+#3 To URI-encode 'Hello, World!':
+ ;SELECT encode('Hello, World!', 'uri') 
+
+
+
+endswith(str, suffix)
+══════════════════════════════════════════════════════════════════════
+ Test if a string ends with the given suffix
+Parameters
+ str The string to test
+ suffix The suffix to check in the string
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), extract(),
+ group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+Examples
+#1 To test if the string 'notbad.jpg' ends with '.jpg':
+ ;SELECT endswith('notbad.jpg', '.jpg') 
+
+
+#2 To test if the string 'notbad.png' starts with '.jpg':
+ ;SELECT endswith('notbad.png', '.jpg') 
+
+
+
+exp(x)
+══════════════════════════════════════════════════════════════════════
+ Returns the value of e raised to the power of x
+Parameter
+ x The exponent
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), floor(), log(), log10(), max(),
+ min(), pi(), power(), radians(), round(), sign(), square(), sum(),
+ total()
+Example
+#1 To raise e to 2:
+ ;SELECT exp(2) 
+
+
+
+extract(str)
+══════════════════════════════════════════════════════════════════════
+ Automatically Parse and extract data from a string
+Parameter
+ str The string to parse
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+Examples
+#1 To extract key/value pairs from a string:
+ ;SELECT extract('foo=1 bar=2 name="Rolo Tomassi"') 
+
+
+#2 To extract columnar data from a string:
+ ;SELECT extract('1.0 abc 2.0') 
+
+
+
+first_value(expr)
+══════════════════════════════════════════════════════════════════════
+ Returns the result of evaluating the expression against the first
+ row in the window frame.
+Parameter
+ expr The expression to execute over the first row
+See Also
+ cume_dist(), dense_rank(), lag(), last_value(), lead(), nth_value(),
+ ntile(), percent_rank(), rank(), row_number()
+
+floor(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the largest integer that is not greater than the argument
+Parameter
+ num The number to lower to the floor
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the floor of 1.23:
+ ;SELECT floor(1.23) 
+
+
+
+generate_series(start, stop, [step])
+══════════════════════════════════════════════════════════════════════
+ A table-valued-function that returns the whole numbers between a
+ lower and upper bound, inclusive
+Parameters
+ start The starting point of the series
+ stop The stopping point of the series
+ step The increment between each value
+Result
+ value The number in the series
+
+Examples
+#1 To generate the numbers in the range [10, 14]:
+ ;SELECT value FROM generate_series(10, 14) 
+
+
+#2 To generate every other number in the range [10, 14]:
+ ;SELECT value FROM generate_series(10, 14, 2) 
+
+
+#3 To count down from five to 1:
+ ;SELECT value FROM generate_series(1, 5, -1) 
+
+
+
+gethostbyaddr(hostname)
+══════════════════════════════════════════════════════════════════════
+ Get the hostname for the given IP address
+Parameter
+ hostname The IP address to lookup.
+See Also
+ gethostbyname()
+Example
+#1 To get the hostname for the IP '127.0.0.1':
+ ;SELECT gethostbyaddr('127.0.0.1') 
+
+
+
+gethostbyname(hostname)
+══════════════════════════════════════════════════════════════════════
+ Get the IP address for the given hostname
+Parameter
+ hostname The DNS hostname to lookup.
+See Also
+ gethostbyaddr()
+Example
+#1 To get the IP address for 'localhost':
+ ;SELECT gethostbyname('localhost') 
+
+
+
+glob(pattern, str)
+══════════════════════════════════════════════════════════════════════
+ Match a string against Unix glob pattern
+Parameters
+ pattern The glob pattern
+ str The string to match
+
+Example
+#1 To test if the string 'abc' matches the glob 'a*':
+ ;SELECT glob('a*', 'abc') 
+
+
+
+group_concat(X, [sep])
+══════════════════════════════════════════════════════════════════════
+ Returns a string which is the concatenation of all non-NULL values
+ of X separated by a comma or the given separator.
+Parameters
+ X The value to concatenate.
+ sep The separator to place between the values.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_spooky_hash(), gunzip(), gzip(), humanize_duration(),
+ humanize_file_size(), instr(), leftstr(), length(), logfmt2json(),
+ lower(), ltrim(), padc(), padl(), padr(), parse_url(), printf(),
+ proper(), regexp_capture(), regexp_capture_into_json(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
+ substr(), trim(), unicode(), unparse_url(), upper(), xpath()
+Examples
+#1 To concatenate the values of the column 'ex_procname' from the table
+ 'lnav_example_log':
+ ;SELECT group_concat(ex_procname) FROM lnav_example_log
+
+
+#2 To join the values of the column 'ex_procname' using the string ', ':
+ ;SELECT group_concat(ex_procname, ', ') FROM lnav_example_log
+
+
+#3 To concatenate the distinct values of the column 'ex_procname' from the table
+ 'lnav_example_log':
+ ;SELECT group_concat(DISTINCT ex_procname) FROM lnav_example_log
+
+
+
+group_spooky_hash(str, ...)
+══════════════════════════════════════════════════════════════════════
+ Compute the hash value for the given arguments
+Parameter
+ str The string to hash
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), gunzip(), gzip(), humanize_duration(),
+ humanize_file_size(), instr(), leftstr(), length(), logfmt2json(),
+ lower(), ltrim(), padc(), padl(), padr(), parse_url(), printf(),
+ proper(), regexp_capture(), regexp_capture_into_json(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
+ substr(), trim(), unicode(), unparse_url(), upper(), xpath()
+Example
+#1 To produce a hash of all of the values of 'column1':
+ ;SELECT group_spooky_hash(column1) FROM (VALUES ('abc'), ('123'))
+
+
+
+gunzip(b, ...)
+══════════════════════════════════════════════════════════════════════
+ Decompress a gzip file
+Parameter
+ b The blob to decompress
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+
+gzip(value, ...)
+══════════════════════════════════════════════════════════════════════
+ Compress a string into a gzip file
+Parameter
+ value The value to compress
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+
+hex(X)
+══════════════════════════════════════════════════════════════════════
+ Returns a string which is the upper-case hexadecimal rendering of
+ the content of its argument.
+Parameter
+ X The blob to convert to hexadecimal
+
+Example
+#1 To get the hexadecimal rendering of the string 'abc':
+ ;SELECT hex('abc') 
+
+
+
+humanize_duration(secs)
+══════════════════════════════════════════════════════════════════════
+ Format the given seconds value as an abbreviated duration string
+Parameter
+ secs The duration in seconds
+See Also
+ anonymize(), char(), charindex(), date(), datetime(), decode(),
+ encode(), endswith(), extract(), group_concat(), group_spooky_hash(),
+ gunzip(), gzip(), humanize_file_size(), instr(), julianday(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), strftime(), substr(), time(),
+ timediff(), timeslice(), trim(), unicode(), unparse_url(), upper(),
+ xpath()
+Examples
+#1 To format a duration:
+ ;SELECT humanize_duration(15 * 60) 
+
+
+#2 To format a sub-second value:
+ ;SELECT humanize_duration(1.5) 
+
+
+
+humanize_file_size(value)
+══════════════════════════════════════════════════════════════════════
+ Format the given file size as a human-friendly string
+Parameter
+ value The file size to format
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), instr(), leftstr(), length(), logfmt2json(),
+ lower(), ltrim(), padc(), padl(), padr(), parse_url(), printf(),
+ proper(), regexp_capture(), regexp_capture_into_json(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
+ substr(), trim(), unicode(), unparse_url(), upper(), xpath()
+Example
+#1 To format an amount:
+ ;SELECT humanize_file_size(10 * 1024 * 1024) 
+
+
+
+ifnull(X, Y)
+══════════════════════════════════════════════════════════════════════
+ Returns a copy of its first non-NULL argument, or NULL if both
+ arguments are NULL
+Parameters
+ X A value to check for NULL-ness
+ Y A value to check for NULL-ness
+
+Example
+#1 To get the first non-null value between null and zero:
+ ;SELECT ifnull(null, 0) 
+
+
+
+instr(haystack, needle)
+══════════════════════════════════════════════════════════════════════
+ Finds the first occurrence of the needle within the haystack and
+ returns the number of prior characters plus 1, or 0 if the needle
+ was not found
+Parameters
+ haystack The string to search within
+ needle The string to look for in the haystack
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), leftstr(), length(),
+ logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), parse_url(),
+ printf(), proper(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
+ xpath()
+Example
+#1 To test get the position of 'b' in the string 'abc':
+ ;SELECT instr('abc', 'b') 
+
+
+
+jget(json, ptr, [default])
+══════════════════════════════════════════════════════════════════════
+ Get the value from a JSON object using a JSON-Pointer.
+Parameters
+ json The JSON object to query.
+ ptr The JSON-Pointer to lookup in the object.
+ default The default value if the value was not found
+See Also
+ json_concat(), json_contains(), json_group_array(),
+ json_group_object(), yaml_to_json()
+Examples
+#1 To get the root of a JSON value:
+ ;SELECT jget('1', '') 
+
+
+#2 To get the property named 'b' in a JSON object:
+ ;SELECT jget('{ "a": 1, "b": 2 }', '/b') 
+
+
+#3 To get the 'msg' property and return a default if it does not exist:
+ ;SELECT jget(null, '/msg', 'Hello') 
+
+
+
+joinpath(path, ...)
+══════════════════════════════════════════════════════════════════════
+ Join components of a path together.
+Parameter
+ path One or more path components to join together. If an
+ argument starts with a forward or backward slash, it will be
+ considered an absolute path and any preceding elements will
+ be ignored.
+See Also
+ basename(), dirname(), readlink(), realpath()
+Examples
+#1 To join a directory and file name into a relative path:
+ ;SELECT joinpath('foo', 'bar') 
+
+
+#2 To join an empty component with other names into a relative path:
+ ;SELECT joinpath('', 'foo', 'bar') 
+
+
+#3 To create an absolute path with two path components:
+ ;SELECT joinpath('/', 'foo', 'bar') 
+
+
+#4 To create an absolute path from a path component that starts with a forward slash:
+ ;SELECT joinpath('/', 'foo', '/bar') 
+
+
+
+json_concat(json, value, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns an array with the given values concatenated onto the end.
+ If the initial value is null, the result will be an array with the
+ given elements. If the initial value is an array, the result will
+ be an array with the given values at the end. If the initial value
+ is not null or an array, the result will be an array with two
+ elements: the initial value and the given value.
+Parameters
+ json The initial JSON value.
+ value The value(s) to add to the end of the array.
+See Also
+ jget(), json_contains(), json_group_array(), json_group_object(),
+ yaml_to_json()
+Examples
+#1 To append the number 4 to null:
+ ;SELECT json_concat(NULL, 4) 
+
+
+#2 To append 4 and 5 to the array [1, 2, 3]:
+ ;SELECT json_concat('[1, 2, 3]', 4, 5) 
+
+
+#3 To concatenate two arrays together:
+ ;SELECT json_concat('[1, 2, 3]', json('[4, 5]')) 
+
+
+
+json_contains(json, value)
+══════════════════════════════════════════════════════════════════════
+ Check if a JSON value contains the given element.
+Parameters
+ json The JSON value to query.
+ value The value to look for in the first argument
+See Also
+ jget(), json_concat(), json_group_array(), json_group_object(),
+ yaml_to_json()
+Examples
+#1 To test if a JSON array contains the number 4:
+ ;SELECT json_contains('[1, 2, 3]', 4) 
+
+
+#2 To test if a JSON array contains the string 'def':
+ ;SELECT json_contains('["abc", "def"]', 'def') 
+
+
+
+json_group_array(value, ...)
+══════════════════════════════════════════════════════════════════════
+ Collect the given values from a query into a JSON array
+Parameter
+ value The values to append to the array
+See Also
+ jget(), json_concat(), json_contains(), json_group_object(),
+ yaml_to_json()
+Examples
+#1 To create an array from arguments:
+ ;SELECT json_group_array('one', 2, 3.4) 
+
+
+#2 To create an array from a column of values:
+ ;SELECT json_group_array(column1) FROM (VALUES (1), (2), (3))
+
+
+
+json_group_object(name, value, ...)
+══════════════════════════════════════════════════════════════════════
+ Collect the given values from a query into a JSON object
+Parameters
+ name The property name for the value
+ value The value to add to the object
+See Also
+ jget(), json_concat(), json_contains(), json_group_array(),
+ yaml_to_json()
+Examples
+#1 To create an object from arguments:
+ ;SELECT json_group_object('a', 1, 'b', 2) 
+
+
+#2 To create an object from a pair of columns:
+ ;SELECT json_group_object(column1, column2) FROM (VALUES ('a', 1), ('b', 2))
+
+
+
+julianday(timestring, modifier, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the number of days since noon in Greenwich on November 24,
+ 4714 B.C.
+Parameters
+ timestring The string to convert to a date with time.
+ modifier A transformation that is applied to the
+ value to the left.
+See Also
+ date(), datetime(), humanize_duration(), strftime(), time(),
+ timediff(), timeslice()
+Examples
+#1 To get the julian day from the timestamp '2017-01-02T03:04:05':
+ ;SELECT julianday('2017-01-02T03:04:05') 
+
+
+#2 To get the julian day from the timestamp '2017-01-02T03:04:05' plus one minute:
+ ;SELECT julianday('2017-01-02T03:04:05', '+1 minute')
+
+
+#3 To get the julian day from the timestamp 1491341842:
+ ;SELECT julianday(1491341842, 'unixepoch') 
+
+
+
+lag(expr, [offset], [default])
+══════════════════════════════════════════════════════════════════════
+ Returns the result of evaluating the expression against the previous
+ row in the partition.
+Parameters
+ expr The expression to execute over the previous row
+ offset The offset from the current row in the partition
+ default The default value if the previous row does not
+ exist instead of NULL
+See Also
+ cume_dist(), dense_rank(), first_value(), last_value(), lead(),
+ nth_value(), ntile(), percent_rank(), rank(), row_number()
+
+last_insert_rowid()
+══════════════════════════════════════════════════════════════════════
+ Returns the ROWID of the last row insert from the database
+ connection which invoked the function
+
+
+last_value(expr)
+══════════════════════════════════════════════════════════════════════
+ Returns the result of evaluating the expression against the last row
+ in the window frame.
+Parameter
+ expr The expression to execute over the last row
+See Also
+ cume_dist(), dense_rank(), first_value(), lag(), lead(), nth_value(),
+ ntile(), percent_rank(), rank(), row_number()
+
+lead(expr, [offset], [default])
+══════════════════════════════════════════════════════════════════════
+ Returns the result of evaluating the expression against the next row
+ in the partition.
+Parameters
+ expr The expression to execute over the next row
+ offset The offset from the current row in the partition
+ default The default value if the next row does not exist
+ instead of NULL
+See Also
+ cume_dist(), dense_rank(), first_value(), lag(), last_value(),
+ nth_value(), ntile(), percent_rank(), rank(), row_number()
+
+leftstr(str, N)
+══════════════════════════════════════════════════════════════════════
+ Returns the N leftmost (UTF-8) characters in the given string.
+Parameters
+ str The string to return subset.
+ N The number of characters from the left side of the
+ string to return.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), length(),
+ logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), parse_url(),
+ printf(), proper(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
+ xpath()
+Examples
+#1 To get the first character of the string 'abc':
+ ;SELECT leftstr('abc', 1) 
+
+
+#2 To get the first ten characters of a string, regardless of size:
+ ;SELECT leftstr('abc', 10) 
+
+
+
+length(str)
+══════════════════════════════════════════════════════════════════════
+ Returns the number of characters (not bytes) in the given string
+ prior to the first NUL character
+Parameter
+ str The string to determine the length of
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), parse_url(),
+ printf(), proper(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
+ xpath()
+Example
+#1 To get the length of the string 'abc':
+ ;SELECT length('abc') 
+
+
+
+like(pattern, str, [escape])
+══════════════════════════════════════════════════════════════════════
+ Match a string against a pattern
+Parameters
+ pattern The pattern to match. A percent symbol (%) will
+ match zero or more characters and an underscore (_) will
+ match a single character.
+ str The string to match
+ escape The escape character that can be used to prefix
+ a literal percent or underscore in the pattern.
+
+Examples
+#1 To test if the string 'aabcc' contains the letter 'b':
+ ;SELECT like('%b%', 'aabcc') 
+
+
+#2 To test if the string 'aab%' ends with 'b%':
+ ;SELECT like('%b:%', 'aab%', ':') 
+
+
+
+likelihood(value, probability)
+══════════════════════════════════════════════════════════════════════
+ Provides a hint to the query planner that the first argument is a
+ boolean that is true with the given probability
+Parameters
+ value The boolean value to return
+ probability A floating point constant between 0.0
+ and 1.0
+
+
+likely(value)
+══════════════════════════════════════════════════════════════════════
+ Short-hand for likelihood(X,0.9375)
+Parameter
+ value The boolean value to return
+
+
+lnav_top_file()
+══════════════════════════════════════════════════════════════════════
+ Return the name of the file that the top line in the current view
+ came from.
+
+
+lnav_version()
+══════════════════════════════════════════════════════════════════════
+ Return the current version of lnav
+
+
+load_extension(path, [entry-point])
+══════════════════════════════════════════════════════════════════════
+ Loads SQLite extensions out of the given shared library file using
+ the given entry point.
+Parameters
+ path The path to the shared library
+ containing the extension.
+ entry-point
+
+
+log(x)
+══════════════════════════════════════════════════════════════════════
+ Returns the natural logarithm of x
+Parameter
+ x The number
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log10(), max(),
+ min(), pi(), power(), radians(), round(), sign(), square(), sum(),
+ total()
+Example
+#1 To get the natual logarithm of 8:
+ ;SELECT log(8) 
+
+
+
+log10(x)
+══════════════════════════════════════════════════════════════════════
+ Returns the base-10 logarithm of X
+Parameter
+ x The number
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the logarithm of 100:
+ ;SELECT log10(100) 
+
+
+
+log_top_datetime()
+══════════════════════════════════════════════════════════════════════
+ Return the timestamp of the line at the top of the log view.
+
+
+log_top_line()
+══════════════════════════════════════════════════════════════════════
+ Return the line number at the top of the log view.
+
+
+logfmt2json(str)
+══════════════════════════════════════════════════════════════════════
+ Convert a logfmt-encoded string into JSON
+Parameter
+ str The logfmt message to parse
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), lower(), ltrim(), padc(), padl(), padr(), parse_url(),
+ printf(), proper(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
+ xpath()
+Example
+#1 To extract key/value pairs from a log message:
+ ;SELECT logfmt2json('foo=1 bar=2 name="Rolo Tomassi"')
+
+
+
+lower(str)
+══════════════════════════════════════════════════════════════════════
+ Returns a copy of the given string with all ASCII characters
+ converted to lower case.
+Parameter
+ str The string to convert.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), ltrim(), padc(), padl(), padr(), parse_url(),
+ printf(), proper(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
+ xpath()
+Example
+#1 To lowercase the string 'AbC':
+ ;SELECT lower('AbC') 
+
+
+
+ltrim(str, [chars])
+══════════════════════════════════════════════════════════════════════
+ Returns a string formed by removing any and all characters that
+ appear in the second argument from the left side of the first.
+Parameters
+ str The string to trim characters from the left side
+ chars The characters to trim. Defaults to spaces.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), padc(), padl(), padr(), parse_url(),
+ printf(), proper(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
+ xpath()
+Examples
+#1 To trim the leading space characters from the string ' abc':
+ ;SELECT ltrim(' abc') 
+
+
+#2 To trim the characters 'a' or 'b' from the left side of the string 'aaaabbbc':
+ ;SELECT ltrim('aaaabbbc', 'ab') 
+
+
+
+max(X, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the argument with the maximum value, or return NULL if any
+ argument is NULL.
+Parameter
+ X The numbers to find the maximum of. If only one argument is
+ given, this function operates as an aggregate.
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ min(), pi(), power(), radians(), round(), sign(), square(), sum(),
+ total()
+Examples
+#1 To get the largest value from the parameters:
+ ;SELECT max(2, 1, 3) 
+
+
+#2 To get the largest value from an aggregate:
+ ;SELECT max(status) FROM http_status_codes 
+
+
+
+min(X, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the argument with the minimum value, or return NULL if any
+ argument is NULL.
+Parameter
+ X The numbers to find the minimum of. If only one argument is
+ given, this function operates as an aggregate.
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), pi(), power(), radians(), round(), sign(), square(), sum(),
+ total()
+Examples
+#1 To get the smallest value from the parameters:
+ ;SELECT min(2, 1, 3) 
+
+
+#2 To get the smallest value from an aggregate:
+ ;SELECT min(status) FROM http_status_codes 
+
+
+
+nth_value(expr, N)
+══════════════════════════════════════════════════════════════════════
+ Returns the result of evaluating the expression against the nth row
+ in the window frame.
+Parameters
+ expr The expression to execute over the nth row
+ N The row number
+See Also
+ cume_dist(), dense_rank(), first_value(), lag(), last_value(), lead(),
+ ntile(), percent_rank(), rank(), row_number()
+
+ntile(groups)
+══════════════════════════════════════════════════════════════════════
+ Returns the number of the group that the current row is a part of
+Parameter
+ groups The number of groups
+See Also
+ cume_dist(), dense_rank(), first_value(), lag(), last_value(), lead(),
+ nth_value(), percent_rank(), rank(), row_number()
+
+nullif(X, Y)
+══════════════════════════════════════════════════════════════════════
+ Returns its first argument if the arguments are different and NULL
+ if the arguments are the same.
+Parameters
+ X The first argument to compare.
+ Y The argument to compare against the first.
+
+Examples
+#1 To test if 1 is different from 1:
+ ;SELECT nullif(1, 1) 
+
+
+#2 To test if 1 is different from 2:
+ ;SELECT nullif(1, 2) 
+
+
+
+padc(str, len)
+══════════════════════════════════════════════════════════════════════
+ Pad the given string with enough spaces to make it centered within
+ the given length
+Parameters
+ str The string to pad
+ len The minimum desired length of the output string
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padl(), padr(), parse_url(),
+ printf(), proper(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
+ xpath()
+Examples
+#1 To pad the string 'abc' to a length of six characters:
+ ;SELECT padc('abc', 6) || 'def' 
+
+
+#2 To pad the string 'abcdef' to a length of eight characters:
+ ;SELECT padc('abcdef', 8) || 'ghi' 
+
+
+
+padl(str, len)
+══════════════════════════════════════════════════════════════════════
+ Pad the given string with leading spaces until it reaches the
+ desired length
+Parameters
+ str The string to pad
+ len The minimum desired length of the output string
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padr(), parse_url(),
+ printf(), proper(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
+ xpath()
+Examples
+#1 To pad the string 'abc' to a length of six characters:
+ ;SELECT padl('abc', 6) 
+
+
+#2 To pad the string 'abcdef' to a length of four characters:
+ ;SELECT padl('abcdef', 4) 
+
+
+
+padr(str, len)
+══════════════════════════════════════════════════════════════════════
+ Pad the given string with trailing spaces until it reaches the
+ desired length
+Parameters
+ str The string to pad
+ len The minimum desired length of the output string
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), parse_url(),
+ printf(), proper(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
+ xpath()
+Examples
+#1 To pad the string 'abc' to a length of six characters:
+ ;SELECT padr('abc', 6) || 'def' 
+
+
+#2 To pad the string 'abcdef' to a length of four characters:
+ ;SELECT padr('abcdef', 4) || 'ghi' 
+
+
+
+parse_url(url)
+══════════════════════════════════════════════════════════════════════
+ Parse a URL and return the components in a JSON object. Limitations:
+ not all URL schemes are supported and repeated query parameters are
+ not captured.
+Parameter
+ url The URL to parse
+Results
+ scheme The URL's scheme
+ username The name of the user specified in the URL
+ password The password specified in the URL
+ host The host name / IP specified in the URL
+ port The port specified in the URL
+ path The path specified in the URL
+ query The query string in the URL
+ parameters An object containing the query parameters
+ fragment The fragment specified in the URL
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ printf(), proper(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), trim(), unicode(), unparse_url(), unparse_url(),
+ upper(), xpath()
+Examples
+#1 To parse the URL 'https://example.com/search?q=hello%20world':
+ ;SELECT parse_url('https://example.com/search?q=hello%20world')
+
+
+#2 To parse the URL 'https://alice@[fe80::14ff:4ee5:1215:2fb2]':
+ ;SELECT parse_url('https://alice@[fe80::14ff:4ee5:1215:2fb2]')
+
+
+
+percent_rank()
+══════════════════════════════════════════════════════════════════════
+ Returns (rank - 1) / (partition-rows - 1)
+See Also
+ cume_dist(), dense_rank(), first_value(), lag(), last_value(), lead(),
+ nth_value(), ntile(), rank(), row_number()
+
+pi()
+══════════════════════════════════════════════════════════════════════
+ Returns the value of PI
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), power(), radians(), round(), sign(), square(), sum(),
+ total()
+Example
+#1 To get the value of PI:
+ ;SELECT pi() 
+
+
+
+power(base, exp)
+══════════════════════════════════════════════════════════════════════
+ Returns the base to the given exponent
+Parameters
+ base The base number
+ exp The exponent
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), pi(), radians(), round(), sign(), square(), sum(),
+ total()
+Example
+#1 To raise two to the power of three:
+ ;SELECT power(2, 3) 
+
+
+
+printf(format, X)
+══════════════════════════════════════════════════════════════════════
+ Returns a string with this functions arguments substituted into the
+ given format. Substitution points are specified using percent (%)
+ options, much like the standard C printf() function.
+Parameters
+ format The format of the string to return.
+ X The argument to substitute at a given position in
+ the format.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), proper(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
+ xpath()
+Examples
+#1 To substitute 'World' into the string 'Hello, %s!':
+ ;SELECT printf('Hello, %s!', 'World') 
+
+
+#2 To right-align 'small' in the string 'align:' with a column width of 10:
+ ;SELECT printf('align: % 10s', 'small') 
+
+
+#3 To format 11 with a width of five characters and leading zeroes:
+ ;SELECT printf('value: %05d', 11) 
+
+
+
+proper(str)
+══════════════════════════════════════════════════════════════════════
+ Capitalize the first character of words in the given string
+Parameter
+ str The string to capitalize.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
+ xpath()
+Example
+#1 To capitalize the words in the string 'hello, world!':
+ ;SELECT proper('hello, world!') 
+
+
+
+quote(X)
+══════════════════════════════════════════════════════════════════════
+ Returns the text of an SQL literal which is the value of its
+ argument suitable for inclusion into an SQL statement.
+Parameter
+ X The string to quote.
+
+Examples
+#1 To quote the string 'abc':
+ ;SELECT quote('abc') 
+
+
+#2 To quote the string 'abc'123':
+ ;SELECT quote('abc''123') 
+
+
+
+radians(degrees)
+══════════════════════════════════════════════════════════════════════
+ Converts degrees to radians
+Parameter
+ degrees The degrees value to convert to radians
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), pi(), power(), round(), sign(), square(), sum(), total()
+Example
+#1 To convert 180 degrees to radians:
+ ;SELECT radians(180) 
+
+
+
+raise_error(msg)
+══════════════════════════════════════════════════════════════════════
+ Raises an error with the given message when executed
+Parameter
+ msg The error message
+
+
+random()
+══════════════════════════════════════════════════════════════════════
+ Returns a pseudo-random integer between -9223372036854775808 and
+ +9223372036854775807.
+
+
+randomblob(N)
+══════════════════════════════════════════════════════════════════════
+ Return an N-byte blob containing pseudo-random bytes.
+Parameter
+ N The size of the blob in bytes.
+
+
+rank()
+══════════════════════════════════════════════════════════════════════
+ Returns the row_number() of the first peer in each group with gaps
+See Also
+ cume_dist(), dense_rank(), first_value(), lag(), last_value(), lead(),
+ nth_value(), ntile(), percent_rank(), row_number()
+
+readlink(path)
+══════════════════════════════════════════════════════════════════════
+ Read the target of a symbolic link.
+Parameter
+ path The path to the symbolic link.
+See Also
+ basename(), dirname(), joinpath(), realpath()
+
+realpath(path)
+══════════════════════════════════════════════════════════════════════
+ Returns the resolved version of the given path, expanding symbolic
+ links and resolving '.' and '..' references.
+Parameter
+ path The path to resolve.
+See Also
+ basename(), dirname(), joinpath(), readlink()
+
+regexp(re, str)
+══════════════════════════════════════════════════════════════════════
+ Test if a string matches a regular expression
+Parameters
+ re The regular expression to use
+ str The string to test against the regular expression
+
+
+regexp_capture(string, pattern)
+══════════════════════════════════════════════════════════════════════
+ A table-valued function that executes a regular-expression over a
+ string and returns the captured values. If the regex only matches a
+ subset of the input string, it will be rerun on the remaining parts
+ of the string until no more matches are found.
+Parameters
+ string The string to match against the given pattern.
+ pattern The regular expression to match.
+Results
+ match_index The match iteration. This value
+ will increase each time a new match is found in the
+ input string.
+ capture_index The index of the capture in the
+ regex.
+ capture_name The name of the capture in the
+ regex.
+ capture_count The total number of captures in the
+ regex.
+ range_start The start of the capture in the
+ input string.
+ range_stop The stop of the capture in the input
+ string.
+ content The captured value from the string.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
+ xpath()
+Example
+#1 To extract the key/value pairs 'a'/1 and 'b'/2 from the string 'a=1; b=2':
+ ;SELECT * FROM regexp_capture('a=1; b=2', '(\w+)=(\d+)')
+
+
+
+regexp_capture_into_json(string, pattern, [options])
+══════════════════════════════════════════════════════════════════════
+ A table-valued function that executes a regular-expression over a
+ string and returns the captured values as a JSON object. If the
+ regex only matches a subset of the input string, it will be rerun on
+ the remaining parts of the string until no more matches are found.
+Parameters
+ string The string to match against the given pattern.
+ pattern The regular expression to match.
+ options A JSON object with the following option:
+ convert-numbers - True (default) if text that looks like
+ numeric data should be converted to JSON numbers, false if
+ they should be captured as strings.
+Results
+ match_index The match iteration. This value will
+ increase each time a new match is found in the input
+ string.
+ content The captured values from the string.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
+ substr(), trim(), unicode(), unparse_url(), upper(), xpath()
+Example
+#1 To extract the key/value pairs 'a'/1 and 'b'/2 from the string 'a=1; b=2':
+ ;SELECT * FROM regexp_capture_into_json('a=1; b=2', '(\w+)=(\d+)')
+
+
+
+regexp_match(re, str)
+══════════════════════════════════════════════════════════════════════
+ Match a string against a regular expression and return the capture
+ groups as JSON.
+Parameters
+ re The regular expression to use
+ str The string to test against the regular expression
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_replace(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+Examples
+#1 To capture the digits from the string '123':
+ ;SELECT regexp_match('(\d+)', '123') 
+
+
+#2 To capture a number and word into a JSON object with the properties 'col_0' and
+ 'col_1':
+ ;SELECT regexp_match('(\d+) (\w+)', '123 four') 
+
+
+#3 To capture a number and word into a JSON object with the named properties 'num' and
+ 'str':
+ ;SELECT regexp_match('(?<num>\d+) (?<str>\w+)', '123 four')
+
+
+
+regexp_replace(str, re, repl)
+══════════════════════════════════════════════════════════════════════
+ Replace the parts of a string that match a regular expression.
+Parameters
+ str The string to perform replacements on
+ re The regular expression to match
+ repl The replacement string. You can reference capture
+ groups with a backslash followed by the number of the group,
+ starting with 1.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_match(), replace(),
+ replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+Examples
+#1 To replace the word at the start of the string 'Hello, World!' with 'Goodbye':
+ ;SELECT regexp_replace('Hello, World!', '^(\w+)', 'Goodbye')
+
+
+#2 To wrap alphanumeric words with angle brackets:
+ ;SELECT regexp_replace('123 abc', '(\w+)', '<\1>') 
+
+
+
+replace(str, old, replacement)
+══════════════════════════════════════════════════════════════════════
+ Returns a string formed by substituting the replacement string for
+ every occurrence of the old string in the given string.
+Parameters
+ str The string to perform substitutions on.
+ old The string to be replaced.
+ replacement The string to replace any occurrences of
+ the old string with.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+Examples
+#1 To replace the string 'x' with 'z' in 'abc':
+ ;SELECT replace('abc', 'x', 'z') 
+
+
+#2 To replace the string 'a' with 'z' in 'abc':
+ ;SELECT replace('abc', 'a', 'z') 
+
+
+
+replicate(str, N)
+══════════════════════════════════════════════════════════════════════
+ Returns the given string concatenated N times.
+Parameters
+ str The string to replicate.
+ N The number of times to replicate the string.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), reverse(), rightstr(), rtrim(), sparkline(), spooky_hash(),
+ startswith(), strfilter(), substr(), trim(), unicode(), unparse_url(),
+ upper(), xpath()
+Example
+#1 To repeat the string 'abc' three times:
+ ;SELECT replicate('abc', 3) 
+
+
+
+reverse(str)
+══════════════════════════════════════════════════════════════════════
+ Returns the reverse of the given string.
+Parameter
+ str The string to reverse.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+Example
+#1 To reverse the string 'abc':
+ ;SELECT reverse('abc') 
+
+
+
+rightstr(str, N)
+══════════════════════════════════════════════════════════════════════
+ Returns the N rightmost (UTF-8) characters in the given string.
+Parameters
+ str The string to return subset.
+ N The number of characters from the right side of the
+ string to return.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rtrim(), sparkline(), spooky_hash(),
+ startswith(), strfilter(), substr(), trim(), unicode(), unparse_url(),
+ upper(), xpath()
+Examples
+#1 To get the last character of the string 'abc':
+ ;SELECT rightstr('abc', 1) 
+
+
+#2 To get the last ten characters of a string, regardless of size:
+ ;SELECT rightstr('abc', 10) 
+
+
+
+round(num, [digits])
+══════════════════════════════════════════════════════════════════════
+ Returns a floating-point value rounded to the given number of digits
+ to the right of the decimal point.
+Parameters
+ num The value to round.
+ digits The number of digits to the right of the decimal
+ to round to.
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), pi(), power(), radians(), sign(), square(), sum(),
+ total()
+Examples
+#1 To round the number 123.456 to an integer:
+ ;SELECT round(123.456) 
+
+
+#2 To round the number 123.456 to a precision of 1:
+ ;SELECT round(123.456, 1) 
+
+
+#3 To round the number 123.456 to a precision of 5:
+ ;SELECT round(123.456, 5) 
+
+
+
+row_number()
+══════════════════════════════════════════════════════════════════════
+ Returns the number of the row within the current partition, starting
+ from 1.
+See Also
+ cume_dist(), dense_rank(), first_value(), lag(), last_value(), lead(),
+ nth_value(), ntile(), percent_rank(), rank()
+Example
+#1 To number messages from a process:
+ ;SELECT row_number() OVER (PARTITION BY ex_procname ORDER BY log_line) AS msg_num,
+  ex_procname, log_body FROM lnav_example_log
+
+
+
+rtrim(str, [chars])
+══════════════════════════════════════════════════════════════════════
+ Returns a string formed by removing any and all characters that
+ appear in the second argument from the right side of the first.
+Parameters
+ str The string to trim characters from the right side
+ chars The characters to trim. Defaults to spaces.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+Examples
+#1 To trim the space characters from the end of the string 'abc ':
+ ;SELECT rtrim('abc ') 
+
+
+#2 To trim the characters 'b' and 'c' from the string 'abbbbcccc':
+ ;SELECT rtrim('abbbbcccc', 'bc') 
+
+
+
+sign(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the sign of the given number as -1, 0, or 1
+Parameter
+ num The number
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), pi(), power(), radians(), round(), square(), sum(),
+ total()
+Examples
+#1 To get the sign of 10:
+ ;SELECT sign(10) 
+
+
+#2 To get the sign of 0:
+ ;SELECT sign(0) 
+
+
+#3 To get the sign of -10:
+ ;SELECT sign(-10) 
+
+
+
+sparkline(value, [upper])
+══════════════════════════════════════════════════════════════════════
+ Function used to generate a sparkline bar chart. The non-aggregate
+ version converts a single numeric value on a range to a bar chart
+ character. The aggregate version returns a string with a bar
+ character for every numeric input
+Parameters
+ value The numeric value to convert
+ upper The upper bound of the numeric range. The
+ non-aggregate version defaults to 100. The aggregate
+ version uses the largest value in the inputs.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), spooky_hash(),
+ startswith(), strfilter(), substr(), trim(), unicode(), unparse_url(),
+ upper(), xpath()
+Examples
+#1 To get the unicode block element for the value 32 in the range of 0-128:
+ ;SELECT sparkline(32, 128) 
+
+
+#2 To chart the values in a JSON array:
+ ;SELECT sparkline(value) FROM json_each('[0, 1, 2, 3, 4, 5, 6, 7, 8]')
+
+
+
+spooky_hash(str, ...)
+══════════════════════════════════════════════════════════════════════
+ Compute the hash value for the given arguments.
+Parameter
+ str The string to hash
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ startswith(), strfilter(), substr(), trim(), unicode(), unparse_url(),
+ upper(), xpath()
+Examples
+#1 To produce a hash for the string 'Hello, World!':
+ ;SELECT spooky_hash('Hello, World!') 
+
+
+#2 To produce a hash for the parameters where one is NULL:
+ ;SELECT spooky_hash('Hello, World!', NULL) 
+
+
+#3 To produce a hash for the parameters where one is an empty string:
+ ;SELECT spooky_hash('Hello, World!', '') 
+
+
+#4 To produce a hash for the parameters where one is a number:
+ ;SELECT spooky_hash('Hello, World!', 123) 
+
+
+
+sqlite_compileoption_get(N)
+══════════════════════════════════════════════════════════════════════
+ Returns the N-th compile-time option used to build SQLite or NULL if
+ N is out of range.
+Parameter
+ N The option number to get
+
+
+sqlite_compileoption_used(option)
+══════════════════════════════════════════════════════════════════════
+ Returns true (1) or false (0) depending on whether or not that
+ compile-time option was used during the build.
+Parameter
+ option The name of the compile-time option.
+
+Example
+#1 To check if the SQLite library was compiled with ENABLE_FTS3:
+ ;SELECT sqlite_compileoption_used('ENABLE_FTS3') 
+
+
+
+sqlite_source_id()
+══════════════════════════════════════════════════════════════════════
+ Returns a string that identifies the specific version of the source
+ code that was used to build the SQLite library.
+
+
+sqlite_version()
+══════════════════════════════════════════════════════════════════════
+ Returns the version string for the SQLite library that is running.
+
+
+square(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the square of the argument
+Parameter
+ num The number to square
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), pi(), power(), radians(), round(), sign(), sum(),
+ total()
+Example
+#1 To get the square of two:
+ ;SELECT square(2) 
+
+
+
+startswith(str, prefix)
+══════════════════════════════════════════════════════════════════════
+ Test if a string begins with the given prefix
+Parameters
+ str The string to test
+ prefix The prefix to check in the string
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), strfilter(), substr(), trim(), unicode(), unparse_url(),
+ upper(), xpath()
+Examples
+#1 To test if the string 'foobar' starts with 'foo':
+ ;SELECT startswith('foobar', 'foo') 
+
+
+#2 To test if the string 'foobar' starts with 'bar':
+ ;SELECT startswith('foobar', 'bar') 
+
+
+
+strfilter(source, include)
+══════════════════════════════════════════════════════════════════════
+ Returns the source string with only the characters given in the
+ second parameter
+Parameters
+ source The string to filter
+ include The characters to include in the result
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), substr(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+Example
+#1 To get the 'b', 'c', and 'd' characters from the string 'abcabc':
+ ;SELECT strfilter('abcabc', 'bcd') 
+
+
+
+strftime(format, timestring, modifier, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the date formatted according to the format string specified
+ as the first argument.
+Parameters
+ format A format string with substitutions similar
+ to those found in the strftime() standard C library.
+ timestring The string to convert to a date with time.
+ modifier A transformation that is applied to the
+ value to the left.
+See Also
+ date(), datetime(), humanize_duration(), julianday(), time(),
+ timediff(), timeslice()
+Examples
+#1 To get the year from the timestamp '2017-01-02T03:04:05':
+ ;SELECT strftime('%Y', '2017-01-02T03:04:05') 
+
+
+#2 To create a string with the time from the timestamp '2017-01-02T03:04:05' plus one
+ minute:
+ ;SELECT strftime('The time is: %H:%M:%S', '2017-01-02T03:04:05', '+1 minute')
+
+
+#3 To create a string with the Julian day from the epoch timestamp 1491341842:
+ ;SELECT strftime('Julian day: %J', 1491341842, 'unixepoch')
+
+
+
+substr(str, start, [size])
+══════════════════════════════════════════════════════════════════════
+ Returns a substring of input string X that begins with the Y-th
+ character and which is Z characters long.
+Parameters
+ str The string to extract a substring from.
+ start The index within 'str' that is the start of the
+ substring. Indexes begin at 1. A negative value means that
+ the substring is found by counting from the right rather
+ than the left.
+ size The size of the substring. If not given, then all
+ characters through the end of the string are returned. If
+ the value is negative, then the characters before the start
+ are returned.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
+Examples
+#1 To get the substring starting at the second character until the end of the string
+ 'abc':
+ ;SELECT substr('abc', 2) 
+
+
+#2 To get the substring of size one starting at the second character of the string
+ 'abc':
+ ;SELECT substr('abc', 2, 1) 
+
+
+#3 To get the substring starting at the last character until the end of the string
+ 'abc':
+ ;SELECT substr('abc', -1) 
+
+
+#4 To get the substring starting at the last character and going backwards one step of
+ the string 'abc':
+ ;SELECT substr('abc', -1, -1) 
+
+
+
+sum(X)
+══════════════════════════════════════════════════════════════════════
+ Returns the sum of the values in the group as an integer.
+Parameter
+ X The values to add.
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), pi(), power(), radians(), round(), sign(), square(),
+ total()
+Example
+#1 To sum all of the values in the column 'ex_duration' from the table
+ 'lnav_example_log':
+ ;SELECT sum(ex_duration) FROM lnav_example_log 
+
+
+
+time(timestring, modifier, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the time in this format: HH:MM:SS.
+Parameters
+ timestring The string to convert to a time.
+ modifier A transformation that is applied to the
+ value to the left.
+See Also
+ date(), datetime(), humanize_duration(), julianday(), strftime(),
+ timediff(), timeslice()
+Examples
+#1 To get the time portion of the timestamp '2017-01-02T03:04:05':
+ ;SELECT time('2017-01-02T03:04:05') 
+
+
+#2 To get the time portion of the timestamp '2017-01-02T03:04:05' plus one minute:
+ ;SELECT time('2017-01-02T03:04:05', '+1 minute') 
+
+
+#3 To get the time portion of the epoch timestamp 1491341842:
+ ;SELECT time(1491341842, 'unixepoch') 
+
+
+
+timediff(time1, time2)
+══════════════════════════════════════════════════════════════════════
+ Compute the difference between two timestamps in seconds
+Parameters
+ time1 The first timestamp
+ time2 The timestamp to subtract from the first
+See Also
+ date(), datetime(), humanize_duration(), julianday(), strftime(),
+ time(), timeslice()
+Examples
+#1 To get the difference between two timestamps:
+ ;SELECT timediff('2017-02-03T04:05:06', '2017-02-03T04:05:00')
+
+
+#2 To get the difference between relative timestamps:
+ ;SELECT timediff('today', 'yesterday') 
+
+
+
+timeslice(time, slice)
+══════════════════════════════════════════════════════════════════════
+ Return the start of the slice of time that the given timestamp falls
+ in. If the time falls outside of the slice, NULL is returned.
+Parameters
+ time The timestamp to get the time slice for.
+ slice The size of the time slices
+See Also
+ date(), datetime(), humanize_duration(), julianday(), strftime(),
+ time(), timediff()
+Examples
+#1 To get the timestamp rounded down to the start of the ten minute slice:
+ ;SELECT timeslice('2017-01-01T05:05:00', '10m') 
+
+
+#2 To group log messages into five minute buckets and count them:
+ ;SELECT timeslice(log_time_msecs, '5m') AS slice, count(1)
+   FROM lnav_example_log GROUP BY slice
+
+
+#3 To group log messages by those before 4:30am and after:
+ ;SELECT timeslice(log_time_msecs, 'before 4:30am') AS slice, count(1) FROM
+  lnav_example_log GROUP BY slice
+
+
+
+total(X)
+══════════════════════════════════════════════════════════════════════
+ Returns the sum of the values in the group as a floating-point.
+Parameter
+ X The values to add.
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), pi(), power(), radians(), round(), sign(), square(),
+ sum()
+Example
+#1 To total all of the values in the column 'ex_duration' from the table
+ 'lnav_example_log':
+ ;SELECT total(ex_duration) FROM lnav_example_log 
+
+
+
+total_changes()
+══════════════════════════════════════════════════════════════════════
+ Returns the number of row changes caused by INSERT, UPDATE or DELETE
+ statements since the current database connection was opened.
+
+
+trim(str, [chars])
+══════════════════════════════════════════════════════════════════════
+ Returns a string formed by removing any and all characters that
+ appear in the second argument from the left and right sides of the
+ first.
+Parameters
+ str The string to trim characters from the left and
+ right sides.
+ chars The characters to trim. Defaults to spaces.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), unicode(),
+ unparse_url(), upper(), xpath()
+Examples
+#1 To trim spaces from the start and end of the string ' abc ':
+ ;SELECT trim(' abc ') 
+
+
+#2 To trim the characters '-' and '+' from the string '-+abc+-':
+ ;SELECT trim('-+abc+-', '-+') 
+
+
+
+typeof(X)
+══════════════════════════════════════════════════════════════════════
+ Returns a string that indicates the datatype of the expression X:
+ "null", "integer", "real", "text", or "blob".
+Parameter
+ X The expression to check.
+
+Examples
+#1 To get the type of the number 1:
+ ;SELECT typeof(1) 
+
+
+#2 To get the type of the string 'abc':
+ ;SELECT typeof('abc') 
+
+
+
+unicode(X)
+══════════════════════════════════════════════════════════════════════
+ Returns the numeric unicode code point corresponding to the first
+ character of the string X.
+Parameter
+ X The string to examine.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(),
+ unparse_url(), upper(), xpath()
+Example
+#1 To get the unicode code point for the first character of 'abc':
+ ;SELECT unicode('abc') 
+
+
+
+unlikely(value)
+══════════════════════════════════════════════════════════════════════
+ Short-hand for likelihood(X, 0.0625)
+Parameter
+ value The boolean value to return
+
+
+unparse_url(obj)
+══════════════════════════════════════════════════════════════════════
+ Convert a JSON object containing the parts of a URL into a URL
+ string
+Parameter
+ obj The JSON object containing the URL parts
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Example
+#1 To unparse the object '{"scheme": "https", "host": "example.com"}':
+ ;SELECT unparse_url('{"scheme": "https", "host": "example.com"}')
+
+
+
+upper(str)
+══════════════════════════════════════════════════════════════════════
+ Returns a copy of the given string with all ASCII characters
+ converted to upper case.
+Parameter
+ str The string to convert.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), xpath()
+Example
+#1 To uppercase the string 'aBc':
+ ;SELECT upper('aBc') 
+
+
+
+xpath(xpath, xmldoc)
+══════════════════════════════════════════════════════════════════════
+ A table-valued function that executes an xpath expression over an
+ XML string and returns the selected values.
+Parameters
+ xpath The XPATH expression to evaluate over the XML
+ document.
+ xmldoc The XML document as a string.
+Results
+ result The result of the XPATH expression.
+ node_path The absolute path to the node containing the
+ result.
+ node_attr The node's attributes stored in JSON object.
+ node_text The node's text value.
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ unparse_url(), upper()
+Examples
+#1 To select the XML nodes on the path '/abc/def':
+ ;SELECT * FROM xpath('/abc/def', '<abc><def a="b">Hello</def><def>Bye</def></abc>')
+
+
+#2 To select all 'a' attributes on the path '/abc/def':
+ ;SELECT * FROM xpath('/abc/def/@a', '<abc><def a="b">Hello</def><def>Bye</def></abc>')
+
+
+#3 To select the text nodes on the path '/abc/def':
+ ;SELECT * FROM xpath('/abc/def/text()', '<abc><def a="b">Hello &#x2605;</def></abc>')
+
+
+
+yaml_to_json(yaml)
+══════════════════════════════════════════════════════════════════════
+ Convert a YAML document to a JSON-encoded string
+Parameter
+ yaml The YAML value to convert to JSON.
+See Also
+ jget(), json_concat(), json_contains(), json_group_array(),
+ json_group_object()
+Example
+#1 To convert the document "abc: def":
+ ;SELECT yaml_to_json('abc: def') 
+
+
+
+zeroblob(N)
+══════════════════════════════════════════════════════════════════════
+ Returns a BLOB consisting of N bytes of 0x00.
+Parameter
+ N The size of the BLOB.
+
+
+ATTACH DATABASE filename AS schema-name
+══════════════════════════════════════════════════════════════════════
+ Attach a database file to the current connection.
+Parameters
+ filename The path to the database file.
+ schema-name The prefix for tables in this database.
+
+Example
+#1 To attach the database file '/tmp/customers.db' with the name customers:
+ ;ATTACH DATABASE '/tmp/customers.db' AS customers 
+
+
+
+CASE [base-expr] WHEN cmp-expr1 THEN then-expr1 [... WHEN cmp-exprN THEN then-exprN] [ELSE else-expr] END
+══════════════════════════════════════════════════════════════════════
+ Evaluate a series of expressions in order until one evaluates to
+ true and then return it's result. Similar to an IF-THEN-ELSE
+ construct in other languages.
+Parameters
+ base-expr The base expression that is used for
+ comparison in the branches
+ cmp-expr The expression to test if this branch should
+ be taken
+ else-expr The result of this CASE if no branches
+ matched.
+
+Example
+#1 To evaluate the number one and return the string 'one':
+ ;SELECT CASE 1 WHEN 0 THEN 'zero' WHEN 1 THEN 'one' END
+
+
+
+CREATE [TEMP] VIEW [IF NOT EXISTS] [schema-name.] view-name AS select-stmt
+══════════════════════════════════════════════════════════════════════
+ Assign a name to a SELECT statement
+Parameters
+ IF NOT EXISTS Do not create the view if it already
+ exists
+ schema-name. The database to create the view in
+ view-name The name of the view
+ select-stmt The SELECT statement the view
+ represents
+
+
+DELETE FROM table-name [WHERE cond]
+══════════════════════════════════════════════════════════════════════
+ Delete rows from a table
+Parameters
+ table-name The name of the table
+ cond The conditions used to delete the rows.
+
+
+DETACH DATABASE schema-name
+══════════════════════════════════════════════════════════════════════
+ Detach a database from the current connection.
+Parameter
+ schema-name The prefix for tables in this database.
+
+Example
+#1 To detach the database named 'customers':
+ ;DETACH DATABASE customers 
+
+
+
+DROP VIEW [IF EXISTS] [schema-name.] view-name
+══════════════════════════════════════════════════════════════════════
+ Drop a view
+Parameters
+
+
+INSERT INTO [schema-name.] table-name [( column-name1 [, ... column-nameN] )] VALUES ( expr1 [, ... exprN] )
+══════════════════════════════════════════════════════════════════════
+ Insert rows into a table
+Parameters
+
+Example
+#1 To insert the pair containing 'MSG' and 'HELLO, WORLD!' into the
+ 'environ' table:
+ ;INSERT INTO environ VALUES ('MSG', 'HELLO, WORLD!')
+
+
+
+OVER window-name
+══════════════════════════════════════════════════════════════════════
+ Executes the preceding function over a window
+Parameter
+ window-name The name of the window definition
+
+
+SELECT result-column1 [, ... result-columnN] [FROM table1 [, ... tableN]] [WHERE cond] [GROUP BY grouping-expr1 [, ... grouping-exprN]] [ORDER BY ordering-term1 [, ... ordering-termN]] [LIMIT limit-expr1 [, ... limit-exprN]]
+══════════════════════════════════════════════════════════════════════
+ Query the database and return zero or more rows of data.
+Parameters
+ result-column The expression used to generate a
+ result for this column.
+ table The table(s) to query for data
+ cond The conditions used to select the
+ rows to return.
+ grouping-expr The expression to use when grouping
+ rows.
+ ordering-term The values to use when ordering the
+ result set.
+ limit-expr The maximum number of rows to
+ return.
+
+Example
+#1 To select all of the columns from the table 'syslog_log':
+ ;SELECT * FROM syslog_log 
+
+
+
+UPDATE table SET column-name1 = expr1 [, ... column-nameN = exprN] [WHERE cond]
+══════════════════════════════════════════════════════════════════════
+ Modify a subset of values in zero or more rows of the given table
+Parameters
+ table The table to update
+ column-name The columns in the table to update.
+ cond The condition used to determine whether
+ a row should be updated.
+
+Example
+#1 To mark the syslog message at line 40:
+ ;UPDATE syslog_log SET log_mark = 1 WHERE log_line = 40
+
+
+
+WITH [RECURSIVE] cte-table-name AS select-stmt
+══════════════════════════════════════════════════════════════════════
+ Create a temporary view that exists only for the duration of a SQL
+ statement.
+Parameters
+ cte-table-name The name for the temporary table.
+ select-stmt The SELECT statement used to
+ populate the temporary table.
+
diff --git a/test/expected/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.err b/test/expected/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.err
diff --git a/test/expected/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.out b/test/expected/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.out
new file mode 100644
index 0000000..5fb4d90
--- /dev/null
+++ b/test/expected/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.out
@@ -0,0 +1,37 @@
+Apr 7 00:49:42 Tim-Stacks-iMac kernel[0]: Ethernet [AppleBCM5701Ethernet]: Link up on en0, 1-Gigabit, Full-duplex, Symmetric flow-control, Debug [
+ 796d,
+ 2301,
+ 0de1,
+ 0300,
+ cde1,
+ 3800
+]
+Apr 7 05:49:53 Tim-Stacks-iMac.local GoogleSoftwareUpdateDaemon[17212]: -[KSUpdateCheckAction performAction]
+ KSUpdateCheckAction running KSServerUpdateRequest: <KSOmahaServerUpdateRequest:0x511f30
+ server=
+<KSOmahaServer:0x510d80>
+ url="https://tools.google.com/service/update2"
+ runningFetchers=0
+ tickets=1
+ activeTickets=1
+ rollCallTickets=1
+ body=
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+ <o:gupdate xmlns:o="http://www.google.com/update2/request" protocol="2.0" version="KeystoneDaemon-1.2.0.7709" ismachine="1" requestid="{0DFDBCD1-5E29-4DFC-BD99-31A2397198FE}">
+ <o:os platform="mac" version="MacOSX" sp="10.10.2_x86_64h"></o:os>
+ <o:app appid="com.google.Keystone" version="1.2.0.7709" lang="en-us" installage="180" brand="GGLG">
+ <o:ping r="1" a="1"></o:ping>
+ <o:updatecheck></o:updatecheck>
+ </o:app>
+ </o:gupdate>
+ >
+Apr 7 07:31:56 Tim-Stacks-iMac.local VirtualBox[36403]: WARNING: The Gestalt selector gestaltSystemVersion is returning 10.9.2 instead of 10.10.2. Use NSProcessInfo's operatingSystemVersion property to get correct system version number.
+ Call location:
+Apr 7 07:31:56 Tim-Stacks-iMac.local VirtualBox[36403]: 0 CarbonCore 0x00007fff8a9b3d9b ___Gestalt_SystemVersion_block_invoke + 113
+Apr 7 07:31:56 Tim-Stacks-iMac.local VirtualBox[36403]: 1 libdispatch.dylib 0x00007fff8bc84c13 _dispatch_client_callout + 8
+Apr 7 07:32:56 Tim-Stacks-iMac.local logger[234]: Bad data {
+ abc,
+ 123,
+ 456
+)
+}]
diff --git a/test/expected/test_cmds.sh_b7fcd26c45c850c3d43ce25b1f610a311eb898c5.err b/test/expected/test_cmds.sh_b7fcd26c45c850c3d43ce25b1f610a311eb898c5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_b7fcd26c45c850c3d43ce25b1f610a311eb898c5.err
diff --git a/test/expected/test_cmds.sh_b7fcd26c45c850c3d43ce25b1f610a311eb898c5.out b/test/expected/test_cmds.sh_b7fcd26c45c850c3d43ce25b1f610a311eb898c5.out
new file mode 100644
index 0000000..51109ea
--- /dev/null
+++ b/test/expected/test_cmds.sh_b7fcd26c45c850c3d43ce25b1f610a311eb898c5.out
@@ -0,0 +1 @@
+Thu Jun 06 19:13:20 2013 +0000 UTC -- 1370546000
diff --git a/test/expected/test_cmds.sh_b9f8bf53ec2736432eb048d94a391175eb4dc5bf.err b/test/expected/test_cmds.sh_b9f8bf53ec2736432eb048d94a391175eb4dc5bf.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_b9f8bf53ec2736432eb048d94a391175eb4dc5bf.err
diff --git a/test/expected/test_cmds.sh_b9f8bf53ec2736432eb048d94a391175eb4dc5bf.out b/test/expected/test_cmds.sh_b9f8bf53ec2736432eb048d94a391175eb4dc5bf.out
new file mode 100644
index 0000000..607eca0
--- /dev/null
+++ b/test/expected/test_cmds.sh_b9f8bf53ec2736432eb048d94a391175eb4dc5bf.out
@@ -0,0 +1,2 @@
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Jan 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
diff --git a/test/expected/test_cmds.sh_bc60341827636715c14c562863da9733cbde7e68.err b/test/expected/test_cmds.sh_bc60341827636715c14c562863da9733cbde7e68.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_bc60341827636715c14c562863da9733cbde7e68.err
diff --git a/test/expected/test_cmds.sh_bc60341827636715c14c562863da9733cbde7e68.out b/test/expected/test_cmds.sh_bc60341827636715c14c562863da9733cbde7e68.out
new file mode 100644
index 0000000..2678e6c
--- /dev/null
+++ b/test/expected/test_cmds.sh_bc60341827636715c14c562863da9733cbde7e68.out
@@ -0,0 +1 @@
+10.112.81.15 - - [15/Feb/2013:06:00:31 +0000] "-" 400 0 "-" "-"
diff --git a/test/expected/test_cmds.sh_be1d9628fc447b6f17121d9457ea1602afe8f3f3.err b/test/expected/test_cmds.sh_be1d9628fc447b6f17121d9457ea1602afe8f3f3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_be1d9628fc447b6f17121d9457ea1602afe8f3f3.err
diff --git a/test/expected/test_cmds.sh_be1d9628fc447b6f17121d9457ea1602afe8f3f3.out b/test/expected/test_cmds.sh_be1d9628fc447b6f17121d9457ea1602afe8f3f3.out
new file mode 100644
index 0000000..44e294d
--- /dev/null
+++ b/test/expected/test_cmds.sh_be1d9628fc447b6f17121d9457ea1602afe8f3f3.out
@@ -0,0 +1 @@
+Sun Jan 31 05:53:29 2021 +0000 UTC -- 1612072409
diff --git a/test/expected/test_cmds.sh_be3b7c5874b5f4d86cc230bd2f9802c98909e148.err b/test/expected/test_cmds.sh_be3b7c5874b5f4d86cc230bd2f9802c98909e148.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_be3b7c5874b5f4d86cc230bd2f9802c98909e148.err
diff --git a/test/expected/test_cmds.sh_be3b7c5874b5f4d86cc230bd2f9802c98909e148.out b/test/expected/test_cmds.sh_be3b7c5874b5f4d86cc230bd2f9802c98909e148.out
new file mode 100644
index 0000000..493283c
--- /dev/null
+++ b/test/expected/test_cmds.sh_be3b7c5874b5f4d86cc230bd2f9802c98909e148.out
@@ -0,0 +1 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_bf4e7fad67e281beaa11b6e2b03a00b419c7c9b0.err b/test/expected/test_cmds.sh_bf4e7fad67e281beaa11b6e2b03a00b419c7c9b0.err
new file mode 100644
index 0000000..07df1b2
--- /dev/null
+++ b/test/expected/test_cmds.sh_bf4e7fad67e281beaa11b6e2b03a00b419c7c9b0.err
@@ -0,0 +1,7 @@
+✘ error: invalid timestamp: 2022-06-16Tabc
+ reason: the leading part of the timestamp was matched, however, the trailing text “Tabc” was not
+ --> command-option:1
+ | :goto 2022-06-16Tabc 
+ |  ^--^ unrecognized input 
+ = note: input matched time format “%Y-%m-%d”
+ = help: fix the timestamp or remove the trailing text
diff --git a/test/expected/test_cmds.sh_bf4e7fad67e281beaa11b6e2b03a00b419c7c9b0.out b/test/expected/test_cmds.sh_bf4e7fad67e281beaa11b6e2b03a00b419c7c9b0.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_bf4e7fad67e281beaa11b6e2b03a00b419c7c9b0.out
diff --git a/test/expected/test_cmds.sh_c01e10f7cae8d36fa79ae03be887cb5477025f6d.err b/test/expected/test_cmds.sh_c01e10f7cae8d36fa79ae03be887cb5477025f6d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_c01e10f7cae8d36fa79ae03be887cb5477025f6d.err
diff --git a/test/expected/test_cmds.sh_c01e10f7cae8d36fa79ae03be887cb5477025f6d.out b/test/expected/test_cmds.sh_c01e10f7cae8d36fa79ae03be887cb5477025f6d.out
new file mode 100644
index 0000000..705f4ab
--- /dev/null
+++ b/test/expected/test_cmds.sh_c01e10f7cae8d36fa79ae03be887cb5477025f6d.out
@@ -0,0 +1,5 @@
+Sep 13 03:46:03 Tim-Stacks-iMac kernel[0]: IOThunderboltSwitch<0xffffff803f4b3000>(0x0)::listenerCallback - Thunderbolt HPD packet for route = 0x0 port = 11 unplug = 0
+Sep 13 03:46:03 Tim-Stacks-iMac kernel[0]: vm_compressor_flush - starting
+Sep 13 03:46:03 Tim-Stacks-iMac kernel[0]: AppleBCM5701Ethernet [en0]: 0 0 memWrInd fBJP_Wakeup_Timer
+Sep 13 03:13:16 Tim-Stacks-iMac kernel[0]: AppleThunderboltNHIType2::waitForOk2Go2Sx - retries = 60000
+Sep 13 03:46:03 Tim-Stacks-iMac kernel[0]: hibernate_page_list_setall(preflight 0) start 0xffffff838f1fc000, 0xffffff838f2bc000
diff --git a/test/expected/test_cmds.sh_c2b4431dd0cc36c6201d263b727b3305e8cda6b1.err b/test/expected/test_cmds.sh_c2b4431dd0cc36c6201d263b727b3305e8cda6b1.err
new file mode 100644
index 0000000..8295272
--- /dev/null
+++ b/test/expected/test_cmds.sh_c2b4431dd0cc36c6201d263b727b3305e8cda6b1.err
@@ -0,0 +1,7 @@
+✘ error: invalid argument: invalid
+ reason: expecting line number/percentage, timestamp, or relative time
+ --> command-option:1
+ | :goto invalid 
+ = help: :goto line#|N%|timestamp|#anchor
+ ══════════════════════════════════════════════════════════════════════
+ Go to the given location in the top view
diff --git a/test/expected/test_cmds.sh_c2b4431dd0cc36c6201d263b727b3305e8cda6b1.out b/test/expected/test_cmds.sh_c2b4431dd0cc36c6201d263b727b3305e8cda6b1.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_c2b4431dd0cc36c6201d263b727b3305e8cda6b1.out
diff --git a/test/expected/test_cmds.sh_c4777849c39a6c34dea5b0279cd7400692f1ab5f.err b/test/expected/test_cmds.sh_c4777849c39a6c34dea5b0279cd7400692f1ab5f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_c4777849c39a6c34dea5b0279cd7400692f1ab5f.err
diff --git a/test/expected/test_cmds.sh_c4777849c39a6c34dea5b0279cd7400692f1ab5f.out b/test/expected/test_cmds.sh_c4777849c39a6c34dea5b0279cd7400692f1ab5f.out
new file mode 100644
index 0000000..f2fef20
--- /dev/null
+++ b/test/expected/test_cmds.sh_c4777849c39a6c34dea5b0279cd7400692f1ab5f.out
@@ -0,0 +1,3 @@
+info: changed config option -- /ui/clock-format
+info: reset option -- /ui/clock-format
+/ui/clock-format = "%Y-%m-%dT%H:%M:%S %Z"
diff --git a/test/expected/test_cmds.sh_c4a15771f7e1487bf73b2e9d1564ad8ecfd76c7e.err b/test/expected/test_cmds.sh_c4a15771f7e1487bf73b2e9d1564ad8ecfd76c7e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_c4a15771f7e1487bf73b2e9d1564ad8ecfd76c7e.err
diff --git a/test/expected/test_cmds.sh_c4a15771f7e1487bf73b2e9d1564ad8ecfd76c7e.out b/test/expected/test_cmds.sh_c4a15771f7e1487bf73b2e9d1564ad8ecfd76c7e.out
new file mode 100644
index 0000000..8ab686e
--- /dev/null
+++ b/test/expected/test_cmds.sh_c4a15771f7e1487bf73b2e9d1564ad8ecfd76c7e.out
@@ -0,0 +1 @@
+Hello, World!
diff --git a/test/expected/test_cmds.sh_c72aed622c19d493968e33f20d5dde3838a4258f.err b/test/expected/test_cmds.sh_c72aed622c19d493968e33f20d5dde3838a4258f.err
new file mode 100644
index 0000000..538a78e
--- /dev/null
+++ b/test/expected/test_cmds.sh_c72aed622c19d493968e33f20d5dde3838a4258f.err
@@ -0,0 +1,6 @@
+✘ error: invalid unix time -- abc
+ --> command-option:1
+ | :unix-time abc 
+ = help: :unix-time seconds
+ ══════════════════════════════════════════════════════════════════════
+ Convert epoch time to a human-readable form
diff --git a/test/expected/test_cmds.sh_c72aed622c19d493968e33f20d5dde3838a4258f.out b/test/expected/test_cmds.sh_c72aed622c19d493968e33f20d5dde3838a4258f.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_c72aed622c19d493968e33f20d5dde3838a4258f.out
diff --git a/test/expected/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.err b/test/expected/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.err
diff --git a/test/expected/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.out b/test/expected/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.out
new file mode 100644
index 0000000..76c53dd
--- /dev/null
+++ b/test/expected/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.out
@@ -0,0 +1,2 @@
+ Sat Nov 03 09:20:00 1 normal 2 errors  0 warnings  1 marks
+ Sat Nov 03 09:45:00 1 normal 0 errors 0 warnings 0 marks
diff --git a/test/expected/test_cmds.sh_ca66660c973f76a3c2a147c7f5035bcb4e8a8bbc.err b/test/expected/test_cmds.sh_ca66660c973f76a3c2a147c7f5035bcb4e8a8bbc.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_ca66660c973f76a3c2a147c7f5035bcb4e8a8bbc.err
diff --git a/test/expected/test_cmds.sh_ca66660c973f76a3c2a147c7f5035bcb4e8a8bbc.out b/test/expected/test_cmds.sh_ca66660c973f76a3c2a147c7f5035bcb4e8a8bbc.out
new file mode 100644
index 0000000..6ae2e70
--- /dev/null
+++ b/test/expected/test_cmds.sh_ca66660c973f76a3c2a147c7f5035bcb4e8a8bbc.out
@@ -0,0 +1,2 @@
+2009-07-20 22:59:27,672:DEBUG:Hello, World!
+ How are you today?
diff --git a/test/expected/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.err b/test/expected/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.err
diff --git a/test/expected/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.out b/test/expected/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.out
new file mode 100644
index 0000000..bc67837
--- /dev/null
+++ b/test/expected/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.out
@@ -0,0 +1 @@
+ Sat Nov 03 00:00:00 2 normal 2 errors 0 warnings 0 marks
diff --git a/test/expected/test_cmds.sh_d3b69abdfb39e4bfa5828c2f9593e2b2b7ed4d5d.err b/test/expected/test_cmds.sh_d3b69abdfb39e4bfa5828c2f9593e2b2b7ed4d5d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_d3b69abdfb39e4bfa5828c2f9593e2b2b7ed4d5d.err
diff --git a/test/expected/test_cmds.sh_d3b69abdfb39e4bfa5828c2f9593e2b2b7ed4d5d.out b/test/expected/test_cmds.sh_d3b69abdfb39e4bfa5828c2f9593e2b2b7ed4d5d.out
new file mode 100644
index 0000000..0dd4cb7
--- /dev/null
+++ b/test/expected/test_cmds.sh_d3b69abdfb39e4bfa5828c2f9593e2b2b7ed4d5d.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_d76d77ad95b9f120825417a6a8220c13df9541fc.err b/test/expected/test_cmds.sh_d76d77ad95b9f120825417a6a8220c13df9541fc.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_d76d77ad95b9f120825417a6a8220c13df9541fc.err
diff --git a/test/expected/test_cmds.sh_d76d77ad95b9f120825417a6a8220c13df9541fc.out b/test/expected/test_cmds.sh_d76d77ad95b9f120825417a6a8220c13df9541fc.out
new file mode 100644
index 0000000..0dd4cb7
--- /dev/null
+++ b/test/expected/test_cmds.sh_d76d77ad95b9f120825417a6a8220c13df9541fc.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.err b/test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.err
new file mode 100644
index 0000000..07df1b2
--- /dev/null
+++ b/test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.err
@@ -0,0 +1,7 @@
+✘ error: invalid timestamp: 2022-06-16Tabc
+ reason: the leading part of the timestamp was matched, however, the trailing text “Tabc” was not
+ --> command-option:1
+ | :goto 2022-06-16Tabc 
+ |  ^--^ unrecognized input 
+ = note: input matched time format “%Y-%m-%d”
+ = help: fix the timestamp or remove the trailing text
diff --git a/test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.out b/test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.out
diff --git a/test/expected/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.err b/test/expected/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.err
diff --git a/test/expected/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.out b/test/expected/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.out
new file mode 100644
index 0000000..1d3eae4
--- /dev/null
+++ b/test/expected/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.out
@@ -0,0 +1,2 @@
+log_top_line() 
+ 51
diff --git a/test/expected/test_cmds.sh_d8eeef53a58bdeddbc1028d7c525413e3ca1c8df.err b/test/expected/test_cmds.sh_d8eeef53a58bdeddbc1028d7c525413e3ca1c8df.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_d8eeef53a58bdeddbc1028d7c525413e3ca1c8df.err
diff --git a/test/expected/test_cmds.sh_d8eeef53a58bdeddbc1028d7c525413e3ca1c8df.out b/test/expected/test_cmds.sh_d8eeef53a58bdeddbc1028d7c525413e3ca1c8df.out
new file mode 100644
index 0000000..aec6735
--- /dev/null
+++ b/test/expected/test_cmds.sh_d8eeef53a58bdeddbc1028d7c525413e3ca1c8df.out
@@ -0,0 +1 @@
+/vmw/cgi/tramp 200
diff --git a/test/expected/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.err b/test/expected/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.err
diff --git a/test/expected/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.out b/test/expected/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.out
new file mode 100644
index 0000000..f3d0606
--- /dev/null
+++ b/test/expected/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.out
@@ -0,0 +1 @@
+ Sat Nov 03 08:00:00 2 normal 2 errors 0 warnings 0 marks
diff --git a/test/expected/test_cmds.sh_dd41fbbcd71699314af232156d4155fbdf849131.err b/test/expected/test_cmds.sh_dd41fbbcd71699314af232156d4155fbdf849131.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_dd41fbbcd71699314af232156d4155fbdf849131.err
diff --git a/test/expected/test_cmds.sh_dd41fbbcd71699314af232156d4155fbdf849131.out b/test/expected/test_cmds.sh_dd41fbbcd71699314af232156d4155fbdf849131.out
new file mode 100644
index 0000000..c1837e7
--- /dev/null
+++ b/test/expected/test_cmds.sh_dd41fbbcd71699314af232156d4155fbdf849131.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [01/Jan/2010:00:00:00 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [01/Jan/2010:00:00:03 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [01/Jan/2010:00:00:03 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.err b/test/expected/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.err
diff --git a/test/expected/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.out b/test/expected/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.out
new file mode 100644
index 0000000..e905c55
--- /dev/null
+++ b/test/expected/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.out
@@ -0,0 +1,3 @@
+10.0.0.1 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/aberrant HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+10.0.0.1 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/abject/ablaze/able.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+10.0.0.1 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/abject/ablaze/aboard.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_e495cf059477e3f80c3241c6f8d5808b6f1d19c7.err b/test/expected/test_cmds.sh_e495cf059477e3f80c3241c6f8d5808b6f1d19c7.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_e495cf059477e3f80c3241c6f8d5808b6f1d19c7.err
diff --git a/test/expected/test_cmds.sh_e495cf059477e3f80c3241c6f8d5808b6f1d19c7.out b/test/expected/test_cmds.sh_e495cf059477e3f80c3241c6f8d5808b6f1d19c7.out
new file mode 100644
index 0000000..2f2f721
--- /dev/null
+++ b/test/expected/test_cmds.sh_e495cf059477e3f80c3241c6f8d5808b6f1d19c7.out
@@ -0,0 +1,2 @@
+info: hiding lines after 2009-07-20 22:59:29.000
+info: hiding lines after 2009-07-20 22:59:29.000
diff --git a/test/expected/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.err b/test/expected/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.err
diff --git a/test/expected/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.out b/test/expected/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.out
new file mode 100644
index 0000000..21e4506
--- /dev/null
+++ b/test/expected/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.out
@@ -0,0 +1,12 @@
+{
+ "foo bar" : null,
+ "array" : [
+ 1,
+ 2,
+ 3
+ ],
+ "obj" : {
+ "one" : 1,
+  "two" : true
+ }
+}
diff --git a/test/expected/test_cmds.sh_e911aebcb2defb7471aa620c45a86cad449ad505.err b/test/expected/test_cmds.sh_e911aebcb2defb7471aa620c45a86cad449ad505.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_e911aebcb2defb7471aa620c45a86cad449ad505.err
diff --git a/test/expected/test_cmds.sh_e911aebcb2defb7471aa620c45a86cad449ad505.out b/test/expected/test_cmds.sh_e911aebcb2defb7471aa620c45a86cad449ad505.out
new file mode 100644
index 0000000..d51a68c
--- /dev/null
+++ b/test/expected/test_cmds.sh_e911aebcb2defb7471aa620c45a86cad449ad505.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.err b/test/expected/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.err
diff --git a/test/expected/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.out b/test/expected/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.out
new file mode 100644
index 0000000..6599581
--- /dev/null
+++ b/test/expected/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.out
@@ -0,0 +1,3 @@
+{"log_line":0,"log_part":null,"log_time":"2009-07-20 22:59:26.000","log_idle_msecs":0,"log_level":"info","log_mark":0,"log_comment":null,"log_tags":null,"log_filters":null,"c_ip":"192.168.202.254","cs_method":"GET","cs_referer":"-","cs_uri_query":null,"cs_uri_stem":"/vmw/cgi/tramp","cs_user_agent":"gPXE/0.9.7","cs_username":"-","cs_version":"HTTP/1.0","sc_bytes":134,"sc_status":200,"cs_host":null}
+{"log_line":1,"log_part":null,"log_time":"2009-07-20 22:59:29.000","log_idle_msecs":3000,"log_level":"error","log_mark":0,"log_comment":null,"log_tags":null,"log_filters":null,"c_ip":"192.168.202.254","cs_method":"GET","cs_referer":"-","cs_uri_query":null,"cs_uri_stem":"/vmw/vSphere/default/vmkboot.gz","cs_user_agent":"gPXE/0.9.7","cs_username":"-","cs_version":"HTTP/1.0","sc_bytes":46210,"sc_status":404,"cs_host":null}
+{"log_line":2,"log_part":null,"log_time":"2009-07-20 22:59:29.000","log_idle_msecs":0,"log_level":"info","log_mark":0,"log_comment":null,"log_tags":null,"log_filters":null,"c_ip":"192.168.202.254","cs_method":"GET","cs_referer":"-","cs_uri_query":null,"cs_uri_stem":"/vmw/vSphere/default/vmkernel.gz","cs_user_agent":"gPXE/0.9.7","cs_username":"-","cs_version":"HTTP/1.0","sc_bytes":78929,"sc_status":200,"cs_host":null}
diff --git a/test/expected/test_cmds.sh_ec2b28c6ea328e3ea56b13ab8ca3d9ee856a9dda.err b/test/expected/test_cmds.sh_ec2b28c6ea328e3ea56b13ab8ca3d9ee856a9dda.err
new file mode 100644
index 0000000..d9db72b
--- /dev/null
+++ b/test/expected/test_cmds.sh_ec2b28c6ea328e3ea56b13ab8ca3d9ee856a9dda.err
@@ -0,0 +1,6 @@
+✘ error: unknown field(s) -- foobar
+ --> command-option:1
+ | :hide-fields foobar 
+ = help: :hide-fields field-name1 [... field-nameN]
+ ══════════════════════════════════════════════════════════════════════
+ Hide log message fields by replacing them with an ellipsis
diff --git a/test/expected/test_cmds.sh_ec2b28c6ea328e3ea56b13ab8ca3d9ee856a9dda.out b/test/expected/test_cmds.sh_ec2b28c6ea328e3ea56b13ab8ca3d9ee856a9dda.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_ec2b28c6ea328e3ea56b13ab8ca3d9ee856a9dda.out
diff --git a/test/expected/test_cmds.sh_ed5b73be0b991e0e8d6735e31df5b37c4286321b.err b/test/expected/test_cmds.sh_ed5b73be0b991e0e8d6735e31df5b37c4286321b.err
new file mode 100644
index 0000000..929412e
--- /dev/null
+++ b/test/expected/test_cmds.sh_ed5b73be0b991e0e8d6735e31df5b37c4286321b.err
@@ -0,0 +1,7 @@
+✘ error: invalid mark expression: :log_procname lik
+ reason: near "lik": syntax error
+ --> command-option:1
+ | :mark-expr :log_procname lik 
+ = help: :mark-expr expr
+ ══════════════════════════════════════════════════════════════════════
+ Set the bookmark expression
diff --git a/test/expected/test_cmds.sh_ed5b73be0b991e0e8d6735e31df5b37c4286321b.out b/test/expected/test_cmds.sh_ed5b73be0b991e0e8d6735e31df5b37c4286321b.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_ed5b73be0b991e0e8d6735e31df5b37c4286321b.out
diff --git a/test/expected/test_cmds.sh_f788d5f5932905d09ecbd581040ec5ce76459da5.err b/test/expected/test_cmds.sh_f788d5f5932905d09ecbd581040ec5ce76459da5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_f788d5f5932905d09ecbd581040ec5ce76459da5.err
diff --git a/test/expected/test_cmds.sh_f788d5f5932905d09ecbd581040ec5ce76459da5.out b/test/expected/test_cmds.sh_f788d5f5932905d09ecbd581040ec5ce76459da5.out
new file mode 100644
index 0000000..f0aaf97
--- /dev/null
+++ b/test/expected/test_cmds.sh_f788d5f5932905d09ecbd581040ec5ce76459da5.out
@@ -0,0 +1,3 @@
+info: hiding lines before 2009-07-20 22:00:29.000
+info: hiding lines after 2009-07-20 22:59:29.000
+info: hiding lines before 2009-07-20 22:00:29.000 and after 2009-07-20 22:59:29.000
diff --git a/test/expected/test_cmds.sh_ff6faebbde8586e04bfadba14a3d2bb4451784ad.err b/test/expected/test_cmds.sh_ff6faebbde8586e04bfadba14a3d2bb4451784ad.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_ff6faebbde8586e04bfadba14a3d2bb4451784ad.err
diff --git a/test/expected/test_cmds.sh_ff6faebbde8586e04bfadba14a3d2bb4451784ad.out b/test/expected/test_cmds.sh_ff6faebbde8586e04bfadba14a3d2bb4451784ad.out
new file mode 100644
index 0000000..6ae2e70
--- /dev/null
+++ b/test/expected/test_cmds.sh_ff6faebbde8586e04bfadba14a3d2bb4451784ad.out
@@ -0,0 +1,2 @@
+2009-07-20 22:59:27,672:DEBUG:Hello, World!
+ How are you today?
diff --git a/test/expected/test_config.sh_2765ea0d4c037b8c935840604edb0ae796c97a04.err b/test/expected/test_config.sh_2765ea0d4c037b8c935840604edb0ae796c97a04.err
new file mode 100644
index 0000000..b1b0ffd
--- /dev/null
+++ b/test/expected/test_config.sh_2765ea0d4c037b8c935840604edb0ae796c97a04.err
@@ -0,0 +1,6 @@
+✘ error: expecting an integer, found: abc
+ --> command-option:1
+ | :config /tuning/archive-manager/min-free-space abc
+ = help: :config option [value]
+ ══════════════════════════════════════════════════════════════════════
+ Read or write a configuration option
diff --git a/test/expected/test_config.sh_2765ea0d4c037b8c935840604edb0ae796c97a04.out b/test/expected/test_config.sh_2765ea0d4c037b8c935840604edb0ae796c97a04.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_config.sh_2765ea0d4c037b8c935840604edb0ae796c97a04.out
diff --git a/test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.err b/test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.err
new file mode 100644
index 0000000..092b26a
--- /dev/null
+++ b/test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.err
@@ -0,0 +1,20 @@
+✘ error: 'bad' is not a supported configuration $schema version
+ --> {test_dir}/bad-config2/formats/invalid-config/config.bad-schema.json:2
+ |  "$schema": "bad" 
+ = note: expecting one of the following $schema values:
+  https://lnav.org/schemas/config-v1.schema.json
+ = help: Property Synopsis
+ /$schema <schema-uri>
+ Description
+ The URI that specifies the schema that describes this type of file
+ Example
+ https://lnav.org/schemas/config-v1.schema.json
+✘ error: invalid JSON
+ --> {test_dir}/bad-config2/formats/invalid-config/config.malformed.json:3
+ | parse error: object key and value must be separated by a colon (':')
+ |  "ui": "theme", "abc", "def": "" }
+ |  (right here) ------^
+ | 
+✘ error: invalid JSON
+ reason: parse error: premature EOF
+ --> {test_dir}/bad-config2/formats/invalid-config/config.truncated.json:3
diff --git a/test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.out b/test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.out
diff --git a/test/expected/test_config.sh_5fd9fbccc35e9b06abdd913da0c16bdb306b926e.err b/test/expected/test_config.sh_5fd9fbccc35e9b06abdd913da0c16bdb306b926e.err
new file mode 100644
index 0000000..96307c5
--- /dev/null
+++ b/test/expected/test_config.sh_5fd9fbccc35e9b06abdd913da0c16bdb306b926e.err
@@ -0,0 +1,6 @@
+✘ error: unknown configuration option -- /bad/path
+ --> command-option:1
+ | :reset-config /bad/path 
+ = help: :reset-config option
+ ══════════════════════════════════════════════════════════════════════
+ Reset the configuration option to its default value
diff --git a/test/expected/test_config.sh_5fd9fbccc35e9b06abdd913da0c16bdb306b926e.out b/test/expected/test_config.sh_5fd9fbccc35e9b06abdd913da0c16bdb306b926e.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_config.sh_5fd9fbccc35e9b06abdd913da0c16bdb306b926e.out
diff --git a/test/expected/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.err b/test/expected/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.err
new file mode 100644
index 0000000..ec11ba5
--- /dev/null
+++ b/test/expected/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.err
@@ -0,0 +1,38 @@
+✘ error: 'bad' is not a supported configuration $schema version
+ --> {test_dir}/bad-config2/formats/invalid-config/config.bad-schema.json:2
+ |  "$schema": "bad" 
+ = note: expecting one of the following $schema values:
+  https://lnav.org/schemas/config-v1.schema.json
+ = help: Property Synopsis
+ /$schema <schema-uri>
+ Description
+ The URI that specifies the schema that describes this type of file
+ Example
+ https://lnav.org/schemas/config-v1.schema.json
+⚠ warning: unexpected value for property “/ui”
+ --> {test_dir}/bad-config2/formats/invalid-config/config.malformed.json:2
+ |  "ui": "theme", 
+ = help: Available Properties
+ $schema <schema-uri>
+ tuning/
+ ui/
+ log/
+ global/
+✘ error: invalid JSON
+ --> {test_dir}/bad-config2/formats/invalid-config/config.malformed.json:3
+ | parse error: object key and value must be separated by a colon (':')
+ |  "ui": "theme", "abc", "def": "" }
+ |  (right here) ------^
+ | 
+⚠ warning: unexpected value for property “/ui”
+ --> {test_dir}/bad-config2/formats/invalid-config/config.truncated.json:2
+ |  "ui": "theme" 
+ = help: Available Properties
+ $schema <schema-uri>
+ tuning/
+ ui/
+ log/
+ global/
+✘ error: invalid JSON
+ reason: parse error: premature EOF
+ --> {test_dir}/bad-config2/formats/invalid-config/config.truncated.json:3
diff --git a/test/expected/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.out b/test/expected/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.out
diff --git a/test/expected/test_config.sh_b08f7523659d1c12f0e59920cd40d17d4a83b72f.err b/test/expected/test_config.sh_b08f7523659d1c12f0e59920cd40d17d4a83b72f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_config.sh_b08f7523659d1c12f0e59920cd40d17d4a83b72f.err
diff --git a/test/expected/test_config.sh_b08f7523659d1c12f0e59920cd40d17d4a83b72f.out b/test/expected/test_config.sh_b08f7523659d1c12f0e59920cd40d17d4a83b72f.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_config.sh_b08f7523659d1c12f0e59920cd40d17d4a83b72f.out
diff --git a/test/expected/test_config.sh_d622658dc98327b1b2fd346802d24bc633e34ac7.err b/test/expected/test_config.sh_d622658dc98327b1b2fd346802d24bc633e34ac7.err
new file mode 100644
index 0000000..d8b2b12
--- /dev/null
+++ b/test/expected/test_config.sh_d622658dc98327b1b2fd346802d24bc633e34ac7.err
@@ -0,0 +1,12 @@
+✘ error: invalid value for property “/ui/theme-defs/default/styles/text/color”
+ reason: invalid color -- “#f”
+ |  reason: Could not parse color: #f
+ --> command-option:1
+ = help: Property Synopsis
+ /ui/theme-defs/default/styles/text/color #hex|color_name
+ Description
+ The foreground color value for this style. The value can be the name of an xterm color, the hexadecimal value, or a theme variable reference.
+ Examples
+ #fff
+ Green
+ $black
diff --git a/test/expected/test_config.sh_d622658dc98327b1b2fd346802d24bc633e34ac7.out b/test/expected/test_config.sh_d622658dc98327b1b2fd346802d24bc633e34ac7.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_config.sh_d622658dc98327b1b2fd346802d24bc633e34ac7.out
diff --git a/test/expected/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.err b/test/expected/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.err
new file mode 100644
index 0000000..93cba93
--- /dev/null
+++ b/test/expected/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.err
@@ -0,0 +1,8 @@
+✘ error: invalid value for property “/ui/theme”
+ reason: unknown theme -- “baddy”
+ |   = help: The available themes are: default, eldar, grayscale, monocai, night-owl, solarized-dark, solarized-light
+ --> command-option:1
+ = help: Property Synopsis
+ /ui/theme theme_name
+ Description
+ The name of the theme to use.
diff --git a/test/expected/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.out b/test/expected/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.out
diff --git a/test/expected/test_config.sh_eec3768ebc201ca63bca1411270965f78db1abfc.err b/test/expected/test_config.sh_eec3768ebc201ca63bca1411270965f78db1abfc.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_config.sh_eec3768ebc201ca63bca1411270965f78db1abfc.err
diff --git a/test/expected/test_config.sh_eec3768ebc201ca63bca1411270965f78db1abfc.out b/test/expected/test_config.sh_eec3768ebc201ca63bca1411270965f78db1abfc.out
new file mode 100644
index 0000000..8fafd97
--- /dev/null
+++ b/test/expected/test_config.sh_eec3768ebc201ca63bca1411270965f78db1abfc.out
@@ -0,0 +1 @@
+/global/foo = "foo"
diff --git a/test/expected/test_events.sh_09ba47d70bfca88e89faf29598c1095292cad435.err b/test/expected/test_events.sh_09ba47d70bfca88e89faf29598c1095292cad435.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_events.sh_09ba47d70bfca88e89faf29598c1095292cad435.err
diff --git a/test/expected/test_events.sh_09ba47d70bfca88e89faf29598c1095292cad435.out b/test/expected/test_events.sh_09ba47d70bfca88e89faf29598c1095292cad435.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_events.sh_09ba47d70bfca88e89faf29598c1095292cad435.out
diff --git a/test/expected/test_events.sh_153e221f3cb50f4d3e4581be0bf311e62489c42d.err b/test/expected/test_events.sh_153e221f3cb50f4d3e4581be0bf311e62489c42d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_events.sh_153e221f3cb50f4d3e4581be0bf311e62489c42d.err
diff --git a/test/expected/test_events.sh_153e221f3cb50f4d3e4581be0bf311e62489c42d.out b/test/expected/test_events.sh_153e221f3cb50f4d3e4581be0bf311e62489c42d.out
new file mode 100644
index 0000000..2ba3232
--- /dev/null
+++ b/test/expected/test_events.sh_153e221f3cb50f4d3e4581be0bf311e62489c42d.out
@@ -0,0 +1,6 @@
+/log/watch-expressions = {
+ "http-errors": {
+ "expr": ":sc_status >= 400",
+ "enabled": true
+ }
+}
diff --git a/test/expected/test_events.sh_3dae146ef3bf201c43656344803694a34a3dbfec.err b/test/expected/test_events.sh_3dae146ef3bf201c43656344803694a34a3dbfec.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_events.sh_3dae146ef3bf201c43656344803694a34a3dbfec.err
diff --git a/test/expected/test_events.sh_3dae146ef3bf201c43656344803694a34a3dbfec.out b/test/expected/test_events.sh_3dae146ef3bf201c43656344803694a34a3dbfec.out
new file mode 100644
index 0000000..b701c72
--- /dev/null
+++ b/test/expected/test_events.sh_3dae146ef3bf201c43656344803694a34a3dbfec.out
@@ -0,0 +1,2 @@
+{"content":{"$schema":"https://lnav.org/event-file-open-v1.schema.json","filename":"{test_dir}/logfile_access_log.0"}}
+{"content":{"$schema":"https://lnav.org/event-file-format-detected-v1.schema.json","filename":"{test_dir}/logfile_access_log.0","format":"access_log"}}
diff --git a/test/expected/test_events.sh_6f9523d43f174397829b6a7fe6ee0090d97df5f9.err b/test/expected/test_events.sh_6f9523d43f174397829b6a7fe6ee0090d97df5f9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_events.sh_6f9523d43f174397829b6a7fe6ee0090d97df5f9.err
diff --git a/test/expected/test_events.sh_6f9523d43f174397829b6a7fe6ee0090d97df5f9.out b/test/expected/test_events.sh_6f9523d43f174397829b6a7fe6ee0090d97df5f9.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_events.sh_6f9523d43f174397829b6a7fe6ee0090d97df5f9.out
diff --git a/test/expected/test_events.sh_729f77b8e7136d64d22a6610a80ba6b584a2d896.err b/test/expected/test_events.sh_729f77b8e7136d64d22a6610a80ba6b584a2d896.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_events.sh_729f77b8e7136d64d22a6610a80ba6b584a2d896.err
diff --git a/test/expected/test_events.sh_729f77b8e7136d64d22a6610a80ba6b584a2d896.out b/test/expected/test_events.sh_729f77b8e7136d64d22a6610a80ba6b584a2d896.out
new file mode 100644
index 0000000..019a01b
--- /dev/null
+++ b/test/expected/test_events.sh_729f77b8e7136d64d22a6610a80ba6b584a2d896.out
@@ -0,0 +1,3 @@
+/log/watch-expressions = {
+
+}
diff --git a/test/expected/test_events.sh_d9c7907f907b2335e1328b23fdc46d0968a608d9.err b/test/expected/test_events.sh_d9c7907f907b2335e1328b23fdc46d0968a608d9.err
new file mode 100644
index 0000000..0e6fb92
--- /dev/null
+++ b/test/expected/test_events.sh_d9c7907f907b2335e1328b23fdc46d0968a608d9.err
@@ -0,0 +1,10 @@
+✘ error: invalid value for property “/log/watch-expressions/http-errors/expr”
+ reason: SQL expression is invalid
+ |  reason: no such column: sc_status
+ |   --> /log/watch-expressions/http-errors/expr
+ |   | sc_status >= 400 AND bad 
+ --> command-option:1
+ = help: Property Synopsis
+ /log/watch-expressions/http-errors/expr <SQL-expression>
+ Description
+ The SQL expression to execute for each input line. If expression evaluates to true, a 'log message detected' event will be published.
diff --git a/test/expected/test_events.sh_d9c7907f907b2335e1328b23fdc46d0968a608d9.out b/test/expected/test_events.sh_d9c7907f907b2335e1328b23fdc46d0968a608d9.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_events.sh_d9c7907f907b2335e1328b23fdc46d0968a608d9.out
diff --git a/test/expected/test_events.sh_ed8dc44add223341c03ccb7b3e18371bdb42b710.err b/test/expected/test_events.sh_ed8dc44add223341c03ccb7b3e18371bdb42b710.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_events.sh_ed8dc44add223341c03ccb7b3e18371bdb42b710.err
diff --git a/test/expected/test_events.sh_ed8dc44add223341c03ccb7b3e18371bdb42b710.out b/test/expected/test_events.sh_ed8dc44add223341c03ccb7b3e18371bdb42b710.out
new file mode 100644
index 0000000..17a8132
--- /dev/null
+++ b/test/expected/test_events.sh_ed8dc44add223341c03ccb7b3e18371bdb42b710.out
@@ -0,0 +1,3 @@
+{"content":{"$schema":"https://lnav.org/event-file-open-v1.schema.json","filename":"{test_dir}/logfile_access_log.0"}}
+{"content":{"$schema":"https://lnav.org/event-file-format-detected-v1.schema.json","filename":"{test_dir}/logfile_access_log.0","format":"access_log"}}
+{"content":{"$schema":"https://lnav.org/event-log-msg-detected-v1.schema.json","watch-name":"http-errors","filename":"{test_dir}/logfile_access_log.0","line-number":1,"format":"access_log","timestamp":"2009-07-20T22:59:29.000","values":{"body":"","c_ip":"192.168.202.254","cs_method":"GET","cs_referer":"-","cs_uri_query":null,"cs_uri_stem":"/vmw/vSphere/default/vmkboot.gz","cs_user_agent":"gPXE/0.9.7","cs_username":"-","cs_version":"HTTP/1.0","sc_bytes":46210,"sc_status":404,"timestamp":"20/Jul/2009:22:59:29 +0000"}}}
diff --git a/test/expected/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.err b/test/expected/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.err
diff --git a/test/expected/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.out b/test/expected/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.out
new file mode 100644
index 0000000..5f62842
--- /dev/null
+++ b/test/expected/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.out
@@ -0,0 +1,9 @@
+log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters
+0,<NULL>,2016-06-30 12:00:01.000,0,trace,0,<NULL>,<NULL>,<NULL>
+1,<NULL>,2016-06-30 12:00:02.000,1000,debug,0,<NULL>,<NULL>,<NULL>
+2,<NULL>,2016-06-30 12:00:03.000,1000,debug2,0,<NULL>,<NULL>,<NULL>
+3,<NULL>,2016-06-30 12:00:04.000,1000,debug3,0,<NULL>,<NULL>,<NULL>
+4,<NULL>,2016-06-30 12:00:05.000,1000,info,0,<NULL>,<NULL>,<NULL>
+5,<NULL>,2016-06-30 12:00:06.000,1000,warning,0,<NULL>,<NULL>,<NULL>
+6,<NULL>,2016-06-30 12:00:07.000,1000,fatal,0,<NULL>,<NULL>,<NULL>
+7,<NULL>,2016-06-30 12:00:08.000,1000,info,0,<NULL>,<NULL>,<NULL>
diff --git a/test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.err b/test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.err
new file mode 100644
index 0000000..202b451
--- /dev/null
+++ b/test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.err
@@ -0,0 +1,171 @@
+✘ error: “invalid(abc” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> /invalid_props_log/tags/badtag3/pattern
+ | invalid(abc 
+ |  ^ missing closing parenthesis
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:35
+ |  "pattern": "invalid(abc"
+ = help: Property Synopsis
+ /invalid_props_log/tags/badtag3/pattern <regex>
+ Description
+ The regular expression to match against the body of the log message
+ Example
+ \w+ is down
+✘ error: “abc(def” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> /invalid_props_log/search-table/bad_table_regex/pattern
+ | abc(def 
+ |  ^ missing closing parenthesis 
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:40
+ |  "pattern": "abc(def" 
+ = help: Property Synopsis
+ /invalid_props_log/search-table/bad_table_regex/pattern <regex>
+ Description
+ The regular expression for this search table.
+✘ error: “^(?<timestamp>\d+: (?<body>.*)$” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> /bad_regex_log/regex/std/pattern
+ | ^(?<timestamp>\d+: (?<body>.*)$ 
+ |  ^ missing closing parenthesis
+ --> {test_dir}/bad-config/formats/invalid-regex/format.json:6
+ |  "pattern": "^(?<timestamp>\\d+: (?<body>.*)$"
+ = help: Property Synopsis
+ /bad_regex_log/regex/std/pattern <message-regex>
+ Description
+ The regular expression to match a log message and capture fields.
+✘ error: “(foo” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> pattern
+ | (foo 
+ |  ^ missing closing parenthesis 
+ --> {test_dir}/bad-config/formats/invalid-regex/format.json:13
+ |  "error": "(foo" 
+ = help: Property Synopsis
+ /bad_regex_log/level/error <pattern|integer>
+ Description
+ The regular expression used to match the log text for this level. For JSON logs with numeric levels, this should be the number for the corresponding level.
+✘ error: “abc(” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> /bad_regex_log/highlights/foobar/pattern
+ | abc( 
+ |  ^ missing closing parenthesis 
+ --> {test_dir}/bad-config/formats/invalid-regex/format.json:25
+ |  "pattern": "abc(" 
+ = help: Property Synopsis
+ /bad_regex_log/highlights/foobar/pattern <regex>
+ Description
+ A regular expression to highlight in logs of this format.
+✘ error: “foo” is not a valid value for option “/bad_sample_log/value/pid/kind”
+ --> {test_dir}/bad-config/formats/invalid-sample/format.json:24
+ |  "kind": "foo" 
+ = help: Property Synopsis
+ /bad_sample_log/value/pid/kind <data-type>
+ Description
+ The type of data in the field
+ Allowed Values
+ string, integer, float, boolean, json, struct, quoted, xml
+✘ error: 'bad' is not a supported log format $schema version
+ --> {test_dir}/bad-config/formats/invalid-schema/format.json:2
+ |  "$schema": "bad" 
+ = note: expecting one of the following $schema values:
+  https://lnav.org/schemas/format-v1.schema.json
+ = help: Property Synopsis
+ /$schema The URI of the schema for this file
+ Description
+ Specifies the type of this file
+✘ error: invalid pattern: “incomplete-match”
+ reason: pattern does not match entire message
+ --> {test_dir}/bad-config/formats/invalid-regex/format.json:20
+ | 1428634687123; foo 
+ |  ^ matched up to here 
+ = note: incomplete-match = ^(?<timestamp>\d+);
+ = help: update the regular expression to fully capture the sample message
+✘ error: invalid sample log message: "abc: foo"
+ reason: unrecognized timestamp -- abc
+ --> {test_dir}/bad-config/formats/invalid-sample/format.json:30
+ = note: the following custom formats were tried:
+ abc
+ ^ “%i” matched up to here
+ = help: If the timestamp format is not supported by default, you can add a custom format with the “timestamp-format” property
+✘ error: invalid sample log message: "1428634687123| debug hello"
+ reason: “debug” does not match the expected level of “info”
+ --> {test_dir}/bad-config/formats/invalid-sample/format.json:33
+ = note: matched regex = with-level
+ captured level = “debug”
+✘ error: invalid pattern: “with-level”
+ reason: pattern does not match entire multiline sample message
+ --> {test_dir}/bad-config/formats/invalid-sample/format.json:37
+ = note: with-level = ^(?<timestamp>\d+)\| (?<level>\w+) (?<body>\w+)$
+ = help: use “.*” to match new-lines
+✘ error: invalid sample log message: "1428634687123; foo bar"
+ reason: sample does not match any patterns
+ --> {test_dir}/bad-config/formats/invalid-sample/format.json:41
+ = note: the following shows how each pattern matched this sample:
+ 1428634687123; foo bar
+ ^ bad-time matched up to here
+ ^ semi matched up to here
+ ^ std matched up to here
+ ^ with-level matched up to here
+ = note: bad-time  = “^(?<timestamp>\w+): (?<body>\w+)$”
+ semi  = “^(?<timestamp>\d+); (?<body>\w+)$”
+ std  = “^(?<timestamp>\d+): (?<pid>\w+) (?<body>.*)$”
+ with-level = “^(?<timestamp>\d+)\| (?<level>\w+) (?<body>\w+)$”
+
+⚠ warning: invalid pattern: “/bad_sample_log/regex/semi”
+ reason: pattern does not match any samples
+ --> {test_dir}/bad-config/formats/invalid-sample/format.json:10
+ = help: every pattern should have at least one sample that it matches
+⚠ warning: invalid pattern: “/bad_sample_log/regex/std”
+ reason: pattern does not match any samples
+ --> {test_dir}/bad-config/formats/invalid-sample/format.json:7
+ = help: every pattern should have at least one sample that it matches
+⚠ warning: invalid value “/invalid_props_log/value/non-existent”
+ reason: no patterns have a capture named “non-existent”
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
+ = note: the following captures are available:
+ body, pid, timestamp
+ = help: values are populated from captures in patterns, so at least one pattern must have a capture with this value name
+✘ error: invalid tag definition “/invalid_props_log/tags/badtag”
+ reason: tag definitions must have a non-empty pattern
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
+✘ error: invalid tag definition “/invalid_props_log/tags/badtag2”
+ reason: tag definitions must have a non-empty pattern
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
+✘ error: invalid tag definition “/invalid_props_log/tags/badtag3”
+ reason: tag definitions must have a non-empty pattern
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
+✘ error: invalid value for property “/invalid_props_log/timestamp-field”
+ reason: “ts” was not found in the pattern at /invalid_props_log/regex/std
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
+ = note: the following captures are available:
+ body, pid, timestamp
+✘ error: “not a color” is not a valid color value for property “/invalid_props_log/highlights/hl1/color”
+ reason: Unknown color: 'not a color'. See https://jonasjacek.github.io/colors/ for a list of supported color names
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:23
+✘ error: “also not a color” is not a valid color value for property “/invalid_props_log/highlights/hl1/background-color”
+ reason: Unknown color: 'also not a color'. See https://jonasjacek.github.io/colors/ for a list of supported color names
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:24
+✘ error: “no_regexes_log” is not a valid log format
+ reason: no regexes specified
+ --> {test_dir}/bad-config/formats/no-regexes/format.json:4
+✘ error: “no_regexes_log” is not a valid log format
+ reason: log message samples must be included in a format definition
+ --> {test_dir}/bad-config/formats/no-regexes/format.json:4
+✘ error: “no_sample_log” is not a valid log format
+ reason: log message samples must be included in a format definition
+ --> {test_dir}/bad-config/formats/no-samples/format.json:4
+✘ error: failed to compile SQL statement
+ reason: near "TALE": syntax error
+ --> {test_dir}/bad-config/formats/invalid-sql/init.sql:4
+ | -- comment test 
+ | CREATE TALE invalid (x y z); 
+ |  ^ near "TALE": syntax error 
+✘ error: failed to execute SQL statement
+ reason: ✘ error: “abc(” is not a valid regular expression
+ |  reason: missing closing parenthesis
+ |   --> arg
+ |   | abc( 
+ |   |  ^ missing closing parenthesis
+ --> {test_dir}/bad-config/formats/invalid-sql/init2.sql
+ | SELECT regexp_match('abc(', '123') 
+ | FROM sqlite_master; 
diff --git a/test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.out b/test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.out
diff --git a/test/expected/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.err b/test/expected/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.err
new file mode 100644
index 0000000..1270517
--- /dev/null
+++ b/test/expected/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.err
@@ -0,0 +1,190 @@
+✘ error: invalid value for option “/bad_json_log/line-format#/timestamp-format”
+ reason: empty values are not allowed
+ --> {test_dir}/bad-config/formats/invalid-json-format/format.json:11
+ |  "timestamp-format": "" 
+ = help: Property Synopsis
+ /bad_json_log/line-format#/timestamp-format <string>
+ Description
+ The strftime(3) format for this field
+✘ error: “invalid(abc” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> /invalid_props_log/tags/badtag3/pattern
+ | invalid(abc 
+ |  ^ missing closing parenthesis
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:36
+ |  "pattern": "invalid(abc"
+ = help: Property Synopsis
+ /invalid_props_log/tags/badtag3/pattern <regex>
+ Description
+ The regular expression to match against the body of the log message
+ Example
+ \w+ is down
+✘ error: “abc(def” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> /invalid_props_log/search-table/bad_table_regex/pattern
+ | abc(def 
+ |  ^ missing closing parenthesis 
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:41
+ |  "pattern": "abc(def" 
+ = help: Property Synopsis
+ /invalid_props_log/search-table/bad_table_regex/pattern <regex>
+ Description
+ The regular expression for this search table.
+✘ error: “^(?<timestamp>\d+: (?<body>.*)$” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> /bad_regex_log/regex/std/pattern
+ | ^(?<timestamp>\d+: (?<body>.*)$ 
+ |  ^ missing closing parenthesis
+ --> {test_dir}/bad-config/formats/invalid-regex/format.json:6
+ |  "pattern": "^(?<timestamp>\\d+: (?<body>.*)$"
+ = help: Property Synopsis
+ /bad_regex_log/regex/std/pattern <message-regex>
+ Description
+ The regular expression to match a log message and capture fields.
+✘ error: “(foo” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> pattern
+ | (foo 
+ |  ^ missing closing parenthesis 
+ --> {test_dir}/bad-config/formats/invalid-regex/format.json:13
+ |  "error": "(foo" 
+ = help: Property Synopsis
+ /bad_regex_log/level/error <pattern|integer>
+ Description
+ The regular expression used to match the log text for this level. For JSON logs with numeric levels, this should be the number for the corresponding level.
+✘ error: “abc(” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> /bad_regex_log/highlights/foobar/pattern
+ | abc( 
+ |  ^ missing closing parenthesis 
+ --> {test_dir}/bad-config/formats/invalid-regex/format.json:25
+ |  "pattern": "abc(" 
+ = help: Property Synopsis
+ /bad_regex_log/highlights/foobar/pattern <regex>
+ Description
+ A regular expression to highlight in logs of this format.
+⚠ warning: format file is missing “$schema” property
+ --> {test_dir}/bad-config/formats/invalid-regex/format.json
+ = note: the schema specifies the supported format version and can be used with editors to automatically validate the file
+ = help: add the following property to the top-level JSON object:
+  "$schema": "https://lnav.org/schemas/format-v1.schema.json",
+✘ error: “foo” is not a valid value for option “/bad_sample_log/value/pid/kind”
+ --> {test_dir}/bad-config/formats/invalid-sample/format.json:24
+ |  "kind": "foo" 
+ = help: Property Synopsis
+ /bad_sample_log/value/pid/kind <data-type>
+ Description
+ The type of data in the field
+ Allowed Values
+ string, integer, float, boolean, json, struct, quoted, xml
+✘ error: 'bad' is not a supported log format $schema version
+ --> {test_dir}/bad-config/formats/invalid-schema/format.json:2
+ |  "$schema": "bad" 
+ = note: expecting one of the following $schema values:
+  https://lnav.org/schemas/format-v1.schema.json
+ = help: Property Synopsis
+ /$schema The URI of the schema for this file
+ Description
+ Specifies the type of this file
+✘ error: invalid line format element “/bad_json_log/line-format/0/field”
+ reason: “” is not a defined value
+ --> {test_dir}/bad-config/formats/invalid-json-format/format.json:7
+✘ error: invalid pattern: “incomplete-match”
+ reason: pattern does not match entire message
+ --> {test_dir}/bad-config/formats/invalid-regex/format.json:20
+ | 1428634687123; foo 
+ |  ^ matched up to here 
+ = note: incomplete-match = ^(?<timestamp>\d+);
+ = help: update the regular expression to fully capture the sample message
+✘ error: invalid sample log message: "abc: foo"
+ reason: unrecognized timestamp -- abc
+ --> {test_dir}/bad-config/formats/invalid-sample/format.json:30
+ = note: the following custom formats were tried:
+ abc
+ ^ “%i” matched up to here
+ = help: If the timestamp format is not supported by default, you can add a custom format with the “timestamp-format” property
+✘ error: invalid sample log message: "1428634687123| debug hello"
+ reason: “debug” does not match the expected level of “info”
+ --> {test_dir}/bad-config/formats/invalid-sample/format.json:33
+ = note: matched regex = with-level
+ captured level = “debug”
+✘ error: invalid pattern: “with-level”
+ reason: pattern does not match entire multiline sample message
+ --> {test_dir}/bad-config/formats/invalid-sample/format.json:37
+ = note: with-level = ^(?<timestamp>\d+)\| (?<level>\w+) (?<body>\w+)$
+ = help: use “.*” to match new-lines
+✘ error: invalid sample log message: "1428634687123; foo bar"
+ reason: sample does not match any patterns
+ --> {test_dir}/bad-config/formats/invalid-sample/format.json:41
+ = note: the following shows how each pattern matched this sample:
+ 1428634687123; foo bar
+ ^ bad-time matched up to here
+ ^ semi matched up to here
+ ^ std matched up to here
+ ^ with-level matched up to here
+ = note: bad-time  = “^(?<timestamp>\w+): (?<body>\w+)$”
+ semi  = “^(?<timestamp>\d+); (?<body>\w+)$”
+ std  = “^(?<timestamp>\d+): (?<pid>\w+) (?<body>.*)$”
+ with-level = “^(?<timestamp>\d+)\| (?<level>\w+) (?<body>\w+)$”
+
+⚠ warning: invalid pattern: “/bad_sample_log/regex/semi”
+ reason: pattern does not match any samples
+ --> {test_dir}/bad-config/formats/invalid-sample/format.json:10
+ = help: every pattern should have at least one sample that it matches
+⚠ warning: invalid pattern: “/bad_sample_log/regex/std”
+ reason: pattern does not match any samples
+ --> {test_dir}/bad-config/formats/invalid-sample/format.json:7
+ = help: every pattern should have at least one sample that it matches
+⚠ warning: invalid value “/invalid_props_log/value/non-existent”
+ reason: no patterns have a capture named “non-existent”
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
+ = note: the following captures are available:
+ body, pid, timestamp
+ = help: values are populated from captures in patterns, so at least one pattern must have a capture with this value name
+✘ error: invalid tag definition “/invalid_props_log/tags/badtag”
+ reason: tag definitions must have a non-empty pattern
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
+✘ error: invalid tag definition “/invalid_props_log/tags/badtag2”
+ reason: tag definitions must have a non-empty pattern
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
+✘ error: invalid tag definition “/invalid_props_log/tags/badtag3”
+ reason: tag definitions must have a non-empty pattern
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
+✘ error: “invalid_props_log” is not a valid log format
+ reason: “subsecond-unit” must be set when “subsecond-field” is used
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
+✘ error: invalid value for property “/invalid_props_log/timestamp-field”
+ reason: “ts” was not found in the pattern at /invalid_props_log/regex/std
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
+ = note: the following captures are available:
+ body, pid, timestamp
+✘ error: “not a color” is not a valid color value for property “/invalid_props_log/highlights/hl1/color”
+ reason: Unknown color: 'not a color'. See https://jonasjacek.github.io/colors/ for a list of supported color names
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:24
+✘ error: “also not a color” is not a valid color value for property “/invalid_props_log/highlights/hl1/background-color”
+ reason: Unknown color: 'also not a color'. See https://jonasjacek.github.io/colors/ for a list of supported color names
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:25
+✘ error: “no_regexes_log” is not a valid log format
+ reason: no regexes specified
+ --> {test_dir}/bad-config/formats/no-regexes/format.json:4
+✘ error: “no_regexes_log” is not a valid log format
+ reason: log message samples must be included in a format definition
+ --> {test_dir}/bad-config/formats/no-regexes/format.json:4
+✘ error: “no_sample_log” is not a valid log format
+ reason: log message samples must be included in a format definition
+ --> {test_dir}/bad-config/formats/no-samples/format.json:4
+✘ error: failed to compile SQL statement
+ reason: near "TALE": syntax error
+ --> {test_dir}/bad-config/formats/invalid-sql/init.sql:4
+ | -- comment test 
+ | CREATE TALE invalid (x y z); 
+ |  ^ near "TALE": syntax error 
+✘ error: failed to execute SQL statement
+ reason: ✘ error: “abc(” is not a valid regular expression
+ |  reason: missing closing parenthesis
+ |   --> arg
+ |   | abc( 
+ |   |  ^ missing closing parenthesis
+ --> {test_dir}/bad-config/formats/invalid-sql/init2.sql
+ | SELECT regexp_match('abc(', '123') 
+ | FROM sqlite_master; 
diff --git a/test/expected/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.out b/test/expected/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.out
diff --git a/test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.err b/test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.err
new file mode 100644
index 0000000..f657d87
--- /dev/null
+++ b/test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.err
@@ -0,0 +1,61 @@
+✘ error: invalid JSON
+ --> {test_dir}/bad-config-json/formats/invalid-json/format.json:4
+ | parse error: object key and value must be separated by a colon (':')
+ |  ar_log": { "abc" } }
+ |  (right here) ------^
+ | 
+✘ error: “abc(” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> /invalid_key_log/level-pointer
+ | abc( 
+ |  ^ missing closing parenthesis 
+ --> {test_dir}/bad-config-json/formats/invalid-key/format.json:4
+ |  "level-pointer": "abc(", 
+ = help: Property Synopsis
+ /invalid_key_log/level-pointer
+ Description
+ A regular-expression that matches the JSON-pointer of the level property
+✘ error: “def[ghi” is not a valid regular expression
+ reason: missing terminating ] for character class
+ --> /invalid_key_log/file-pattern
+ | def[ghi 
+ |  ^ missing terminating ] for character class
+ --> {test_dir}/bad-config-json/formats/invalid-key/format.json:5
+ |  "file-pattern": "def[ghi", 
+ = help: Property Synopsis
+ /invalid_key_log/file-pattern
+ Description
+ A regular expression that restricts this format to log files with a matching name
+⚠ warning: unexpected value for property “/invalid_key_log/value/test/identifiers”
+ --> {test_dir}/bad-config-json/formats/invalid-key/format.json:14
+ |  "identifiers": true 
+ = help: Available Properties
+ kind <data-type>
+ collate <function>
+ unit/
+ identifier <bool>
+ foreign-key <bool>
+ hidden <bool>
+ action-list <string>
+ rewriter <command>
+ description <string>
+✘ error: “-1.2” is not a valid value for “/invalid_key_log/timestamp-divisor”
+ reason: value cannot be less than or equal to zero
+ --> {test_dir}/bad-config-json/formats/invalid-key/format.json:25
+ |  "timestamp-divisor": -1.2 
+ = help: Property Synopsis
+ /invalid_key_log/timestamp-divisor <number>
+ Description
+ The value to divide a numeric timestamp by in a JSON log.
+✘ error: “foobar_log” is not a valid log format
+ reason: no regexes specified
+ --> {test_dir}/bad-config-json/formats/invalid-json/format.json:3
+✘ error: “foobar_log” is not a valid log format
+ reason: log message samples must be included in a format definition
+ --> {test_dir}/bad-config-json/formats/invalid-json/format.json:3
+✘ error: “invalid_key_log” is not a valid log format
+ reason: structured logs cannot have regexes
+ --> {test_dir}/bad-config-json/formats/invalid-key/format.json:4
+✘ error: invalid line format element “/invalid_key_log/line-format/0/field”
+ reason: “non-existent” is not a defined value
+ --> {test_dir}/bad-config-json/formats/invalid-key/format.json:22
diff --git a/test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.out b/test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.out
diff --git a/test/expected/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.err b/test/expected/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.err
new file mode 100644
index 0000000..3272370
--- /dev/null
+++ b/test/expected/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.err
@@ -0,0 +1,66 @@
+✘ error: invalid JSON
+ --> {test_dir}/bad-config-json/formats/invalid-json/format.json:4
+ | parse error: object key and value must be separated by a colon (':')
+ |  ar_log": { "abc" } }
+ |  (right here) ------^
+ | 
+⚠ warning: format file is missing “$schema” property
+ --> {test_dir}/bad-config-json/formats/invalid-json/format.json
+ = note: the schema specifies the supported format version and can be used with editors to automatically validate the file
+ = help: add the following property to the top-level JSON object:
+  "$schema": "https://lnav.org/schemas/format-v1.schema.json",
+✘ error: “abc(” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> /invalid_key_log/level-pointer
+ | abc( 
+ |  ^ missing closing parenthesis 
+ --> {test_dir}/bad-config-json/formats/invalid-key/format.json:4
+ |  "level-pointer": "abc(", 
+ = help: Property Synopsis
+ /invalid_key_log/level-pointer
+ Description
+ A regular-expression that matches the JSON-pointer of the level property
+✘ error: “def[ghi” is not a valid regular expression
+ reason: missing terminating ] for character class
+ --> /invalid_key_log/file-pattern
+ | def[ghi 
+ |  ^ missing terminating ] for character class
+ --> {test_dir}/bad-config-json/formats/invalid-key/format.json:5
+ |  "file-pattern": "def[ghi", 
+ = help: Property Synopsis
+ /invalid_key_log/file-pattern
+ Description
+ A regular expression that restricts this format to log files with a matching name
+⚠ warning: unexpected value for property “/invalid_key_log/value/test/identifiers”
+ --> {test_dir}/bad-config-json/formats/invalid-key/format.json:14
+ |  "identifiers": true 
+ = help: Available Properties
+ kind <data-type>
+ collate <function>
+ unit/
+ identifier <bool>
+ foreign-key <bool>
+ hidden <bool>
+ action-list <string>
+ rewriter <command>
+ description <string>
+✘ error: “-1.2” is not a valid value for “/invalid_key_log/timestamp-divisor”
+ reason: value cannot be less than or equal to zero
+ --> {test_dir}/bad-config-json/formats/invalid-key/format.json:25
+ |  "timestamp-divisor": -1.2 
+ = help: Property Synopsis
+ /invalid_key_log/timestamp-divisor <number>
+ Description
+ The value to divide a numeric timestamp by in a JSON log.
+✘ error: “foobar_log” is not a valid log format
+ reason: no regexes specified
+ --> {test_dir}/bad-config-json/formats/invalid-json/format.json:3
+✘ error: “foobar_log” is not a valid log format
+ reason: log message samples must be included in a format definition
+ --> {test_dir}/bad-config-json/formats/invalid-json/format.json:3
+✘ error: “invalid_key_log” is not a valid log format
+ reason: structured logs cannot have regexes
+ --> {test_dir}/bad-config-json/formats/invalid-key/format.json:4
+✘ error: invalid line format element “/invalid_key_log/line-format/0/field”
+ reason: “non-existent” is not a defined value
+ --> {test_dir}/bad-config-json/formats/invalid-key/format.json:22
diff --git a/test/expected/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.out b/test/expected/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.out
diff --git a/test/expected/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.err b/test/expected/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.err
diff --git a/test/expected/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.out b/test/expected/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.out
new file mode 100644
index 0000000..ef750df
--- /dev/null
+++ b/test/expected/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.out
@@ -0,0 +1,13 @@
+{"ts": "2013-09-06T20:00:48.124817Z", "lvl": "TRACE", "msg": "trace test"}
+{"ts": "2013-09-06T20:00:49.124817Z", "lvl": "INFO", "msg": "Starting up service"}
+{"ts": "2013-09-06T22:00:49.124817Z", "lvl": "INFO", "msg": "Shutting down service", "user": "steve@example.com"}
+{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG5", "msg": "Details..."}
+{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG4", "msg": "Details..."}
+{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG3", "msg": "Details..."}
+{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG2", "msg": "Details..."}
+{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG", "msg": "Details..."}
+{"ts": "2013-09-06T22:01:49.124817Z", "lvl": "STATS", "msg": "1 beat per second"}
+{"ts": "2013-09-06T22:01:49.124817Z", "lvl": "WARNING", "msg": "not looking good"}
+{"ts": "2013-09-06T22:01:49.124817Z", "lvl": "ERROR", "msg": "looking bad"}
+{"ts": "2013-09-06T22:01:49.124817Z", "lvl": "CRITICAL", "msg": "sooo bad"}
+{"ts": "2013-09-06T22:01:49.124817Z", "lvl": "FATAL", "msg": "shoot", "obj": { "field1" : "hi", "field2": 2 }, "arr" : ["hi", {"sub1": true}]}
diff --git a/test/expected/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.err b/test/expected/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.err
diff --git a/test/expected/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.out b/test/expected/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.out
new file mode 100644
index 0000000..59872f2
--- /dev/null
+++ b/test/expected/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.out
@@ -0,0 +1,14 @@
+log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,@fields/user,@fields/trace#
+0,<NULL>,2013-09-06 20:00:48.124,0,trace,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+2,<NULL>,2013-09-06 20:00:49.124,1000,info,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+4,<NULL>,2013-09-06 22:00:49.124,7200000,info,0,<NULL>,<NULL>,<NULL>,steve@example.com,<NULL>
+7,<NULL>,2013-09-06 22:00:59.124,10000,debug5,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+9,<NULL>,2013-09-06 22:00:59.124,0,debug4,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+11,<NULL>,2013-09-06 22:00:59.124,0,debug3,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+13,<NULL>,2013-09-06 22:00:59.124,0,debug2,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+15,<NULL>,2013-09-06 22:00:59.124,0,debug,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+17,<NULL>,2013-09-06 22:01:49.124,50000,stats,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+19,<NULL>,2013-09-06 22:01:49.124,0,warning,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+21,<NULL>,2013-09-06 22:01:49.124,0,error,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+23,<NULL>,2013-09-06 22:01:49.124,0,critical,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+25,<NULL>,2013-09-06 22:01:49.124,0,fatal,0,<NULL>,<NULL>,<NULL>,<NULL>,line:1
diff --git a/test/expected/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.err b/test/expected/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.err
diff --git a/test/expected/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.out b/test/expected/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.out
new file mode 100644
index 0000000..463a734
--- /dev/null
+++ b/test/expected/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.out
@@ -0,0 +1,192 @@
+[
+ {
+ "log_line": 0,
+ "log_part": null,
+ "log_time": "2013-09-06 20:00:48.124",
+ "log_idle_msecs": 0,
+ "log_level": "trace",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "arr": null,
+ "obj": null,
+ "user": null
+ },
+ {
+ "log_line": 2,
+ "log_part": null,
+ "log_time": "2013-09-06 20:00:49.124",
+ "log_idle_msecs": 1000,
+ "log_level": "info",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "arr": null,
+ "obj": null,
+ "user": null
+ },
+ {
+ "log_line": 4,
+ "log_part": null,
+ "log_time": "2013-09-06 22:00:49.124",
+ "log_idle_msecs": 7200000,
+ "log_level": "info",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "arr": null,
+ "obj": null,
+ "user": "steve@example.com"
+ },
+ {
+ "log_line": 7,
+ "log_part": null,
+ "log_time": "2013-09-06 22:00:59.124",
+ "log_idle_msecs": 10000,
+ "log_level": "debug5",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "arr": null,
+ "obj": null,
+ "user": null
+ },
+ {
+ "log_line": 9,
+ "log_part": null,
+ "log_time": "2013-09-06 22:00:59.124",
+ "log_idle_msecs": 0,
+ "log_level": "debug4",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "arr": null,
+ "obj": null,
+ "user": null
+ },
+ {
+ "log_line": 11,
+ "log_part": null,
+ "log_time": "2013-09-06 22:00:59.124",
+ "log_idle_msecs": 0,
+ "log_level": "debug3",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "arr": null,
+ "obj": null,
+ "user": null
+ },
+ {
+ "log_line": 13,
+ "log_part": null,
+ "log_time": "2013-09-06 22:00:59.124",
+ "log_idle_msecs": 0,
+ "log_level": "debug2",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "arr": null,
+ "obj": null,
+ "user": null
+ },
+ {
+ "log_line": 15,
+ "log_part": null,
+ "log_time": "2013-09-06 22:00:59.124",
+ "log_idle_msecs": 0,
+ "log_level": "debug",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "arr": null,
+ "obj": null,
+ "user": null
+ },
+ {
+ "log_line": 17,
+ "log_part": null,
+ "log_time": "2013-09-06 22:01:49.124",
+ "log_idle_msecs": 50000,
+ "log_level": "stats",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "arr": null,
+ "obj": null,
+ "user": null
+ },
+ {
+ "log_line": 19,
+ "log_part": null,
+ "log_time": "2013-09-06 22:01:49.124",
+ "log_idle_msecs": 0,
+ "log_level": "warning",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "arr": null,
+ "obj": null,
+ "user": null
+ },
+ {
+ "log_line": 21,
+ "log_part": null,
+ "log_time": "2013-09-06 22:01:49.124",
+ "log_idle_msecs": 0,
+ "log_level": "error",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "arr": null,
+ "obj": null,
+ "user": null
+ },
+ {
+ "log_line": 23,
+ "log_part": null,
+ "log_time": "2013-09-06 22:01:49.124",
+ "log_idle_msecs": 0,
+ "log_level": "critical",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "arr": null,
+ "obj": null,
+ "user": null
+ },
+ {
+ "log_line": 25,
+ "log_part": null,
+ "log_time": "2013-09-06 22:01:49.124",
+ "log_idle_msecs": 0,
+ "log_level": "fatal",
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_filters": null,
+ "arr": [
+ "hi",
+ {
+ "sub1": true
+ }
+ ],
+ "obj": {
+ "field1": "hi",
+ "field2": 2
+ },
+ "user": null
+ }
+]
diff --git a/test/expected/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.err b/test/expected/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.err
diff --git a/test/expected/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.out b/test/expected/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.out
new file mode 100644
index 0000000..30ddacc
--- /dev/null
+++ b/test/expected/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.out
@@ -0,0 +1,3 @@
+2017-03-24T20:06:26.240 1.1.1.1 GET 200 /example/uri/5
+2017-03-24T20:12:47.764 1.1.1.1 GET 500 /example/uri/5
+2017-03-24T20:15:31.694 1.1.1.1 GET 400 /example/uri/5
diff --git a/test/expected/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.err b/test/expected/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.err
diff --git a/test/expected/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.out b/test/expected/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.out
new file mode 100644
index 0000000..7cf3887
--- /dev/null
+++ b/test/expected/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.out
@@ -0,0 +1,29 @@
+
+[2013-09-06T20:00:48.124] TRACE trace test
+
+[2013-09-06T20:00:49.124] INFO Starting up service
+
+[2013-09-06T22:00:49.124] INFO Shutting down service
+ user: steve@example.com
+
+[2013-09-06T22:00:59.124] DEBUG5 Details...
+
+[2013-09-06T22:00:59.124] DEBUG4 Details...
+
+[2013-09-06T22:00:59.124] DEBUG3 Details...
+
+[2013-09-06T22:00:59.124] DEBUG2 Details...
+
+[2013-09-06T22:00:59.124] DEBUG Details...
+
+[2013-09-06T22:01:49.124] STATS 1 beat per second
+
+[2013-09-06T22:01:49.124] WARNING not looking good
+
+[2013-09-06T22:01:49.124] ERROR looking bad
+
+[2013-09-06T22:01:49.124] CRITICAL sooo bad
+
+[2013-09-06T22:01:49.124] FATAL shoot
+ obj: { "field1" : "hi", "field2": 2 }
+ arr: ["hi", {"sub1": true}]
diff --git a/test/expected/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.err b/test/expected/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.err
diff --git a/test/expected/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.out b/test/expected/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.out
new file mode 100644
index 0000000..128f5ab
--- /dev/null
+++ b/test/expected/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.out
@@ -0,0 +1,4 @@
+log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,user,cl
+0,<NULL>,2013-09-06 20:00:49.124,0,info,0,<NULL>,<NULL>,<NULL>,<NULL>,com.exmaple.foo
+1,<NULL>,2013-09-06 22:00:49.124,7200000,info,0,<NULL>,<NULL>,<NULL>,steve@example.com,com.exmaple.foo
+3,<NULL>,2013-09-06 22:01:49.124,60000,error,0,<NULL>,<NULL>,<NULL>,<NULL>,com.exmaple.foo
diff --git a/test/expected/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.err b/test/expected/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.err
diff --git a/test/expected/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.out b/test/expected/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.out
new file mode 100644
index 0000000..c861d3a
--- /dev/null
+++ b/test/expected/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.out
@@ -0,0 +1,29 @@
+2013-09-06T20:00:48.124 TRACE trace test
+ @fields: { "lvl": "TRACE", "msg": "trace test"}
+2013-09-06T20:00:49.124 INFO Starting up service
+ @fields: { "lvl": "INFO", "msg": "Starting up service"}
+2013-09-06T22:00:49.124 INFO Shutting down service
+ @fields/user: steve@example.com
+ @fields: { "lvl": "INFO", "msg": "Shutting down service", "user": "steve@example.com"}
+2013-09-06T22:00:59.124 DEBUG5 Details...
+ @fields: { "lvl": "DEBUG5", "msg": "Details..."}
+2013-09-06T22:00:59.124 DEBUG4 Details...
+ @fields: { "lvl": "DEBUG4", "msg": "Details..."}
+2013-09-06T22:00:59.124 DEBUG3 Details...
+ @fields: { "lvl": "DEBUG3", "msg": "Details..."}
+2013-09-06T22:00:59.124 DEBUG2 Details...
+ @fields: { "lvl": "DEBUG2", "msg": "Details..."}
+2013-09-06T22:00:59.124 DEBUG Details...
+ @fields: { "lvl": "DEBUG", "msg": "Details..."}
+2013-09-06T22:01:49.124 STATS 1 beat per second
+ @fields: { "lvl": "STATS", "msg": "1 beat per second"}
+2013-09-06T22:01:49.124 WARNING not looking good
+ @fields: { "lvl": "WARNING", "msg": "not looking good"}
+2013-09-06T22:01:49.124 ERROR looking bad
+ @fields: { "lvl": "ERROR", "msg": "looking bad"}
+2013-09-06T22:01:49.124 CRITICAL sooo bad
+ @fields: { "lvl": "CRITICAL", "msg": "sooo bad"}
+2013-09-06T22:01:49.124 FATAL shoot
+ @fields/trace#: line:1
+ @fields/trace#: line:2
+ @fields: { "lvl": "FATAL", "msg": "shoot", "trace": ["line:1", "line:2"]}
diff --git a/test/expected/test_json_format.sh_7aade92cff911c5b3cfc733685809f949ae35778.err b/test/expected/test_json_format.sh_7aade92cff911c5b3cfc733685809f949ae35778.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_7aade92cff911c5b3cfc733685809f949ae35778.err
diff --git a/test/expected/test_json_format.sh_7aade92cff911c5b3cfc733685809f949ae35778.out b/test/expected/test_json_format.sh_7aade92cff911c5b3cfc733685809f949ae35778.out
new file mode 100644
index 0000000..3b820b6
--- /dev/null
+++ b/test/expected/test_json_format.sh_7aade92cff911c5b3cfc733685809f949ae35778.out
@@ -0,0 +1 @@
+{"@timestamp":"2016-08-03T12:06:31.009-0500","@version":1,"message":";Exception initializing page context;","logger_name":"org.apache.jasper.runtime.JspFactoryImpl","thread_name":"http-bio-0.0.0.0-8081-exec-198","level":"ERROR","level_value":40000,"stack_trace":"java.lang.NoClassDefFoundError: javax/el/StaticFieldELResolver\n\tat org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:172)\n\tat org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:123)\n\tat org.apache.jsp.errors._404_002dnot_002dfound_jsp._jspService(_404_002dnot_002dfound_jsp.java:38)\n\tat org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:731)\n\tat org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)\n\tat org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)\n\tat org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:731)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)\n\tat collective.config.startup.DamFilter.doFilter(DamFilter.java:270)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)\n\tat org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)\n\tat org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:488)\n\tat org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411)\n\tat org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)\n\tat org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:476)\n\tat org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:345)\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:210)\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)\n\tat org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)\n\tat org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:683)\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)\n\tat org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)\n\tat org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)\n\tat org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n\tat java.lang.Thread.run(Thread.java:744)\nCaused by: java.lang.ClassNotFoundException: javax.el.StaticFieldELResolver\n\tat org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)\n\tat org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)\n\t... 33 common frames omitted\n","customer":"foobaz"}
diff --git a/test/expected/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.err b/test/expected/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.err
diff --git a/test/expected/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.out b/test/expected/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.out
new file mode 100644
index 0000000..ce295e2
--- /dev/null
+++ b/test/expected/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.out
@@ -0,0 +1,12 @@
+2013-09-06T20:00:48.124 TRACE trace test
+ @fields: { "lvl": "TRACE", "msg": "trace test"}
+2013-09-06T20:00:49.124 INFO Starting up service
+ @fields: { "lvl": "INFO", "msg": "Starting up service"}
+[offset: 186] {"ts": "2013-09-06T22:00:49.124817Z", "@fields": { "lvl": "INFO", "msg": "Shutting down service\nline2\nline3\nline4\nline5\nline6\nline7\nline8\nline9\nline10
+parse error: premature EOF
+ {"ts": "2013-09-06T22:00:49.124
+ (right here) ------^
+2013-09-06T22:00:59.124 DEBUG5 Details...
+ @fields: { "lvl": "DEBUG5", "msg": "Details..."}
+2013-09-06T22:00:59.222 DEBUG4 Details...
+ @fields: { "lvl": "DEBUG4", "msg": "Details..."}
diff --git a/test/expected/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.err b/test/expected/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.err
diff --git a/test/expected/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.out b/test/expected/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.out
new file mode 100644
index 0000000..bae2626
--- /dev/null
+++ b/test/expected/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.out
@@ -0,0 +1,8 @@
+2013-09-06T20:00:48.124 abc 48 def info - -
+ @fields: { "lvl": "TRACE", "msg": "trace test"}
+2013-09-06T20:00:49.124 abc 49 def info - -
+ @fields: { "lvl": "INFO", "msg": "Starting up service"}
+[offset: 186] {"ts": "2013-09-06T22:00:49.124817Z", "@fields": { "lvl": "INFO", "msg":
+parse error: premature EOF
+ {"ts": "2013-09-06T22:00:49.124
+ (right here) ------^
diff --git a/test/expected/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.err b/test/expected/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.err
diff --git a/test/expected/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.out b/test/expected/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.out
new file mode 100644
index 0000000..58b44ab
--- /dev/null
+++ b/test/expected/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.out
@@ -0,0 +1,2 @@
+2018-08-21T14:04:21.221 38708007 medusa-GpsLocator.service python[184] FATAL GPS Reference longitude: 7.358143333
+2018-08-21T14:04:21.221 38708007 medusa-GpsLocator.service python[184] INFO GPS Reference latitude: 46.908706667
diff --git a/test/expected/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.err b/test/expected/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.err
diff --git a/test/expected/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.out b/test/expected/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.out
new file mode 100644
index 0000000..80919e8
--- /dev/null
+++ b/test/expected/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.out
@@ -0,0 +1,14 @@
+log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,arr,obj,user
+0,<NULL>,2013-09-06 20:00:48.124,0,trace,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+2,<NULL>,2013-09-06 20:00:49.124,1000,info,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+4,<NULL>,2013-09-06 22:00:49.124,7200000,info,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,steve@example.com
+7,<NULL>,2013-09-06 22:00:59.124,10000,debug5,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+9,<NULL>,2013-09-06 22:00:59.124,0,debug4,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+11,<NULL>,2013-09-06 22:00:59.124,0,debug3,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+13,<NULL>,2013-09-06 22:00:59.124,0,debug2,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+15,<NULL>,2013-09-06 22:00:59.124,0,debug,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+17,<NULL>,2013-09-06 22:01:49.124,50000,stats,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+19,<NULL>,2013-09-06 22:01:49.124,0,warning,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+21,<NULL>,2013-09-06 22:01:49.124,0,error,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+23,<NULL>,2013-09-06 22:01:49.124,0,critical,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
+25,<NULL>,2013-09-06 22:01:49.124,0,fatal,0,<NULL>,<NULL>,<NULL>,"[""hi"", {""sub1"": true}]","{ ""field1"" : ""hi"", ""field2"": 2 }",<NULL>
diff --git a/test/expected/test_json_format.sh_8f2ebcd319afc7966ef11e31f9dd646bf6f001dd.err b/test/expected/test_json_format.sh_8f2ebcd319afc7966ef11e31f9dd646bf6f001dd.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_8f2ebcd319afc7966ef11e31f9dd646bf6f001dd.err
diff --git a/test/expected/test_json_format.sh_8f2ebcd319afc7966ef11e31f9dd646bf6f001dd.out b/test/expected/test_json_format.sh_8f2ebcd319afc7966ef11e31f9dd646bf6f001dd.out
new file mode 100644
index 0000000..338bca9
--- /dev/null
+++ b/test/expected/test_json_format.sh_8f2ebcd319afc7966ef11e31f9dd646bf6f001dd.out
@@ -0,0 +1,21 @@
+2013-09-06T20:00:48.124 abc 48 def TRACE - trace test
+2013-09-06T20:00:49.124 abc 49 def INFO - Starting up service
+2013-09-06T22:00:49.124 abc 49 def INFO - Shutting down service
+ user: steve@example.com
+timestamp="2013-09-06T22:00:50.123000Z" level="INFO" msg="Hello, World"
+panic: foo bar failed baz
+ level1.py:10034
+ level2.py:100
+ level3.py:42
+2013-09-06T22:00:59.124 abc 59 def DEBUG5 - Details...
+2013-09-06T22:00:59.124 abc 59 def DEBUG4 - Details...
+2013-09-06T22:00:59.124 abc 59 def DEBUG3 - Details...
+2013-09-06T22:00:59.124 abc 59 def DEBUG2 - Details...
+2013-09-06T22:00:59.124 abc 59 def DEBUG - Details...
+2013-09-06T22:01:49.124 abc 49 def STATS - 1 beat per second
+2013-09-06T22:01:49.124 abc 49 def WARNING - not looking good
+2013-09-06T22:01:49.124 abc 49 def ERROR - looking bad
+2013-09-06T22:01:49.124 abc 49 def CRITICAL - sooo bad
+2013-09-06T22:01:49.124 abc 49 def FATAL - shoot
+ obj: { "field1" : "hi", "field2": 2 }
+ arr: ["hi", {"sub1": true}]
diff --git a/test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.err b/test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.err
diff --git a/test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.out b/test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.out
new file mode 100644
index 0000000..30ddacc
--- /dev/null
+++ b/test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.out
@@ -0,0 +1,3 @@
+2017-03-24T20:06:26.240 1.1.1.1 GET 200 /example/uri/5
+2017-03-24T20:12:47.764 1.1.1.1 GET 500 /example/uri/5
+2017-03-24T20:15:31.694 1.1.1.1 GET 400 /example/uri/5
diff --git a/test/expected/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.err b/test/expected/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.err
diff --git a/test/expected/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.out b/test/expected/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.out
new file mode 100644
index 0000000..eb43a38
--- /dev/null
+++ b/test/expected/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.out
@@ -0,0 +1,4 @@
+
+[-09-06T22:00:49.124] INFO Shutting down service
+ user: steve@example.com
+
diff --git a/test/expected/test_json_format.sh_989e52d167582648b73c5d025cc0e814c642b3c8.err b/test/expected/test_json_format.sh_989e52d167582648b73c5d025cc0e814c642b3c8.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_989e52d167582648b73c5d025cc0e814c642b3c8.err
diff --git a/test/expected/test_json_format.sh_989e52d167582648b73c5d025cc0e814c642b3c8.out b/test/expected/test_json_format.sh_989e52d167582648b73c5d025cc0e814c642b3c8.out
new file mode 100644
index 0000000..55dcb76
--- /dev/null
+++ b/test/expected/test_json_format.sh_989e52d167582648b73c5d025cc0e814c642b3c8.out
@@ -0,0 +1,4 @@
+2013-09-06T20:00:49.124 abc 49 def 0 c.e.foo Starting up service
+2013-09-06T22:00:49.124 abc 49 def 0 c.e.foo Shutting down service
+ user: steve@example.com
+2013-09-06T22:01:49.124 abc 49 def 10 c.e.foo looking bad
diff --git a/test/expected/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.err b/test/expected/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.err
diff --git a/test/expected/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.out b/test/expected/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.out
new file mode 100644
index 0000000..6282d17
--- /dev/null
+++ b/test/expected/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.out
@@ -0,0 +1,25 @@
+
+[2013-09-06T20:00:48.124] TRACE trace testbork bork bork
+
+[2013-09-06T20:00:49.124] INFO Starting up servicebork bork bork
+
+[2013-09-06T22:00:49.124] INFO Shutting down servicebork bork bork
+ user:mailto:steve@example.com
+
+[2013-09-06T22:00:59.124] DEBUG5 Details...bork bork bork
+
+[2013-09-06T22:00:59.124] DEBUG4 Details...bork bork bork
+
+[2013-09-06T22:00:59.124] DEBUG3 Details...bork bork bork
+
+[2013-09-06T22:00:59.124] DEBUG2 Details...bork bork bork
+
+[2013-09-06T22:00:59.124] DEBUG Details...bork bork bork
+
+[2013-09-06T22:01:49.124] STATS 1 beat per secondbork bork bork
+
+[2013-09-06T22:01:49.124] WARNING not looking goodbork bork bork
+
+[2013-09-06T22:01:49.124] ERROR looking badbork bork bork
+
+[2013-09-06T22:01:49.124] CRITICAL sooo badbork bork bork
diff --git a/test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.err b/test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.err
diff --git a/test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.out b/test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.out
new file mode 100644
index 0000000..b356898
--- /dev/null
+++ b/test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.out
@@ -0,0 +1,4 @@
+log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,client_ip,request/method,request/uri,request/size,response/status,details1,details2,details3
+0,<NULL>,2017-03-24 20:06:26.240,0,info,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,200,<NULL>,<NULL>,<NULL>
+1,<NULL>,2017-03-24 20:12:47.764,381524,critical,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,500,<NULL>,<NULL>,<NULL>
+2,<NULL>,2017-03-24 20:15:31.694,163930,warning,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,400,"{""foo"": ""bar""}","{""foo"": ""bar""}","{""foo"": ""bar""}"
diff --git a/test/expected/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.err b/test/expected/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.err
diff --git a/test/expected/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.out b/test/expected/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.out
new file mode 100644
index 0000000..889eb99
--- /dev/null
+++ b/test/expected/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.out
@@ -0,0 +1,2 @@
+2022-09-24T00:00:09.484 Hello, World!
+2022-09-24T00:00:19.222 Goodbye, World!
diff --git a/test/expected/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.err b/test/expected/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.err
diff --git a/test/expected/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.out b/test/expected/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.out
new file mode 100644
index 0000000..a11ff06
--- /dev/null
+++ b/test/expected/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.out
@@ -0,0 +1,50 @@
+2016-08-03T12:06:31.009 - ;Exception initializing page context; java.lang.NoClassDefFoundError: javax/el/StaticFieldELResolver
+ at org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:172)
+ at org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:123)
+ at org.apache.jsp.errors._404_002dnot_002dfound_jsp._jspService(_404_002dnot_002dfound_jsp.java:38)
+ at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
+ at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
+ at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)
+ at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
+ at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
+ at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
+ at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
+ at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
+ at collective.config.startup.DamFilter.doFilter(DamFilter.java:270)
+ at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
+ at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
+ at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
+ at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:488)
+ at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411)
+ at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)
+ at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:476)
+ at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:345)
+ at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:210)
+ at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
+ at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
+ at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
+ at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:683)
+ at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
+ at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
+ at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
+ at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
+ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
+ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
+ at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
+ at java.lang.Thread.run(Thread.java:744)
+Caused by: java.lang.ClassNotFoundException: javax.el.StaticFieldELResolver
+ at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
+ at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
+ ... 33 common frames omitted
+
+ @version: 1
+ logger_name: org.apache.jasper.runtime.JspFactoryImpl
+ thread_name: http-bio-0.0.0.0-8081-exec-198
+ level: ERROR
+ customer: foobaz
+2016-08-03T12:06:31.009 - ;Exception initializing page context; 
+ @version: 1
+ logger_name: org.apache.jasper.runtime.JspFactoryImpl
+ thread_name: http-bio-0.0.0.0-8081-exec-198
+ level: ERROR
+ customer: foobaz
diff --git a/test/expected/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.err b/test/expected/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.err
diff --git a/test/expected/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.out b/test/expected/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.out
new file mode 100644
index 0000000..b356898
--- /dev/null
+++ b/test/expected/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.out
@@ -0,0 +1,4 @@
+log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,client_ip,request/method,request/uri,request/size,response/status,details1,details2,details3
+0,<NULL>,2017-03-24 20:06:26.240,0,info,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,200,<NULL>,<NULL>,<NULL>
+1,<NULL>,2017-03-24 20:12:47.764,381524,critical,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,500,<NULL>,<NULL>,<NULL>
+2,<NULL>,2017-03-24 20:15:31.694,163930,warning,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,400,"{""foo"": ""bar""}","{""foo"": ""bar""}","{""foo"": ""bar""}"
diff --git a/test/expected/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.err b/test/expected/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.err
diff --git a/test/expected/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.out b/test/expected/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.out
new file mode 100644
index 0000000..951a389
--- /dev/null
+++ b/test/expected/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.out
@@ -0,0 +1,3 @@
+2017-03-24T16:06:26.240 1.1.1.1 GET 200 /example/uri/5
+2017-03-24T16:12:47.764 1.1.1.1 GET 500 /example/uri/5
+2017-03-24T16:15:31.694 1.1.1.1 GET 400 /example/uri/5
diff --git a/test/expected/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.err b/test/expected/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.err
diff --git a/test/expected/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.out b/test/expected/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.out
new file mode 100644
index 0000000..c3d0110
--- /dev/null
+++ b/test/expected/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.out
@@ -0,0 +1,4 @@
+log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,client_ip,request/method,request/uri,request/size,response/status,details1,details2,details3
+0,<NULL>,2017-03-24 16:06:26.240,0,info,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,200,<NULL>,<NULL>,<NULL>
+1,<NULL>,2017-03-24 16:12:47.764,381524,critical,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,500,<NULL>,<NULL>,<NULL>
+2,<NULL>,2017-03-24 16:15:31.694,163930,warning,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,400,"{""foo"": ""bar""}","{""foo"": ""bar""}","{""foo"": ""bar""}"
diff --git a/test/expected/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.err b/test/expected/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.err
diff --git a/test/expected/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.out b/test/expected/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.out
new file mode 100644
index 0000000..325af1f
--- /dev/null
+++ b/test/expected/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.out
@@ -0,0 +1,4 @@
+-09-06T22:00:49.124 INFO Shutting down service
+ @fields/user: steve@example.com
+ @fields: { "lvl": "INFO", "msg": "Shutting down service", "user": "steve@example.com"}
+
diff --git a/test/expected/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.err b/test/expected/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.err
diff --git a/test/expected/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.out b/test/expected/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.out
new file mode 100644
index 0000000..9b2a7cd
--- /dev/null
+++ b/test/expected/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.out
@@ -0,0 +1,3 @@
+2600-12-03 09:23:00.000000 0:
+2600-12-03 09:23:00.000000 0:
+2600-12-03 09:23:00.000000 0:
diff --git a/test/expected/test_logfile.sh_09bd16e044302f6b121092534708594bdad11b5a.err b/test/expected/test_logfile.sh_09bd16e044302f6b121092534708594bdad11b5a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_09bd16e044302f6b121092534708594bdad11b5a.err
diff --git a/test/expected/test_logfile.sh_09bd16e044302f6b121092534708594bdad11b5a.out b/test/expected/test_logfile.sh_09bd16e044302f6b121092534708594bdad11b5a.out
new file mode 100644
index 0000000..9317bcb
--- /dev/null
+++ b/test/expected/test_logfile.sh_09bd16e044302f6b121092534708594bdad11b5a.out
@@ -0,0 +1 @@
++0
diff --git a/test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.err b/test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.err
diff --git a/test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.out b/test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.out
new file mode 100644
index 0000000..ff67043
--- /dev/null
+++ b/test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.out
@@ -0,0 +1,2 @@
+ filepath  descriptor  mimetype  content 
+{test_dir}/logfile_syslog.1.gz net.zlib.gzip.header application/json {"name":"logfile_syslog.1","mtime":"2007-11-03T16:23:00.000","comment":""} 
diff --git a/test/expected/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.err b/test/expected/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.err
diff --git a/test/expected/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.out b/test/expected/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.out
new file mode 100644
index 0000000..4ed341d
--- /dev/null
+++ b/test/expected/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.out
@@ -0,0 +1,2 @@
+basename(filepath)  descriptor  mimetype  content 
+logfile_syslog.1.gz net.zlib.gzip.header application/json {"name":"logfile_syslog.1","mtime":"2007-11-03T09:23:00.000","comment":""} 
diff --git a/test/expected/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.err b/test/expected/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.err
diff --git a/test/expected/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.out b/test/expected/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.out
new file mode 100644
index 0000000..7731fde
--- /dev/null
+++ b/test/expected/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.out
@@ -0,0 +1,2 @@
+#Fields: ? )
+0
diff --git a/test/expected/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.err b/test/expected/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.err
diff --git a/test/expected/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.out b/test/expected/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.out
new file mode 100644
index 0000000..8d8b6ce
--- /dev/null
+++ b/test/expected/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.out
@@ -0,0 +1,2 @@
+#Date: 20?0-2-02
+0
diff --git a/test/expected/test_logfile.sh_4a2a907fcb069b8d6e65961a7b2e796d6c3a87b1.err b/test/expected/test_logfile.sh_4a2a907fcb069b8d6e65961a7b2e796d6c3a87b1.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_4a2a907fcb069b8d6e65961a7b2e796d6c3a87b1.err
diff --git a/test/expected/test_logfile.sh_4a2a907fcb069b8d6e65961a7b2e796d6c3a87b1.out b/test/expected/test_logfile.sh_4a2a907fcb069b8d6e65961a7b2e796d6c3a87b1.out
new file mode 100644
index 0000000..8de34b8
--- /dev/null
+++ b/test/expected/test_logfile.sh_4a2a907fcb069b8d6e65961a7b2e796d6c3a87b1.out
@@ -0,0 +1,4 @@
+#Fields: 0 cs-bytes
+#Fields: 0
+ 0 #
+0
diff --git a/test/expected/test_logfile.sh_6602faf7817c494c33e32da7ee95f13aa9210d01.err b/test/expected/test_logfile.sh_6602faf7817c494c33e32da7ee95f13aa9210d01.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_6602faf7817c494c33e32da7ee95f13aa9210d01.err
diff --git a/test/expected/test_logfile.sh_6602faf7817c494c33e32da7ee95f13aa9210d01.out b/test/expected/test_logfile.sh_6602faf7817c494c33e32da7ee95f13aa9210d01.out
new file mode 100644
index 0000000..372e078
--- /dev/null
+++ b/test/expected/test_logfile.sh_6602faf7817c494c33e32da7ee95f13aa9210d01.out
@@ -0,0 +1,10 @@
+Sep 19 09:24:04 Tims-MacBook-Air AMPDeviceDiscoveryAgent[17600]: tid:1d1f - Mux ID not found in mapping dictionary
+Sep 19 09:24:04 Tims-MacBook-Air AMPDeviceDiscoveryAgent[17600]: tid:1d1f - Can't handle disconnect with invalid ecid
+Sep 19 09:24:20 Tims-MacBook-Air MobileDeviceUpdater[17530]: Entered:_AMMuxedDeviceDisconnected, mux-device:1003
+Sep 19 09:24:20 Tims-MacBook-Air AMPDeviceDiscoveryAgent[17600]: Entered:_AMMuxedDeviceDisconnected, mux-device:1003
+Sep 19 09:24:20 Tims-MacBook-Air MobileDeviceUpdater[17530]: Entered:__thr_AMMuxedDeviceDisconnected, mux-device:1003
+Sep 19 09:24:20 Tims-MacBook-Air AMPDeviceDiscoveryAgent[17600]: Entered:__thr_AMMuxedDeviceDisconnected, mux-device:1003
+Sep 19 09:24:20 Tims-MacBook-Air MobileDeviceUpdater[17530]: tid:191f - Mux ID not found in mapping dictionary
+Sep 19 09:24:20 Tims-MacBook-Air AMPDeviceDiscoveryAgent[17600]: tid:1d1f - Mux ID not found in mapping dictionary
+Sep 19 09:24:20 Tims-MacBook-Air MobileDeviceUpdater[17530]: tid:191f - Can't handle disconnect with invalid ecid
+Sep 19 09:24:20 Tims-MacBook-Air AMPDeviceDiscoveryAgent[17600]: tid:1d1f - Can't handle disconnect with invalid ecid
diff --git a/test/expected/test_logfile.sh_7c2e11488bccc59458b5775db4b90de964858259.err b/test/expected/test_logfile.sh_7c2e11488bccc59458b5775db4b90de964858259.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_7c2e11488bccc59458b5775db4b90de964858259.err
diff --git a/test/expected/test_logfile.sh_7c2e11488bccc59458b5775db4b90de964858259.out b/test/expected/test_logfile.sh_7c2e11488bccc59458b5775db4b90de964858259.out
new file mode 100644
index 0000000..13576d8
--- /dev/null
+++ b/test/expected/test_logfile.sh_7c2e11488bccc59458b5775db4b90de964858259.out
@@ -0,0 +1,6 @@
+000
+000
+#Fields: 0
+0
+#Fields: 0
+0
diff --git a/test/expected/test_logfile.sh_a7037efd0c4bbf51940137a44e57d94e9307e83e.err b/test/expected/test_logfile.sh_a7037efd0c4bbf51940137a44e57d94e9307e83e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_a7037efd0c4bbf51940137a44e57d94e9307e83e.err
diff --git a/test/expected/test_logfile.sh_a7037efd0c4bbf51940137a44e57d94e9307e83e.out b/test/expected/test_logfile.sh_a7037efd0c4bbf51940137a44e57d94e9307e83e.out
new file mode 100644
index 0000000..963f93c
--- /dev/null
+++ b/test/expected/test_logfile.sh_a7037efd0c4bbf51940137a44e57d94e9307e83e.out
@@ -0,0 +1 @@
+ 00:00
diff --git a/test/expected/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.err b/test/expected/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.err
diff --git a/test/expected/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.out b/test/expected/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.out
new file mode 100644
index 0000000..0733b93
--- /dev/null
+++ b/test/expected/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.out
@@ -0,0 +1,3 @@
+log_line log_part log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters col_0 col_1
+ 0 <NULL> 2021-05-19 08:00:01.000 0 info 0 <NULL> <NULL> <NULL> 1 /abc/def
+ 2 <NULL> 2021-05-19 08:00:03.000 2000 info 0 <NULL> <NULL> <NULL> 3 /ghi/jkl
diff --git a/test/expected/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.err b/test/expected/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.err
diff --git a/test/expected/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.out b/test/expected/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.out
new file mode 100644
index 0000000..9de987f
--- /dev/null
+++ b/test/expected/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.out
@@ -0,0 +1,11 @@
+ log_time  log_body 
+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
+2022-09-19 09:24:20.000 Entered:_AMMuxedDeviceDisconnected, mux-device:1003 
+2022-09-19 09:24:20.000 Entered:_AMMuxedDeviceDisconnected, mux-device:1003
+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
+2022-09-19 09:24:20.000 tid:191f - Mux ID not found in mapping dictionary 
+2022-09-19 09:24:20.000 tid:1d1f - Mux ID not found in mapping dictionary
+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
diff --git a/test/expected/test_meta.sh_154047fb52e4831aabf7d36512247bad6a6a2cf7.err b/test/expected/test_meta.sh_154047fb52e4831aabf7d36512247bad6a6a2cf7.err
new file mode 100644
index 0000000..1f33d64
--- /dev/null
+++ b/test/expected/test_meta.sh_154047fb52e4831aabf7d36512247bad6a6a2cf7.err
@@ -0,0 +1,7 @@
+✘ error: invalid value for “log_tags” column of table “access_log”
+ reason: unexpected JSON value
+ |   --> access_log.log_tags:1
+ |   | 1 
+ |   = help: expecting an array of tag values
+ --> command-option:1
+ | ;UPDATE access_log SET log_tags = 1 WHERE log_line = 1
diff --git a/test/expected/test_meta.sh_154047fb52e4831aabf7d36512247bad6a6a2cf7.out b/test/expected/test_meta.sh_154047fb52e4831aabf7d36512247bad6a6a2cf7.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_154047fb52e4831aabf7d36512247bad6a6a2cf7.out
diff --git a/test/expected/test_meta.sh_3c9b5940f7533c5fc3d4956a6efce50a9e7132d4.err b/test/expected/test_meta.sh_3c9b5940f7533c5fc3d4956a6efce50a9e7132d4.err
new file mode 100644
index 0000000..96a52d7
--- /dev/null
+++ b/test/expected/test_meta.sh_3c9b5940f7533c5fc3d4956a6efce50a9e7132d4.err
@@ -0,0 +1,11 @@
+✘ error: invalid value for “log_tags” column of table “access_log”
+ reason: “foo” is not a valid value for option “/#”
+ |  reason: value does not match pattern: ^#[^\s]+$
+ |   --> access_log.log_tags:1
+ |   | ["foo"] 
+ |   = help: Property Synopsis
+ |  /# tag
+ |  Description
+ |  A tag for the log line
+ --> command-option:1
+ | ;UPDATE access_log SET log_tags = json_array('foo') WHERE log_line = 1
diff --git a/test/expected/test_meta.sh_3c9b5940f7533c5fc3d4956a6efce50a9e7132d4.out b/test/expected/test_meta.sh_3c9b5940f7533c5fc3d4956a6efce50a9e7132d4.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_3c9b5940f7533c5fc3d4956a6efce50a9e7132d4.out
diff --git a/test/expected/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.err b/test/expected/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.err
diff --git a/test/expected/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.out b/test/expected/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.out
new file mode 100644
index 0000000..171d0f7
--- /dev/null
+++ b/test/expected/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.out
@@ -0,0 +1,2 @@
+log_tags 
+["#foo"]
diff --git a/test/expected/test_meta.sh_45ff39a3d0ac0ca0c95aaca14d043450cec1cedd.err b/test/expected/test_meta.sh_45ff39a3d0ac0ca0c95aaca14d043450cec1cedd.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_45ff39a3d0ac0ca0c95aaca14d043450cec1cedd.err
diff --git a/test/expected/test_meta.sh_45ff39a3d0ac0ca0c95aaca14d043450cec1cedd.out b/test/expected/test_meta.sh_45ff39a3d0ac0ca0c95aaca14d043450cec1cedd.out
new file mode 100644
index 0000000..5ed367d
--- /dev/null
+++ b/test/expected/test_meta.sh_45ff39a3d0ac0ca0c95aaca14d043450cec1cedd.out
@@ -0,0 +1,5 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+ ├ Hello, World!
+ └ #foo
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_meta.sh_48e85ba0c0945a5085fb4ee255771406061a9c17.err b/test/expected/test_meta.sh_48e85ba0c0945a5085fb4ee255771406061a9c17.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_48e85ba0c0945a5085fb4ee255771406061a9c17.err
diff --git a/test/expected/test_meta.sh_48e85ba0c0945a5085fb4ee255771406061a9c17.out b/test/expected/test_meta.sh_48e85ba0c0945a5085fb4ee255771406061a9c17.out
new file mode 100644
index 0000000..4731070
--- /dev/null
+++ b/test/expected/test_meta.sh_48e85ba0c0945a5085fb4ee255771406061a9c17.out
@@ -0,0 +1,6 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+ │ Hello, World!
+ │
+ └ This is  markdown  now!
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_meta.sh_4c39b356748c67ccf8a6027a1af88da532f8252a.err b/test/expected/test_meta.sh_4c39b356748c67ccf8a6027a1af88da532f8252a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_4c39b356748c67ccf8a6027a1af88da532f8252a.err
diff --git a/test/expected/test_meta.sh_4c39b356748c67ccf8a6027a1af88da532f8252a.out b/test/expected/test_meta.sh_4c39b356748c67ccf8a6027a1af88da532f8252a.out
new file mode 100644
index 0000000..0dd4cb7
--- /dev/null
+++ b/test/expected/test_meta.sh_4c39b356748c67ccf8a6027a1af88da532f8252a.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_meta.sh_7b75763926d832bf9784ca234a060859770aabe7.err b/test/expected/test_meta.sh_7b75763926d832bf9784ca234a060859770aabe7.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_7b75763926d832bf9784ca234a060859770aabe7.err
diff --git a/test/expected/test_meta.sh_7b75763926d832bf9784ca234a060859770aabe7.out b/test/expected/test_meta.sh_7b75763926d832bf9784ca234a060859770aabe7.out
new file mode 100644
index 0000000..78b865d
--- /dev/null
+++ b/test/expected/test_meta.sh_7b75763926d832bf9784ca234a060859770aabe7.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
+ └ #foo
diff --git a/test/expected/test_meta.sh_811b1a8a176b25001a89e35b295a1117ab76969b.err b/test/expected/test_meta.sh_811b1a8a176b25001a89e35b295a1117ab76969b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_811b1a8a176b25001a89e35b295a1117ab76969b.err
diff --git a/test/expected/test_meta.sh_811b1a8a176b25001a89e35b295a1117ab76969b.out b/test/expected/test_meta.sh_811b1a8a176b25001a89e35b295a1117ab76969b.out
new file mode 100644
index 0000000..0dd4cb7
--- /dev/null
+++ b/test/expected/test_meta.sh_811b1a8a176b25001a89e35b295a1117ab76969b.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_meta.sh_83ac877aa9d38b25945cf96d6326a2468187c40f.err b/test/expected/test_meta.sh_83ac877aa9d38b25945cf96d6326a2468187c40f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_83ac877aa9d38b25945cf96d6326a2468187c40f.err
diff --git a/test/expected/test_meta.sh_83ac877aa9d38b25945cf96d6326a2468187c40f.out b/test/expected/test_meta.sh_83ac877aa9d38b25945cf96d6326a2468187c40f.out
new file mode 100644
index 0000000..2830598
--- /dev/null
+++ b/test/expected/test_meta.sh_83ac877aa9d38b25945cf96d6326a2468187c40f.out
@@ -0,0 +1,37 @@
+[2020-12-10 06:56:41,061] INFO [m:108] Calling 'x' with params:
+
+[2020-12-10 06:56:41,092] DEBUG [connect.client:69] Full request text:
+ └ #xml-req
+<?xml version='1.0' encoding='iso-8859-2'?>
+<a-request>
+ <head>
+ x
+ </head>
+ <source>
+ x
+ </source>
+ <request id="1">
+ <name>
+ x
+ </name>
+ </request>
+</a-request>
+
+[2020-12-10 06:56:41,099] DEBUG [m:85] Full reply text:
+<?xml version='1.0' encoding='iso-8859-2'?>
+<a-reply>
+ <head>
+ x
+ </head>
+ <reply id="2">
+ <status>
+ <result>OK</result>
+ </status>
+ <name>
+ x
+ </name>
+ </reply>
+ <technical-track>
+ x
+ </technical-track>
+</a-reply>
diff --git a/test/expected/test_meta.sh_a7489c1f0e001adc732b7e2ab31bb30960fda078.err b/test/expected/test_meta.sh_a7489c1f0e001adc732b7e2ab31bb30960fda078.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_a7489c1f0e001adc732b7e2ab31bb30960fda078.err
diff --git a/test/expected/test_meta.sh_a7489c1f0e001adc732b7e2ab31bb30960fda078.out b/test/expected/test_meta.sh_a7489c1f0e001adc732b7e2ab31bb30960fda078.out
new file mode 100644
index 0000000..08a6fcb
--- /dev/null
+++ b/test/expected/test_meta.sh_a7489c1f0e001adc732b7e2ab31bb30960fda078.out
@@ -0,0 +1,4 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+ └ Goodbye, World!
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_meta.sh_c063f96398650f130941bbbf4cf63c1244fdbee5.err b/test/expected/test_meta.sh_c063f96398650f130941bbbf4cf63c1244fdbee5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_c063f96398650f130941bbbf4cf63c1244fdbee5.err
diff --git a/test/expected/test_meta.sh_c063f96398650f130941bbbf4cf63c1244fdbee5.out b/test/expected/test_meta.sh_c063f96398650f130941bbbf4cf63c1244fdbee5.out
new file mode 100644
index 0000000..0dd4cb7
--- /dev/null
+++ b/test/expected/test_meta.sh_c063f96398650f130941bbbf4cf63c1244fdbee5.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.err b/test/expected/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.err
diff --git a/test/expected/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.out b/test/expected/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.out
new file mode 100644
index 0000000..8462ae3
--- /dev/null
+++ b/test/expected/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.out
@@ -0,0 +1,4 @@
+log_line  log_comment log_tags 
+ 0 Hello, World! ["#foo"] 
+ 1 <NULL> <NULL>
+ 2 <NULL>  <NULL> 
diff --git a/test/expected/test_meta.sh_c8fb22932af2467a2651797a8a8d8cddcd09431d.err b/test/expected/test_meta.sh_c8fb22932af2467a2651797a8a8d8cddcd09431d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_c8fb22932af2467a2651797a8a8d8cddcd09431d.err
diff --git a/test/expected/test_meta.sh_c8fb22932af2467a2651797a8a8d8cddcd09431d.out b/test/expected/test_meta.sh_c8fb22932af2467a2651797a8a8d8cddcd09431d.out
new file mode 100644
index 0000000..5cf31b1
--- /dev/null
+++ b/test/expected/test_meta.sh_c8fb22932af2467a2651797a8a8d8cddcd09431d.out
@@ -0,0 +1,4 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+ └ #foo
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.err b/test/expected/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.err
diff --git a/test/expected/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.out b/test/expected/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.out
new file mode 100644
index 0000000..a3e5357
--- /dev/null
+++ b/test/expected/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.out
@@ -0,0 +1,5 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+ ├ Hello, World!
+ └ #foo
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_meta.sh_fd09cb565f44a114d8c9a519e571918e30262eaf.err b/test/expected/test_meta.sh_fd09cb565f44a114d8c9a519e571918e30262eaf.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_fd09cb565f44a114d8c9a519e571918e30262eaf.err
diff --git a/test/expected/test_meta.sh_fd09cb565f44a114d8c9a519e571918e30262eaf.out b/test/expected/test_meta.sh_fd09cb565f44a114d8c9a519e571918e30262eaf.out
new file mode 100644
index 0000000..b842402
--- /dev/null
+++ b/test/expected/test_meta.sh_fd09cb565f44a114d8c9a519e571918e30262eaf.out
@@ -0,0 +1,4 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+ └ #foo
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_meta.sh_fdf4a91aa55262255816dff7d605f1f0a5d6fe92.err b/test/expected/test_meta.sh_fdf4a91aa55262255816dff7d605f1f0a5d6fe92.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_fdf4a91aa55262255816dff7d605f1f0a5d6fe92.err
diff --git a/test/expected/test_meta.sh_fdf4a91aa55262255816dff7d605f1f0a5d6fe92.out b/test/expected/test_meta.sh_fdf4a91aa55262255816dff7d605f1f0a5d6fe92.out
new file mode 100644
index 0000000..25b6f32
--- /dev/null
+++ b/test/expected/test_meta.sh_fdf4a91aa55262255816dff7d605f1f0a5d6fe92.out
@@ -0,0 +1,4 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+ └ Hello, World!
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.err b/test/expected/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.err
diff --git a/test/expected/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.out b/test/expected/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.out
new file mode 100644
index 0000000..35fadf8
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.out
@@ -0,0 +1,8 @@
+{
+ "wrapper": [
+ {"message":""
+ select Id from Account where id = $sfid
+ ^
+ ERROR at Row:1:Column:34
+ line 1:34 no viable alternative at character '$'
+""}]}
diff --git a/test/expected/test_pretty_print.sh_4111e649fb49c0a377e552fa0b56c60c370633da.err b/test/expected/test_pretty_print.sh_4111e649fb49c0a377e552fa0b56c60c370633da.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_4111e649fb49c0a377e552fa0b56c60c370633da.err
diff --git a/test/expected/test_pretty_print.sh_4111e649fb49c0a377e552fa0b56c60c370633da.out b/test/expected/test_pretty_print.sh_4111e649fb49c0a377e552fa0b56c60c370633da.out
new file mode 100644
index 0000000..f6eae9d
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_4111e649fb49c0a377e552fa0b56c60c370633da.out
@@ -0,0 +1,4 @@
+{
+ Example: foo,
+ bar: baz
+}
diff --git a/test/expected/test_pretty_print.sh_675a2ff6306df7c54127e39319cf06a2dd353145.err b/test/expected/test_pretty_print.sh_675a2ff6306df7c54127e39319cf06a2dd353145.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_675a2ff6306df7c54127e39319cf06a2dd353145.err
diff --git a/test/expected/test_pretty_print.sh_675a2ff6306df7c54127e39319cf06a2dd353145.out b/test/expected/test_pretty_print.sh_675a2ff6306df7c54127e39319cf06a2dd353145.out
new file mode 100644
index 0000000..0808acf
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_675a2ff6306df7c54127e39319cf06a2dd353145.out
@@ -0,0 +1,5 @@
+[2020-12-10 06:56:41,061] INFO [:108] Calling 'x' with params:
+[2020-12-10 06:56:41,092] DEBUG [:69] Full request text:
+/a-request, /a-request/head, /a-request/source, /a-request/request, /a-request/request/name
+[2020-12-10 06:56:41,099] DEBUG [:85] Full reply text:
+/a-reply, /a-reply/head, /a-reply/reply, /a-reply/reply/status, /a-reply/reply/status/result, /a-reply/reply/name, /a-reply/technical-track
diff --git a/test/expected/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.err b/test/expected/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.err
diff --git a/test/expected/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.out b/test/expected/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.out
new file mode 100644
index 0000000..613cc3a
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.out
@@ -0,0 +1,5 @@
+2015-04-18T13:16:30.003 {
+ "wrapper": {"msg": r""
+ Hello,
+ World!
+""}}
diff --git a/test/expected/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.err b/test/expected/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.err
diff --git a/test/expected/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.out b/test/expected/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.out
new file mode 100644
index 0000000..0ac4c9a
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.out
@@ -0,0 +1,3 @@
+Hello
+World
+
diff --git a/test/expected/test_pretty_print.sh_a6d9042e5e95f2a49194bd80c1eed154813ddf41.err b/test/expected/test_pretty_print.sh_a6d9042e5e95f2a49194bd80c1eed154813ddf41.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_a6d9042e5e95f2a49194bd80c1eed154813ddf41.err
diff --git a/test/expected/test_pretty_print.sh_a6d9042e5e95f2a49194bd80c1eed154813ddf41.out b/test/expected/test_pretty_print.sh_a6d9042e5e95f2a49194bd80c1eed154813ddf41.out
new file mode 100644
index 0000000..3fb9189
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_a6d9042e5e95f2a49194bd80c1eed154813ddf41.out
@@ -0,0 +1,19 @@
+Mar 24 15:17:38.999 000000000264F I shmem.res 262144 262144 1 chassis_msg_svc/osenv::req_blocking<osenv::req_lambda<tcp_messaging_impl::register_app(svc::messaging_port,
+ defs::atom*,
+ defs::borrowed<svc::messaging_session>,
+ defs::owned<svc::connection_eviction_strategy>&&,
+ svc::messaging::connection_type,
+ svc::messaging::app_param
+)::{lambda()#1}>, osenv::aloc_dynamic_named<tcp_messaging_impl::register_app(svc::messaging_port,
+ defs::atom*,
+ defs::borrowed<svc::messaging_session>,
+ defs::owned<svc::connection_eviction_strategy>&&,
+ svc::messaginconnection_type,
+ svc::messaging::app_param
+)::{lambda()#1}, osenv::temporal, tcp_messaging_impl::register_app(svc::messaging_port,
+ defs::atom*,
+ defs::borrowed<svc::messaging_session>,
+ des::owned<svc::connection_eviction_strategy>&&,
+ svc::messaging::connection_type,
+ svc::messaging::app_param
+)::{lambda()#1}>, osenv::req>->fiber stacks
diff --git a/test/expected/test_pretty_print.sh_cd361eeca7e91bfab942b75d6c3422c7a456a111.err b/test/expected/test_pretty_print.sh_cd361eeca7e91bfab942b75d6c3422c7a456a111.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_cd361eeca7e91bfab942b75d6c3422c7a456a111.err
diff --git a/test/expected/test_pretty_print.sh_cd361eeca7e91bfab942b75d6c3422c7a456a111.out b/test/expected/test_pretty_print.sh_cd361eeca7e91bfab942b75d6c3422c7a456a111.out
new file mode 100644
index 0000000..c3e4e85
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_cd361eeca7e91bfab942b75d6c3422c7a456a111.out
@@ -0,0 +1,3 @@
+2015-04-18T13:16:30.003 8.8.8.8
+<foo>8.8.8.8</foo>
+9 8.8.8.8<1054 198.51.100.1546 544.9.8.7 98.542.241.99 19143.2.5.6
diff --git a/test/expected/test_pretty_print.sh_f8feb52a321026d9562b271eb37a2c56dfaed329.err b/test/expected/test_pretty_print.sh_f8feb52a321026d9562b271eb37a2c56dfaed329.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_f8feb52a321026d9562b271eb37a2c56dfaed329.err
diff --git a/test/expected/test_pretty_print.sh_f8feb52a321026d9562b271eb37a2c56dfaed329.out b/test/expected/test_pretty_print.sh_f8feb52a321026d9562b271eb37a2c56dfaed329.out
new file mode 100644
index 0000000..35f3af0
--- /dev/null
+++ b/test/expected/test_pretty_print.sh_f8feb52a321026d9562b271eb37a2c56dfaed329.out
@@ -0,0 +1 @@
+2022-06-22T10:20:33 Example foo
diff --git a/test/expected/test_regex101.sh_0fa3663a45aca6a328cb728872af7ed7ee896f1c.err b/test/expected/test_regex101.sh_0fa3663a45aca6a328cb728872af7ed7ee896f1c.err
new file mode 100644
index 0000000..cd096a9
--- /dev/null
+++ b/test/expected/test_regex101.sh_0fa3663a45aca6a328cb728872af7ed7ee896f1c.err
@@ -0,0 +1,2 @@
+✘ error: regex “std” of format “syslog_log” has not been pushed to regex101.com
+ = help: use the “push” subcommand to create the regex on regex101.com for easy editing
diff --git a/test/expected/test_regex101.sh_0fa3663a45aca6a328cb728872af7ed7ee896f1c.out b/test/expected/test_regex101.sh_0fa3663a45aca6a328cb728872af7ed7ee896f1c.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_0fa3663a45aca6a328cb728872af7ed7ee896f1c.out
diff --git a/test/expected/test_regex101.sh_182ae9244db314a953af2bee969726e381bc5a32.err b/test/expected/test_regex101.sh_182ae9244db314a953af2bee969726e381bc5a32.err
new file mode 100644
index 0000000..3b83cb4
--- /dev/null
+++ b/test/expected/test_regex101.sh_182ae9244db314a953af2bee969726e381bc5a32.err
@@ -0,0 +1,3 @@
+✘ error: unable to import: https://regex101.com/r/zpEnjV/1
+ reason: format file already exists: regex101-home/.lnav/formats/installed/unit_test_log.json
+ = help: delete the existing file to continue
diff --git a/test/expected/test_regex101.sh_182ae9244db314a953af2bee969726e381bc5a32.out b/test/expected/test_regex101.sh_182ae9244db314a953af2bee969726e381bc5a32.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_182ae9244db314a953af2bee969726e381bc5a32.out
diff --git a/test/expected/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.err b/test/expected/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.err
new file mode 100644
index 0000000..bbcd290
--- /dev/null
+++ b/test/expected/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.err
@@ -0,0 +1,3 @@
+⚠ warning: not deleting regex101 entry “zpEnjV”
+ reason: delete code is not known for this entry
+ = note: formats created by importing a regex101.com entry will not have a delete code
diff --git a/test/expected/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.out b/test/expected/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.out
new file mode 100644
index 0000000..bb52e20
--- /dev/null
+++ b/test/expected/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.out
@@ -0,0 +1 @@
+✔ deleted regex101 entry: zpEnjV
diff --git a/test/expected/test_regex101.sh_281af24141680330791db7f7c5fa70833ce08a6b.err b/test/expected/test_regex101.sh_281af24141680330791db7f7c5fa70833ce08a6b.err
new file mode 100644
index 0000000..286a1cf
--- /dev/null
+++ b/test/expected/test_regex101.sh_281af24141680330791db7f7c5fa70833ce08a6b.err
@@ -0,0 +1 @@
+✘ error: expecting a regex101.com URL to import
diff --git a/test/expected/test_regex101.sh_281af24141680330791db7f7c5fa70833ce08a6b.out b/test/expected/test_regex101.sh_281af24141680330791db7f7c5fa70833ce08a6b.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_281af24141680330791db7f7c5fa70833ce08a6b.out
diff --git a/test/expected/test_regex101.sh_35703b13990785632cca82123fb3883797959c0b.err b/test/expected/test_regex101.sh_35703b13990785632cca82123fb3883797959c0b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_35703b13990785632cca82123fb3883797959c0b.err
diff --git a/test/expected/test_regex101.sh_35703b13990785632cca82123fb3883797959c0b.out b/test/expected/test_regex101.sh_35703b13990785632cca82123fb3883797959c0b.out
new file mode 100644
index 0000000..a56e549
--- /dev/null
+++ b/test/expected/test_regex101.sh_35703b13990785632cca82123fb3883797959c0b.out
@@ -0,0 +1,4 @@
+✔ converted regex101 entry to format file: regex101-home/.lnav/formats/installed/unit_test_log.json
+ = note: the converted format may still have errors
+ = help: use the following command to patch the regex as more changes are made on regex101.com:
+ lnav -m format unit_test_log regex std regex101 pull
diff --git a/test/expected/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.err b/test/expected/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.err
diff --git a/test/expected/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.out b/test/expected/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.out
new file mode 100644
index 0000000..7f5397d
--- /dev/null
+++ b/test/expected/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.out
@@ -0,0 +1,10 @@
+{
+ "$schema": "https://lnav.org/schemas/format-v1.schema.json",
+ "unit_test_log": {
+ "regex": {
+ "std": {
+ "pattern": "\\[(?<timestamp>\\d+\\/\\d+\\/\\d+ \\d+:\\d+:\\d+) (?<jobserver>[\\w.]+) (?<workqueue>[\\w.]+) (?<processid>\\d+)\\] (?<body>.*)$"
+ }
+ }
+ }
+}
diff --git a/test/expected/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.err b/test/expected/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.err
new file mode 100644
index 0000000..32c87d4
--- /dev/null
+++ b/test/expected/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.err
@@ -0,0 +1,34 @@
+✘ error: invalid value “/unit_test_log/value/jobserver”
+ reason: no patterns have a capture named “jobserver”
+ = note: the following captures are available:
+
+ = help: values are populated from captures in patterns, so at least one pattern must have a capture with this value name
+✘ error: invalid value “/unit_test_log/value/processid”
+ reason: no patterns have a capture named “processid”
+ = note: the following captures are available:
+
+ = help: values are populated from captures in patterns, so at least one pattern must have a capture with this value name
+✘ error: invalid value “/unit_test_log/value/timestamp”
+ reason: no patterns have a capture named “timestamp”
+ = note: the following captures are available:
+
+ = help: values are populated from captures in patterns, so at least one pattern must have a capture with this value name
+✘ error: invalid value “/unit_test_log/value/workqueue”
+ reason: no patterns have a capture named “workqueue”
+ = note: the following captures are available:
+
+ = help: values are populated from captures in patterns, so at least one pattern must have a capture with this value name
+✘ error: invalid sample log message: "[03/22/2021 02:00:02 job1074.example.com db.db81.example_events 54026] {\"ELAPSED\":\"0.011\",\"LEVEL\":\"info\",\"MESSAGE\":\"finished in 0.011\\n\",\"PREFIX\":\"YFgyWQriCmsAAofJAAAAHg\",\"ROUTINGKEY\":\"EXAMPLE1366.Example.Events._Publish\"}"
+ reason: sample does not match any patterns
+ --> regex101-home/.lnav/formats/installed/unit_test_log.json:26
+ = note: the following shows how each pattern matched this sample:
+ [03/22/2021 02:00:02 job1074.example.com db.db81.example_events 54026] {"ELAPSED":"0.011","LEVEL":"info","MESSAGE":"finished in 0.011\n","PREFIX":"YFgyWQriCmsAAofJAAAAHg","ROUTINGKEY":"EXAMPLE1366.Example.Events._Publish"}
+ = note: std = “”
+
+✘ error: invalid sample log message: "[03/22/2021 02:00:02 job1074.example.com db.db81.example_events 54026] {\"ELAPSED\":\"0.011\",\"LEVEL\":\"info\",\"MESSAGE\":\"finished in 0.011\\n\",\"PREFIX\":\"YFgyWQriCmsAAofJAAAAHg\",\"ROUTINGKEY\":\"EXAMPLE1366.Example.Events._Publish\"}"
+ reason: sample does not match any patterns
+ --> regex101-home/.lnav/formats/installed/unit_test_log.json:30
+ = note: the following shows how each pattern matched this sample:
+ [03/22/2021 02:00:02 job1074.example.com db.db81.example_events 54026] {"ELAPSED":"0.011","LEVEL":"info","MESSAGE":"finished in 0.011\n","PREFIX":"YFgyWQriCmsAAofJAAAAHg","ROUTINGKEY":"EXAMPLE1366.Example.Events._Publish"}
+ = note: std = “”
+
diff --git a/test/expected/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.out b/test/expected/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.out
new file mode 100644
index 0000000..93cf6b4
--- /dev/null
+++ b/test/expected/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.out
@@ -0,0 +1,3 @@
+✔ format patch file written to: regex101-home/.lnav/formats/installed/unit_test_log.regex101-zpEnjV.json
+ = help: once the regex has been found to be working correctly, move the contents of the patch file to the original file at:
+ regex101-home/.lnav/formats/installed/unit_test_log.json
diff --git a/test/expected/test_regex101.sh_442cc58676590a3604d5c2183f5fe0a75c98351a.err b/test/expected/test_regex101.sh_442cc58676590a3604d5c2183f5fe0a75c98351a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_442cc58676590a3604d5c2183f5fe0a75c98351a.err
diff --git a/test/expected/test_regex101.sh_442cc58676590a3604d5c2183f5fe0a75c98351a.out b/test/expected/test_regex101.sh_442cc58676590a3604d5c2183f5fe0a75c98351a.out
new file mode 100644
index 0000000..7329b20
--- /dev/null
+++ b/test/expected/test_regex101.sh_442cc58676590a3604d5c2183f5fe0a75c98351a.out
@@ -0,0 +1,2 @@
+regex101-home/.lnav/formats/installed/unit_test_log.json
+regex101-home/.lnav/formats/installed/unit_test_log.regex101-zpEnjV.json
diff --git a/test/expected/test_regex101.sh_566fd88d216a44bc1c6e23f2d6f2d0caf99d42f9.err b/test/expected/test_regex101.sh_566fd88d216a44bc1c6e23f2d6f2d0caf99d42f9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_566fd88d216a44bc1c6e23f2d6f2d0caf99d42f9.err
diff --git a/test/expected/test_regex101.sh_566fd88d216a44bc1c6e23f2d6f2d0caf99d42f9.out b/test/expected/test_regex101.sh_566fd88d216a44bc1c6e23f2d6f2d0caf99d42f9.out
new file mode 100644
index 0000000..3fd83a6
--- /dev/null
+++ b/test/expected/test_regex101.sh_566fd88d216a44bc1c6e23f2d6f2d0caf99d42f9.out
@@ -0,0 +1 @@
+✔ no regex101 entries found
diff --git a/test/expected/test_regex101.sh_5f2f7ecb6ab9cbec4b41385b91bd038906b8a7b2.err b/test/expected/test_regex101.sh_5f2f7ecb6ab9cbec4b41385b91bd038906b8a7b2.err
new file mode 100644
index 0000000..6d4ee32
--- /dev/null
+++ b/test/expected/test_regex101.sh_5f2f7ecb6ab9cbec4b41385b91bd038906b8a7b2.err
@@ -0,0 +1,3 @@
+✘ error: cannot delete regex101 entry while patch file exists
+ = note: regex101-home/.lnav/formats/installed/unit_test_log.regex101-zpEnjV.json
+ = help: move the contents of the patch file to the main log format and then delete the file to continue
diff --git a/test/expected/test_regex101.sh_5f2f7ecb6ab9cbec4b41385b91bd038906b8a7b2.out b/test/expected/test_regex101.sh_5f2f7ecb6ab9cbec4b41385b91bd038906b8a7b2.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_5f2f7ecb6ab9cbec4b41385b91bd038906b8a7b2.out
diff --git a/test/expected/test_regex101.sh_629bde30483e0a6461076e9058f3a5eb81ae0425.err b/test/expected/test_regex101.sh_629bde30483e0a6461076e9058f3a5eb81ae0425.err
new file mode 100644
index 0000000..83dd591
--- /dev/null
+++ b/test/expected/test_regex101.sh_629bde30483e0a6461076e9058f3a5eb81ae0425.err
@@ -0,0 +1,3 @@
+✘ error: invalid regex “abc(def)” from “https://regex101.com/r/cvCJNP/1”
+ reason: unsupported regex flavor: “gm”
+ = help: the supported flavors are: pcre, pcre2
diff --git a/test/expected/test_regex101.sh_629bde30483e0a6461076e9058f3a5eb81ae0425.out b/test/expected/test_regex101.sh_629bde30483e0a6461076e9058f3a5eb81ae0425.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_629bde30483e0a6461076e9058f3a5eb81ae0425.out
diff --git a/test/expected/test_regex101.sh_630db454054cf92ec9bd0f4e3e83300047f583ff.err b/test/expected/test_regex101.sh_630db454054cf92ec9bd0f4e3e83300047f583ff.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_630db454054cf92ec9bd0f4e3e83300047f583ff.err
diff --git a/test/expected/test_regex101.sh_630db454054cf92ec9bd0f4e3e83300047f583ff.out b/test/expected/test_regex101.sh_630db454054cf92ec9bd0f4e3e83300047f583ff.out
new file mode 100644
index 0000000..8b0d55d
--- /dev/null
+++ b/test/expected/test_regex101.sh_630db454054cf92ec9bd0f4e3e83300047f583ff.out
@@ -0,0 +1,4 @@
+✔ converted regex101 entry to format file: regex101-home/.lnav/formats/installed/unit_test_log.regex101-hGiqBL.json
+ = note: the converted format may still have errors
+ = help: use the following command to patch the regex as more changes are made on regex101.com:
+ lnav -m format unit_test_log regex alt regex101 pull
diff --git a/test/expected/test_regex101.sh_771af6f3d29b8350542d5c6e98bdbf4c223cd531.err b/test/expected/test_regex101.sh_771af6f3d29b8350542d5c6e98bdbf4c223cd531.err
new file mode 100644
index 0000000..e533bd6
--- /dev/null
+++ b/test/expected/test_regex101.sh_771af6f3d29b8350542d5c6e98bdbf4c223cd531.err
@@ -0,0 +1 @@
+✘ error: unknown regex: non-existent
diff --git a/test/expected/test_regex101.sh_771af6f3d29b8350542d5c6e98bdbf4c223cd531.out b/test/expected/test_regex101.sh_771af6f3d29b8350542d5c6e98bdbf4c223cd531.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_771af6f3d29b8350542d5c6e98bdbf4c223cd531.out
diff --git a/test/expected/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.err b/test/expected/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.err
new file mode 100644
index 0000000..450b99b
--- /dev/null
+++ b/test/expected/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.err
@@ -0,0 +1,5 @@
+✘ error: expecting an operation to perform on the std regex using regex101.com
+ = help: the available subcommands are:
+ • push: create/update an entry for this regex on regex101.com
+ • pull: create a patch format file for this regular expression based on the entry in regex101.com
+ • delete: delete the entry regex101.com that was created by a push operation
diff --git a/test/expected/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.out b/test/expected/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.out
diff --git a/test/expected/test_regex101.sh_79ee3f5fe71ccec97b2619d8c1f74ca97ffd2243.err b/test/expected/test_regex101.sh_79ee3f5fe71ccec97b2619d8c1f74ca97ffd2243.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_79ee3f5fe71ccec97b2619d8c1f74ca97ffd2243.err
diff --git a/test/expected/test_regex101.sh_79ee3f5fe71ccec97b2619d8c1f74ca97ffd2243.out b/test/expected/test_regex101.sh_79ee3f5fe71ccec97b2619d8c1f74ca97ffd2243.out
new file mode 100644
index 0000000..4985cf6
--- /dev/null
+++ b/test/expected/test_regex101.sh_79ee3f5fe71ccec97b2619d8c1f74ca97ffd2243.out
@@ -0,0 +1,2 @@
+✔ local regex is in sync with entry “zpEnjV” on regex101.com
+ = help: make edits on “https://regex101.com/r/zpEnjV” and then run this command again to update the local values
diff --git a/test/expected/test_regex101.sh_7de76c174c58d67bf93e8f01d6d55ebb6a023f10.err b/test/expected/test_regex101.sh_7de76c174c58d67bf93e8f01d6d55ebb6a023f10.err
new file mode 100644
index 0000000..8b825ab
--- /dev/null
+++ b/test/expected/test_regex101.sh_7de76c174c58d67bf93e8f01d6d55ebb6a023f10.err
@@ -0,0 +1,3 @@
+✘ error: unknown regex: s
+ = note: did you mean one of the following?
+ std
diff --git a/test/expected/test_regex101.sh_7de76c174c58d67bf93e8f01d6d55ebb6a023f10.out b/test/expected/test_regex101.sh_7de76c174c58d67bf93e8f01d6d55ebb6a023f10.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_7de76c174c58d67bf93e8f01d6d55ebb6a023f10.out
diff --git a/test/expected/test_regex101.sh_8a43e6657d4f60e68d31eb8302542ca28e80d077.err b/test/expected/test_regex101.sh_8a43e6657d4f60e68d31eb8302542ca28e80d077.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_8a43e6657d4f60e68d31eb8302542ca28e80d077.err
diff --git a/test/expected/test_regex101.sh_8a43e6657d4f60e68d31eb8302542ca28e80d077.out b/test/expected/test_regex101.sh_8a43e6657d4f60e68d31eb8302542ca28e80d077.out
new file mode 100644
index 0000000..265ad46
--- /dev/null
+++ b/test/expected/test_regex101.sh_8a43e6657d4f60e68d31eb8302542ca28e80d077.out
@@ -0,0 +1,3 @@
+✔ the following regex101 entries were found:
+ format unit_test_log regex std regex101
+
diff --git a/test/expected/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.err b/test/expected/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.err
new file mode 100644
index 0000000..db47111
--- /dev/null
+++ b/test/expected/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.err
@@ -0,0 +1,3 @@
+✘ error: expecting an operation to perform on the std regular expression
+ = help: the available subcommands are:
+ • regex101: use regex101.com to edit this regular expression
diff --git a/test/expected/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.out b/test/expected/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.out
diff --git a/test/expected/test_regex101.sh_95c56a9d146ec9a7c2196559d316f928b2ae6ae9.err b/test/expected/test_regex101.sh_95c56a9d146ec9a7c2196559d316f928b2ae6ae9.err
new file mode 100644
index 0000000..2064fc4
--- /dev/null
+++ b/test/expected/test_regex101.sh_95c56a9d146ec9a7c2196559d316f928b2ae6ae9.err
@@ -0,0 +1,4 @@
+✘ error: unable to import: abc
+ reason: expecting a format name that matches the regular expression “^\w+$”
+ = note: “def-jkl”
+ ^ matched up to here
diff --git a/test/expected/test_regex101.sh_95c56a9d146ec9a7c2196559d316f928b2ae6ae9.out b/test/expected/test_regex101.sh_95c56a9d146ec9a7c2196559d316f928b2ae6ae9.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_95c56a9d146ec9a7c2196559d316f928b2ae6ae9.out
diff --git a/test/expected/test_regex101.sh_9d101ee29c45cdb8c0f117ad736c9a5dd5da5839.err b/test/expected/test_regex101.sh_9d101ee29c45cdb8c0f117ad736c9a5dd5da5839.err
new file mode 100644
index 0000000..ca5b424
--- /dev/null
+++ b/test/expected/test_regex101.sh_9d101ee29c45cdb8c0f117ad736c9a5dd5da5839.err
@@ -0,0 +1 @@
+✘ error: no regex101 entry for syslog_log/std
diff --git a/test/expected/test_regex101.sh_9d101ee29c45cdb8c0f117ad736c9a5dd5da5839.out b/test/expected/test_regex101.sh_9d101ee29c45cdb8c0f117ad736c9a5dd5da5839.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_9d101ee29c45cdb8c0f117ad736c9a5dd5da5839.out
diff --git a/test/expected/test_regex101.sh_c43e07df9b3068696fdc8759c7561135db981b38.err b/test/expected/test_regex101.sh_c43e07df9b3068696fdc8759c7561135db981b38.err
new file mode 100644
index 0000000..f705892
--- /dev/null
+++ b/test/expected/test_regex101.sh_c43e07df9b3068696fdc8759c7561135db981b38.err
@@ -0,0 +1,2 @@
+✘ error: unable to get entry “badregex123” on regex101.com
+ reason: received response code 400 content “{"error":"Invalid permalink id",}”
diff --git a/test/expected/test_regex101.sh_c43e07df9b3068696fdc8759c7561135db981b38.out b/test/expected/test_regex101.sh_c43e07df9b3068696fdc8759c7561135db981b38.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_c43e07df9b3068696fdc8759c7561135db981b38.out
diff --git a/test/expected/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.err b/test/expected/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.err
diff --git a/test/expected/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.out b/test/expected/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.out
new file mode 100644
index 0000000..c06f523
--- /dev/null
+++ b/test/expected/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.out
@@ -0,0 +1,34 @@
+{
+ "$schema": "https://lnav.org/schemas/format-v1.schema.json",
+ "unit_test_log": {
+ "description": "Format file generated from regex101 entry -- https://regex101.com/r/zpEnjV/2",
+ "regex": {
+ "std": {
+ "pattern": "\\[(?<timestamp>\\d+\\/\\d+\\/\\d+ \\d+:\\d+:\\d+) (?<jobserver>[\\w.]+) (?<workqueue>[\\w.]+) (?<processid>\\d+)\\] (?<body>.*)$"
+ }
+ },
+ "value": {
+ "jobserver": {
+ "kind": "string"
+ },
+ "processid": {
+ "kind": "string"
+ },
+ "timestamp": {
+ "kind": "string"
+ },
+ "workqueue": {
+ "kind": "string"
+ }
+ },
+ "sample": [
+ {
+ "line": "[03/22/2021 02:00:02 job1074.example.com db.db81.example_events 54026] {\"ELAPSED\":\"0.011\",\"LEVEL\":\"info\",\"MESSAGE\":\"finished in 0.011\\n\",\"PREFIX\":\"YFgyWQriCmsAAofJAAAAHg\",\"ROUTINGKEY\":\"EXAMPLE1366.Example.Events._Publish\"}"
+ },
+ {
+ "description": "sample 1",
+ "line": "[03/22/2021 02:00:02 job1074.example.com db.db81.example_events 54026] {\"ELAPSED\":\"0.011\",\"LEVEL\":\"info\",\"MESSAGE\":\"finished in 0.011\\n\",\"PREFIX\":\"YFgyWQriCmsAAofJAAAAHg\",\"ROUTINGKEY\":\"EXAMPLE1366.Example.Events._Publish\"}"
+ }
+ ]
+ }
+}
diff --git a/test/expected/test_regex101.sh_cf6c0a9f0f04e24ce1fae7a0a434830b14447f83.err b/test/expected/test_regex101.sh_cf6c0a9f0f04e24ce1fae7a0a434830b14447f83.err
new file mode 100644
index 0000000..9b187b7
--- /dev/null
+++ b/test/expected/test_regex101.sh_cf6c0a9f0f04e24ce1fae7a0a434830b14447f83.err
@@ -0,0 +1 @@
+✘ error: unknown format: non-existent
diff --git a/test/expected/test_regex101.sh_cf6c0a9f0f04e24ce1fae7a0a434830b14447f83.out b/test/expected/test_regex101.sh_cf6c0a9f0f04e24ce1fae7a0a434830b14447f83.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_cf6c0a9f0f04e24ce1fae7a0a434830b14447f83.out
diff --git a/test/expected/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.err b/test/expected/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.err
new file mode 100644
index 0000000..85a97ba
--- /dev/null
+++ b/test/expected/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.err
@@ -0,0 +1,7 @@
+✘ error: expecting an operation to perform on the std regex using regex101.com
+ = note: this regex is currently associated with the following regex101.com entry:
+ https://regex101.com/r/zpEnjV
+ = help: the available subcommands are:
+ • push: create/update an entry for this regex on regex101.com
+ • pull: create a patch format file for this regular expression based on the entry in regex101.com
+ • delete: delete the entry regex101.com that was created by a push operation
diff --git a/test/expected/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.out b/test/expected/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.out
diff --git a/test/expected/test_regex101.sh_f23e393dbf23d0d8e276e9b7610c7b74d79980f8.err b/test/expected/test_regex101.sh_f23e393dbf23d0d8e276e9b7610c7b74d79980f8.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_f23e393dbf23d0d8e276e9b7610c7b74d79980f8.err
diff --git a/test/expected/test_regex101.sh_f23e393dbf23d0d8e276e9b7610c7b74d79980f8.out b/test/expected/test_regex101.sh_f23e393dbf23d0d8e276e9b7610c7b74d79980f8.out
new file mode 100644
index 0000000..d37aaa6
--- /dev/null
+++ b/test/expected/test_regex101.sh_f23e393dbf23d0d8e276e9b7610c7b74d79980f8.out
@@ -0,0 +1,15 @@
+{
+ "$schema": "https://lnav.org/schemas/format-v1.schema.json",
+ "unit_test_log": {
+ "regex": {
+ "alt": {
+ "pattern": "^\\[(?<timestamp>\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3,6})?)Z?\\](?<body>.*)$"
+ }
+ },
+ "sample": [
+ {
+ "line": "[2021-05-21T21:58:57.022497Z]"
+ }
+ ]
+ }
+}
diff --git a/test/expected/test_regex101.sh_fc41b6ee90cbf038620151f16d164b361acf82dd.err b/test/expected/test_regex101.sh_fc41b6ee90cbf038620151f16d164b361acf82dd.err
new file mode 100644
index 0000000..494a387
--- /dev/null
+++ b/test/expected/test_regex101.sh_fc41b6ee90cbf038620151f16d164b361acf82dd.err
@@ -0,0 +1 @@
+✘ error: “bro” is an internal format that is not defined in a configuration file
diff --git a/test/expected/test_regex101.sh_fc41b6ee90cbf038620151f16d164b361acf82dd.out b/test/expected/test_regex101.sh_fc41b6ee90cbf038620151f16d164b361acf82dd.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_regex101.sh_fc41b6ee90cbf038620151f16d164b361acf82dd.out
diff --git a/test/expected/test_sessions.sh_0300a1391c33b1c45ddfa90198a6bd0a5404a77f.err b/test/expected/test_sessions.sh_0300a1391c33b1c45ddfa90198a6bd0a5404a77f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_0300a1391c33b1c45ddfa90198a6bd0a5404a77f.err
diff --git a/test/expected/test_sessions.sh_0300a1391c33b1c45ddfa90198a6bd0a5404a77f.out b/test/expected/test_sessions.sh_0300a1391c33b1c45ddfa90198a6bd0a5404a77f.out
new file mode 100644
index 0000000..bccea86
--- /dev/null
+++ b/test/expected/test_sessions.sh_0300a1391c33b1c45ddfa90198a6bd0a5404a77f.out
@@ -0,0 +1 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_sessions.sh_17b85654b929b2a8fc1705a170ced544783292fa.err b/test/expected/test_sessions.sh_17b85654b929b2a8fc1705a170ced544783292fa.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_17b85654b929b2a8fc1705a170ced544783292fa.err
diff --git a/test/expected/test_sessions.sh_17b85654b929b2a8fc1705a170ced544783292fa.out b/test/expected/test_sessions.sh_17b85654b929b2a8fc1705a170ced544783292fa.out
new file mode 100644
index 0000000..2140e81
--- /dev/null
+++ b/test/expected/test_sessions.sh_17b85654b929b2a8fc1705a170ced544783292fa.out
@@ -0,0 +1,3 @@
+⋮ - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+⋮ - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+⋮ - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_sessions.sh_345b0e66dab7b881397c4b38380da81092ab70dd.err b/test/expected/test_sessions.sh_345b0e66dab7b881397c4b38380da81092ab70dd.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_345b0e66dab7b881397c4b38380da81092ab70dd.err
diff --git a/test/expected/test_sessions.sh_345b0e66dab7b881397c4b38380da81092ab70dd.out b/test/expected/test_sessions.sh_345b0e66dab7b881397c4b38380da81092ab70dd.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_345b0e66dab7b881397c4b38380da81092ab70dd.out
diff --git a/test/expected/test_sessions.sh_430b9522ba1a37983138f3c4935cba91b781e415.err b/test/expected/test_sessions.sh_430b9522ba1a37983138f3c4935cba91b781e415.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_430b9522ba1a37983138f3c4935cba91b781e415.err
diff --git a/test/expected/test_sessions.sh_430b9522ba1a37983138f3c4935cba91b781e415.out b/test/expected/test_sessions.sh_430b9522ba1a37983138f3c4935cba91b781e415.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_430b9522ba1a37983138f3c4935cba91b781e415.out
diff --git a/test/expected/test_sessions.sh_4f13dd3858546b6e04a27e244159d355e368f2ae.err b/test/expected/test_sessions.sh_4f13dd3858546b6e04a27e244159d355e368f2ae.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_4f13dd3858546b6e04a27e244159d355e368f2ae.err
diff --git a/test/expected/test_sessions.sh_4f13dd3858546b6e04a27e244159d355e368f2ae.out b/test/expected/test_sessions.sh_4f13dd3858546b6e04a27e244159d355e368f2ae.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_4f13dd3858546b6e04a27e244159d355e368f2ae.out
diff --git a/test/expected/test_sessions.sh_68a89b56c5e7f7db620084cca1eb547cbb19a2c9.err b/test/expected/test_sessions.sh_68a89b56c5e7f7db620084cca1eb547cbb19a2c9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_68a89b56c5e7f7db620084cca1eb547cbb19a2c9.err
diff --git a/test/expected/test_sessions.sh_68a89b56c5e7f7db620084cca1eb547cbb19a2c9.out b/test/expected/test_sessions.sh_68a89b56c5e7f7db620084cca1eb547cbb19a2c9.out
new file mode 100644
index 0000000..d07a9c0
--- /dev/null
+++ b/test/expected/test_sessions.sh_68a89b56c5e7f7db620084cca1eb547cbb19a2c9.out
@@ -0,0 +1,4 @@
+log_line,log_part
+0,<NULL>
+1,middle
+2,middle
diff --git a/test/expected/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.err b/test/expected/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.err
diff --git a/test/expected/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.out b/test/expected/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.out
new file mode 100644
index 0000000..adef6fa
--- /dev/null
+++ b/test/expected/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.out
@@ -0,0 +1,36 @@
+#!lnav -Nf
+# This file is an export of an lnav session. You can type
+# '|/path/to/this/file' in lnav to execute this file and
+# restore the state of the session.
+
+;SELECT raise_error('This session export was made with a newer version of lnav, please upgrade to ' || '0.11.1' || ' or later')
+ WHERE lnav_version() < '0.11.1' COLLATE naturalcase
+
+# The files loaded into the session were:
+
+
+# Set this environment variable to override this value or edit this script.
+;INSERT OR IGNORE INTO environ (name, value) VALUES ('LOG_DIR_0', '{test_dir}')
+:open $LOG_DIR_0/support-dump/logfile_access_log.0
+:open $LOG_DIR_0/support-dump/logfile_access_log.1
+
+:rebuild
+
+
+# The following SQL statements will restore the bookmarks,
+# comments, and tags that were added in the session.
+
+;SELECT total_changes() AS before_mark_changes
+;UPDATE all_logs SET log_mark = 1, log_comment = NULL, log_tags = NULL WHERE log_time_msecs = 1248130769000 AND log_format = 'access_log' AND log_line_hash = 'v1:b05c1bdfe75cde41e151c89087e31951'
+
+;SELECT 1 - (total_changes() - $before_mark_changes) AS failed_mark_changes
+;SELECT echoln(printf('%sERROR%s: failed to restore %d bookmarks',
+ $ansi_red, $ansi_norm, $failed_mark_changes))
+ WHERE $failed_mark_changes != 0
+
+
+# The following commands will restore the state of the LOG view.
+
+:switch-to-view log
+:hide-file */support-dump/logfile_access_log.1
+:goto 1
diff --git a/test/expected/test_sessions.sh_858fd0081ed9c46dd81e2f81f1090756f2463558.err b/test/expected/test_sessions.sh_858fd0081ed9c46dd81e2f81f1090756f2463558.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_858fd0081ed9c46dd81e2f81f1090756f2463558.err
diff --git a/test/expected/test_sessions.sh_858fd0081ed9c46dd81e2f81f1090756f2463558.out b/test/expected/test_sessions.sh_858fd0081ed9c46dd81e2f81f1090756f2463558.out
new file mode 100644
index 0000000..ba6bfe9
--- /dev/null
+++ b/test/expected/test_sessions.sh_858fd0081ed9c46dd81e2f81f1090756f2463558.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [01/Jan/2010:00:00:00 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [01/Jan/2010:00:00:03 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [01/Jan/2010:00:00:03 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.err b/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.err
diff --git a/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out b/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out
new file mode 100644
index 0000000..a1e2e6f
--- /dev/null
+++ b/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out
@@ -0,0 +1,33 @@
+#!lnav -Nf
+# This file is an export of an lnav session. You can type
+# '|/path/to/this/file' in lnav to execute this file and
+# restore the state of the session.
+
+;SELECT raise_error('This session export was made with a newer version of lnav, please upgrade to ' || '0.11.0' || ' or later')
+ WHERE lnav_version() < '0.11.0' COLLATE naturalcase
+
+# The files loaded into the session were:
+
+
+;INSERT OR IGNORE INTO environ (name, value) VALUES ('LOG_DIR_0', '{top_srcdir_parent}')
+:open $LOG_DIR_0/lnav/test/logfile_access_log.0
+
+:rebuild
+
+
+# The following SQL statements will restore the bookmarks,
+# comments, and tags that were added in the session.
+
+;SELECT total_changes() AS before_mark_changes
+;UPDATE all_logs SET log_mark = 1, log_comment = NULL, log_tags = NULL WHERE log_time_msecs = 1248130769000 AND log_format = 'access_log' AND log_line_hash = 'v1:b05c1bdfe75cde41e151c89087e31951'
+
+;SELECT 1 - (total_changes() - $before_mark_changes) AS failed_mark_changes
+;SELECT echoln(printf('%sERROR%s: failed to restore %d bookmarks',
+ $ansi_red, $ansi_norm, $failed_mark_changes))
+ WHERE $failed_mark_changes != 0
+
+
+# The following commands will restore the state of the LOG view.
+
+:switch-to-view log
+:goto 1
diff --git a/test/expected/test_sessions.sh_903b41c950f5f90d7786d7a09bb6e2f217654b15.err b/test/expected/test_sessions.sh_903b41c950f5f90d7786d7a09bb6e2f217654b15.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_903b41c950f5f90d7786d7a09bb6e2f217654b15.err
diff --git a/test/expected/test_sessions.sh_903b41c950f5f90d7786d7a09bb6e2f217654b15.out b/test/expected/test_sessions.sh_903b41c950f5f90d7786d7a09bb6e2f217654b15.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_903b41c950f5f90d7786d7a09bb6e2f217654b15.out
diff --git a/test/expected/test_sessions.sh_92a98a3e4e3a10bf1f2371d21a8282c5d3d4baa5.err b/test/expected/test_sessions.sh_92a98a3e4e3a10bf1f2371d21a8282c5d3d4baa5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_92a98a3e4e3a10bf1f2371d21a8282c5d3d4baa5.err
diff --git a/test/expected/test_sessions.sh_92a98a3e4e3a10bf1f2371d21a8282c5d3d4baa5.out b/test/expected/test_sessions.sh_92a98a3e4e3a10bf1f2371d21a8282c5d3d4baa5.out
new file mode 100644
index 0000000..a9dd3d0
--- /dev/null
+++ b/test/expected/test_sessions.sh_92a98a3e4e3a10bf1f2371d21a8282c5d3d4baa5.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.err b/test/expected/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.err
diff --git a/test/expected/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.out b/test/expected/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.out
new file mode 100644
index 0000000..3c84ede
--- /dev/null
+++ b/test/expected/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.out
@@ -0,0 +1,11 @@
+view_name filter_id enabled type language pattern
+log 1 1 out regex blah
+ name search
+log foobar
+text
+help
+histogram
+db
+schema
+pretty
+spectro
diff --git a/test/expected/test_sessions.sh_a92822d121a836140a401fd71535dc4a7a8d5b48.err b/test/expected/test_sessions.sh_a92822d121a836140a401fd71535dc4a7a8d5b48.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_a92822d121a836140a401fd71535dc4a7a8d5b48.err
diff --git a/test/expected/test_sessions.sh_a92822d121a836140a401fd71535dc4a7a8d5b48.out b/test/expected/test_sessions.sh_a92822d121a836140a401fd71535dc4a7a8d5b48.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_a92822d121a836140a401fd71535dc4a7a8d5b48.out
diff --git a/test/expected/test_sessions.sh_b3d71a87fcb4e3487f71ccad8c6ce681db220572.err b/test/expected/test_sessions.sh_b3d71a87fcb4e3487f71ccad8c6ce681db220572.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_b3d71a87fcb4e3487f71ccad8c6ce681db220572.err
diff --git a/test/expected/test_sessions.sh_b3d71a87fcb4e3487f71ccad8c6ce681db220572.out b/test/expected/test_sessions.sh_b3d71a87fcb4e3487f71ccad8c6ce681db220572.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_b3d71a87fcb4e3487f71ccad8c6ce681db220572.out
diff --git a/test/expected/test_sessions.sh_b932b33dd087b94d4306dd179c5d4f9ddd394960.err b/test/expected/test_sessions.sh_b932b33dd087b94d4306dd179c5d4f9ddd394960.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_b932b33dd087b94d4306dd179c5d4f9ddd394960.err
diff --git a/test/expected/test_sessions.sh_b932b33dd087b94d4306dd179c5d4f9ddd394960.out b/test/expected/test_sessions.sh_b932b33dd087b94d4306dd179c5d4f9ddd394960.out
new file mode 100644
index 0000000..ad2b37e
--- /dev/null
+++ b/test/expected/test_sessions.sh_b932b33dd087b94d4306dd179c5d4f9ddd394960.out
@@ -0,0 +1 @@
+10.112.81.15 - - [15/Feb/2013:06:00:31 +0000] "-" 400 0 "-" "-"
diff --git a/test/expected/test_sessions.sh_ddf45811e9906de9f3930fe802ac7b2cc6e48106.err b/test/expected/test_sessions.sh_ddf45811e9906de9f3930fe802ac7b2cc6e48106.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_ddf45811e9906de9f3930fe802ac7b2cc6e48106.err
diff --git a/test/expected/test_sessions.sh_ddf45811e9906de9f3930fe802ac7b2cc6e48106.out b/test/expected/test_sessions.sh_ddf45811e9906de9f3930fe802ac7b2cc6e48106.out
new file mode 100644
index 0000000..ad2b37e
--- /dev/null
+++ b/test/expected/test_sessions.sh_ddf45811e9906de9f3930fe802ac7b2cc6e48106.out
@@ -0,0 +1 @@
+10.112.81.15 - - [15/Feb/2013:06:00:31 +0000] "-" 400 0 "-" "-"
diff --git a/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.err b/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.err
diff --git a/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.out b/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.out
new file mode 100644
index 0000000..0473e9d
--- /dev/null
+++ b/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.out
@@ -0,0 +1,33 @@
+#!lnav -Nf
+# This file is an export of an lnav session. You can type
+# '|/path/to/this/file' in lnav to execute this file and
+# restore the state of the session.
+
+;SELECT raise_error('This session export was made with a newer version of lnav, please upgrade to ' || '0.11.0' || ' or later')
+ WHERE lnav_version() < '0.11.0' COLLATE naturalcase
+
+# The files loaded into the session were:
+
+
+;INSERT OR IGNORE INTO environ (name, value) VALUES ('LOG_DIR_0', '{test_dir}')
+:open $LOG_DIR_0/support-dump/logfile_access_log.0
+
+:rebuild
+
+
+# The following SQL statements will restore the bookmarks,
+# comments, and tags that were added in the session.
+
+;SELECT total_changes() AS before_mark_changes
+;UPDATE all_logs SET log_mark = 1, log_comment = NULL, log_tags = NULL WHERE log_time_msecs = 1248130769000 AND log_format = 'access_log' AND log_line_hash = 'v1:b05c1bdfe75cde41e151c89087e31951'
+
+;SELECT 1 - (total_changes() - $before_mark_changes) AS failed_mark_changes
+;SELECT echoln(printf('%sERROR%s: failed to restore %d bookmarks',
+ $ansi_red, $ansi_norm, $failed_mark_changes))
+ WHERE $failed_mark_changes != 0
+
+
+# The following commands will restore the state of the LOG view.
+
+:switch-to-view log
+:goto 1
diff --git a/test/expected/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.err b/test/expected/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.err
diff --git a/test/expected/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.out b/test/expected/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.out
new file mode 100644
index 0000000..fd072bc
--- /dev/null
+++ b/test/expected/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.out
@@ -0,0 +1,7 @@
+ ~ foo
+til ^
+wsp ^
+eval -- ../test foo
+split:
+ 0 -- ../test
+ 1 -- foo
diff --git a/test/expected/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.err b/test/expected/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.err
diff --git a/test/expected/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.out b/test/expected/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.out
new file mode 100644
index 0000000..b7ba9e8
--- /dev/null
+++ b/test/expected/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.out
@@ -0,0 +1,7 @@
+ ~nonexistent/bar baz
+til ^----------^
+wsp ^
+eval -- ~nonexistent/bar baz
+split:
+ 0 -- ~nonexistent/bar
+ 1 -- baz
diff --git a/test/expected/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.err b/test/expected/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.err
diff --git a/test/expected/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.out b/test/expected/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.out
new file mode 100644
index 0000000..85cca78
--- /dev/null
+++ b/test/expected/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.out
@@ -0,0 +1,2 @@
+ \
+err ^
diff --git a/test/expected/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.err b/test/expected/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.err
diff --git a/test/expected/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.out b/test/expected/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.out
new file mode 100644
index 0000000..f677b17
--- /dev/null
+++ b/test/expected/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.out
@@ -0,0 +1,5 @@
+ ${FOO}
+qrf ^----^
+eval -- bar
+split:
+ 0 -- bar
diff --git a/test/expected/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.err b/test/expected/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.err
diff --git a/test/expected/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.out b/test/expected/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.out
new file mode 100644
index 0000000..630eb1c
--- /dev/null
+++ b/test/expected/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.out
@@ -0,0 +1,7 @@
+ "abc ${DEF} 123"
+dst ^
+qrf ^----^
+den ^
+eval -- "abc xyz 123"
+split:
+ 0 -- abc xyz 123
diff --git a/test/expected/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.err b/test/expected/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.err
diff --git a/test/expected/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.out b/test/expected/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.out
new file mode 100644
index 0000000..759e75b
--- /dev/null
+++ b/test/expected/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.out
@@ -0,0 +1,6 @@
+ 'abc $DEF 123'
+sst ^
+sen ^
+eval -- 'abc $DEF 123'
+split:
+ 0 -- abc $DEF 123
diff --git a/test/expected/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.err b/test/expected/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.err
diff --git a/test/expected/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.out b/test/expected/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.out
new file mode 100644
index 0000000..2cbee1a
--- /dev/null
+++ b/test/expected/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.out
@@ -0,0 +1,7 @@
+ "abc $DEF 123"
+dst ^
+ref ^--^
+den ^
+eval -- "abc xyz 123"
+split:
+ 0 -- abc xyz 123
diff --git a/test/expected/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.err b/test/expected/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.err
diff --git a/test/expected/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.out b/test/expected/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.out
new file mode 100644
index 0000000..9a2b2a7
--- /dev/null
+++ b/test/expected/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.out
@@ -0,0 +1,6 @@
+ "def"
+dst ^
+den ^
+eval -- "def"
+split:
+ 0 -- def
diff --git a/test/expected/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.err b/test/expected/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.err
diff --git a/test/expected/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.out b/test/expected/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.out
new file mode 100644
index 0000000..30a7791
--- /dev/null
+++ b/test/expected/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.out
@@ -0,0 +1,5 @@
+ $FOO
+ref ^--^
+eval -- bar
+split:
+ 0 -- bar
diff --git a/test/expected/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.err b/test/expected/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.err
diff --git a/test/expected/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.out b/test/expected/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.out
new file mode 100644
index 0000000..a2ae7ff
--- /dev/null
+++ b/test/expected/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.out
@@ -0,0 +1,6 @@
+ 'abc'
+sst ^
+sen ^
+eval -- 'abc'
+split:
+ 0 -- abc
diff --git a/test/expected/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.err b/test/expected/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.err
diff --git a/test/expected/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.out b/test/expected/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.out
new file mode 100644
index 0000000..def9d5c
--- /dev/null
+++ b/test/expected/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.out
@@ -0,0 +1,9 @@
+ abc $DEF 123
+wsp ^
+ref ^--^
+wsp ^^
+eval -- abc xyz 123
+split:
+ 0 -- abc
+ 1 -- xyz
+ 2 -- 123
diff --git a/test/expected/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.err b/test/expected/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.err
diff --git a/test/expected/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.out b/test/expected/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.out
new file mode 100644
index 0000000..9b84999
--- /dev/null
+++ b/test/expected/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.out
@@ -0,0 +1,6 @@
+ '"'
+sst ^
+sen ^
+eval -- '"'
+split:
+ 0 -- "
diff --git a/test/expected/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.err b/test/expected/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.err
diff --git a/test/expected/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.out b/test/expected/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.out
new file mode 100644
index 0000000..a668d4d
--- /dev/null
+++ b/test/expected/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.out
@@ -0,0 +1,6 @@
+ "'"
+dst ^
+den ^
+eval -- "'"
+split:
+ 0 -- '
diff --git a/test/expected/test_sql.sh_02def66745b063518473df862987747909f56ccc.err b/test/expected/test_sql.sh_02def66745b063518473df862987747909f56ccc.err
new file mode 100644
index 0000000..8b97c72
--- /dev/null
+++ b/test/expected/test_sql.sh_02def66745b063518473df862987747909f56ccc.err
@@ -0,0 +1,4 @@
+✘ error: failed to compile SQL statement
+ reason: no such table: nonexistent_table
+ --> command-option:1
+ | select * from nonexistent_table 
diff --git a/test/expected/test_sql.sh_02def66745b063518473df862987747909f56ccc.out b/test/expected/test_sql.sh_02def66745b063518473df862987747909f56ccc.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_02def66745b063518473df862987747909f56ccc.out
diff --git a/test/expected/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.err b/test/expected/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.err
diff --git a/test/expected/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.out b/test/expected/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.out
new file mode 100644
index 0000000..386f1e3
--- /dev/null
+++ b/test/expected/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.out
@@ -0,0 +1,2 @@
+ lnav_top_file() 
+{test_dir}/logfile_access_log.0
diff --git a/test/expected/test_sql.sh_0d46ee142f80f262c8c14a22751571cc567df525.err b/test/expected/test_sql.sh_0d46ee142f80f262c8c14a22751571cc567df525.err
new file mode 100644
index 0000000..0b7649a
--- /dev/null
+++ b/test/expected/test_sql.sh_0d46ee142f80f262c8c14a22751571cc567df525.err
@@ -0,0 +1,4 @@
+✘ error: failed to compile SQL statement
+ reason: the stop parameter is required
+ --> command-option:1
+ | SELECT * FROM generate_series(1) 
diff --git a/test/expected/test_sql.sh_0d46ee142f80f262c8c14a22751571cc567df525.out b/test/expected/test_sql.sh_0d46ee142f80f262c8c14a22751571cc567df525.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_0d46ee142f80f262c8c14a22751571cc567df525.out
diff --git a/test/expected/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.err b/test/expected/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.err
diff --git a/test/expected/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.out b/test/expected/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.out
new file mode 100644
index 0000000..4acb940
--- /dev/null
+++ b/test/expected/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.out
@@ -0,0 +1,2 @@
+log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters  c_ip cs_bytes cs_method cs_uri_query  cs_uri_stem cs_username cs_vars cs_version s_app s_core s_pid s_req s_runtime s_switches s_worker_reqs sc_bytes sc_header_bytes sc_headers sc_status 
+ 0  <NULL> 2016-03-13 22:49:12.000  0 info   0  <NULL>  <NULL>  <NULL> 127.0.0.1  696 POST   <NULL> /update_metrics     38 HTTP/1.1  0   3  88185  1  0.129  1  1  47  378  9    200 
diff --git a/test/expected/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.err b/test/expected/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.err
diff --git a/test/expected/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.out b/test/expected/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.out
new file mode 100644
index 0000000..df0e6d7
--- /dev/null
+++ b/test/expected/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.out
@@ -0,0 +1,3 @@
+id first_name last_name age 
+ 0 Phil  Myman   30 
+ 1 Lem  Hewitt   35
diff --git a/test/expected/test_sql.sh_2532083f215ed44630621f18df3dd7b77c06ae10.err b/test/expected/test_sql.sh_2532083f215ed44630621f18df3dd7b77c06ae10.err
new file mode 100644
index 0000000..b57e6bc
--- /dev/null
+++ b/test/expected/test_sql.sh_2532083f215ed44630621f18df3dd7b77c06ae10.err
@@ -0,0 +1,10 @@
+✘ error: “bad(” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> pattern
+ | bad( 
+ |  ^ missing closing parenthesis 
+ --> command-option:1
+ | :create-search-table search_test1 bad( 
+ = help: :create-search-table table-name [pattern]
+ ══════════════════════════════════════════════════════════════════════
+ Create an SQL table based on a regex search
diff --git a/test/expected/test_sql.sh_2532083f215ed44630621f18df3dd7b77c06ae10.out b/test/expected/test_sql.sh_2532083f215ed44630621f18df3dd7b77c06ae10.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_2532083f215ed44630621f18df3dd7b77c06ae10.out
diff --git a/test/expected/test_sql.sh_26c0d94d7837792144f2d0f866fb3c12a0bd410d.err b/test/expected/test_sql.sh_26c0d94d7837792144f2d0f866fb3c12a0bd410d.err
new file mode 100644
index 0000000..b5fba56
--- /dev/null
+++ b/test/expected/test_sql.sh_26c0d94d7837792144f2d0f866fb3c12a0bd410d.err
@@ -0,0 +1,6 @@
+✘ error: Cannot generate spectrogram for database results
+ reason: No “log_time” column found in the result set
+ --> command-option:2
+ | :spectrogram sc_bytes 
+ = note: An ascending “log_time” column is needed to render a spectrogram
+ = help: Include a “log_time” column in your statement. Use an AS directive to alias a computed timestamp
diff --git a/test/expected/test_sql.sh_26c0d94d7837792144f2d0f866fb3c12a0bd410d.out b/test/expected/test_sql.sh_26c0d94d7837792144f2d0f866fb3c12a0bd410d.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_26c0d94d7837792144f2d0f866fb3c12a0bd410d.out
diff --git a/test/expected/test_sql.sh_2959f0c70fca61a07c6c772f193e73022f7794f1.err b/test/expected/test_sql.sh_2959f0c70fca61a07c6c772f193e73022f7794f1.err
new file mode 100644
index 0000000..cf33b67
--- /dev/null
+++ b/test/expected/test_sql.sh_2959f0c70fca61a07c6c772f193e73022f7794f1.err
@@ -0,0 +1,4 @@
+✘ error: failed to compile SQL statement
+ reason: not authorized
+ --> command-option:1
+ | attach database '/tmp/memdb' as 'db' 
diff --git a/test/expected/test_sql.sh_2959f0c70fca61a07c6c772f193e73022f7794f1.out b/test/expected/test_sql.sh_2959f0c70fca61a07c6c772f193e73022f7794f1.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_2959f0c70fca61a07c6c772f193e73022f7794f1.out
diff --git a/test/expected/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.err b/test/expected/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.err
new file mode 100644
index 0000000..bc74c2d
--- /dev/null
+++ b/test/expected/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.err
@@ -0,0 +1,4 @@
+✘ error: call to raise_error(msg) failed
+ reason: oops!
+ --> command-option:1
+ | ;SELECT raise_error('oops!') 
diff --git a/test/expected/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.out b/test/expected/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.out
diff --git a/test/expected/test_sql.sh_2cc8a92c6eb73741080b187a2670d309b8171c90.err b/test/expected/test_sql.sh_2cc8a92c6eb73741080b187a2670d309b8171c90.err
new file mode 100644
index 0000000..f68fcf0
--- /dev/null
+++ b/test/expected/test_sql.sh_2cc8a92c6eb73741080b187a2670d309b8171c90.err
@@ -0,0 +1,4 @@
+✘ error: failed to compile SQL statement
+ reason: not authorized
+ --> command-option:1
+ | attach database 'simple-db.db' as 'db' 
diff --git a/test/expected/test_sql.sh_2cc8a92c6eb73741080b187a2670d309b8171c90.out b/test/expected/test_sql.sh_2cc8a92c6eb73741080b187a2670d309b8171c90.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_2cc8a92c6eb73741080b187a2670d309b8171c90.out
diff --git a/test/expected/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.err b/test/expected/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.err
diff --git a/test/expected/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.out b/test/expected/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.out
new file mode 100644
index 0000000..df0e6d7
--- /dev/null
+++ b/test/expected/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.out
@@ -0,0 +1,3 @@
+id first_name last_name age 
+ 0 Phil  Myman   30 
+ 1 Lem  Hewitt   35
diff --git a/test/expected/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.err b/test/expected/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.err
diff --git a/test/expected/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.out b/test/expected/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.out
new file mode 100644
index 0000000..5118721
--- /dev/null
+++ b/test/expected/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.out
@@ -0,0 +1,2 @@
+ replicate('foobar', 120) 
+foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar⋯oobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar
diff --git a/test/expected/test_sql.sh_3d77a2092192caf98e141a6039e886ede836f044.err b/test/expected/test_sql.sh_3d77a2092192caf98e141a6039e886ede836f044.err
new file mode 100644
index 0000000..73441f1
--- /dev/null
+++ b/test/expected/test_sql.sh_3d77a2092192caf98e141a6039e886ede836f044.err
@@ -0,0 +1,4 @@
+✘ error: failed to compile SQL statement
+ reason: not authorized
+ --> command-option:1
+ | attach database ':memdb:' as 'db' 
diff --git a/test/expected/test_sql.sh_3d77a2092192caf98e141a6039e886ede836f044.out b/test/expected/test_sql.sh_3d77a2092192caf98e141a6039e886ede836f044.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_3d77a2092192caf98e141a6039e886ede836f044.out
diff --git a/test/expected/test_sql.sh_4090f96ea11a344c1e2939211da778992dab47d8.err b/test/expected/test_sql.sh_4090f96ea11a344c1e2939211da778992dab47d8.err
new file mode 100644
index 0000000..57d160d
--- /dev/null
+++ b/test/expected/test_sql.sh_4090f96ea11a344c1e2939211da778992dab47d8.err
@@ -0,0 +1,5 @@
+✘ error: Cannot generate spectrogram for database results
+ reason: unknown column -- “sc_byes”
+ --> command-option:2
+ | :spectrogram sc_byes 
+ = help: Expecting a numeric column to visualize
diff --git a/test/expected/test_sql.sh_4090f96ea11a344c1e2939211da778992dab47d8.out b/test/expected/test_sql.sh_4090f96ea11a344c1e2939211da778992dab47d8.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_4090f96ea11a344c1e2939211da778992dab47d8.out
diff --git a/test/expected/test_sql.sh_4629b626c65a85d7a5595571e195b67afca272ba.err b/test/expected/test_sql.sh_4629b626c65a85d7a5595571e195b67afca272ba.err
new file mode 100644
index 0000000..0c1c059
--- /dev/null
+++ b/test/expected/test_sql.sh_4629b626c65a85d7a5595571e195b67afca272ba.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: A non-empty name and value must be provided when inserting an environment variable
+ --> command-option:1
+ | ;INSERT INTO environ (name) VALUES (null)
diff --git a/test/expected/test_sql.sh_4629b626c65a85d7a5595571e195b67afca272ba.out b/test/expected/test_sql.sh_4629b626c65a85d7a5595571e195b67afca272ba.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_4629b626c65a85d7a5595571e195b67afca272ba.out
diff --git a/test/expected/test_sql.sh_50c0b2c93b646b848a017764bde8a4282c556e2d.err b/test/expected/test_sql.sh_50c0b2c93b646b848a017764bde8a4282c556e2d.err
new file mode 100644
index 0000000..89f156f
--- /dev/null
+++ b/test/expected/test_sql.sh_50c0b2c93b646b848a017764bde8a4282c556e2d.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: An environment variable with the name 'SQL_ENV_VALUE' already exists
+ --> command-option:1
+ | ;INSERT INTO environ (name, value) VALUES ("SQL_ENV_VALUE", "bar")
diff --git a/test/expected/test_sql.sh_50c0b2c93b646b848a017764bde8a4282c556e2d.out b/test/expected/test_sql.sh_50c0b2c93b646b848a017764bde8a4282c556e2d.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_50c0b2c93b646b848a017764bde8a4282c556e2d.out
diff --git a/test/expected/test_sql.sh_528e48a03cdfa7cfbe263a6e22a65606247a8a95.err b/test/expected/test_sql.sh_528e48a03cdfa7cfbe263a6e22a65606247a8a95.err
new file mode 100644
index 0000000..b15f6ce
--- /dev/null
+++ b/test/expected/test_sql.sh_528e48a03cdfa7cfbe263a6e22a65606247a8a95.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: Environment variable names cannot contain an equals sign (=)
+ --> command-option:1
+ | ;INSERT INTO environ (name, value) VALUES ("foo=bar", "bar")
diff --git a/test/expected/test_sql.sh_528e48a03cdfa7cfbe263a6e22a65606247a8a95.out b/test/expected/test_sql.sh_528e48a03cdfa7cfbe263a6e22a65606247a8a95.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_528e48a03cdfa7cfbe263a6e22a65606247a8a95.out
diff --git a/test/expected/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.err b/test/expected/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.err
diff --git a/test/expected/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.out b/test/expected/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.out
new file mode 100644
index 0000000..dbb2a2f
--- /dev/null
+++ b/test/expected/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.out
@@ -0,0 +1,2 @@
+log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,log_hostname,log_msgid,log_pid,log_pri,log_procname,log_struct,log_syslog_tag,syslog_version,col_0,TTY,PWD,USER,COMMAND
+0,<NULL>,2007-11-03 09:47:02.000,0,info,0,<NULL>,<NULL>,[1],veridian,<NULL>,<NULL>,<NULL>,sudo,<NULL>,sudo,<NULL>,timstack,pts/6,/auto/wstimstack/rpms/lbuild/test,root,/usr/bin/tail /var/log/messages
diff --git a/test/expected/test_sql.sh_56047c9470e515bc3e3709354c01e5d50462cde7.err b/test/expected/test_sql.sh_56047c9470e515bc3e3709354c01e5d50462cde7.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_56047c9470e515bc3e3709354c01e5d50462cde7.err
diff --git a/test/expected/test_sql.sh_56047c9470e515bc3e3709354c01e5d50462cde7.out b/test/expected/test_sql.sh_56047c9470e515bc3e3709354c01e5d50462cde7.out
new file mode 100644
index 0000000..fdb6294
--- /dev/null
+++ b/test/expected/test_sql.sh_56047c9470e515bc3e3709354c01e5d50462cde7.out
@@ -0,0 +1,2 @@
+log_top_line() 
+ <NULL>
diff --git a/test/expected/test_sql.sh_57427f3c4b4ec785ffff7c5802c10db0d3e547cf.err b/test/expected/test_sql.sh_57427f3c4b4ec785ffff7c5802c10db0d3e547cf.err
new file mode 100644
index 0000000..7c11869
--- /dev/null
+++ b/test/expected/test_sql.sh_57427f3c4b4ec785ffff7c5802c10db0d3e547cf.err
@@ -0,0 +1,5 @@
+✘ error: Cannot generate spectrogram for database results
+ reason: “c_ip” is not a numeric column
+ --> command-option:2
+ | :spectrogram c_ip 
+ = help: Only numeric columns can be visualized
diff --git a/test/expected/test_sql.sh_57427f3c4b4ec785ffff7c5802c10db0d3e547cf.out b/test/expected/test_sql.sh_57427f3c4b4ec785ffff7c5802c10db0d3e547cf.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_57427f3c4b4ec785ffff7c5802c10db0d3e547cf.out
diff --git a/test/expected/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.err b/test/expected/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.err
new file mode 100644
index 0000000..600e19d
--- /dev/null
+++ b/test/expected/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.err
@@ -0,0 +1,7 @@
+✘ error: call to raise_error(msg) failed
+ reason: no data was redirected to lnav's standard-input
+ --> command-option:1
+ | |rename-stdin foo 
+ --> ../test/.lnav/formats/default/rename-stdin.lnav:7
+ | ;SELECT raise_error('no data was redirected to lnav''s standard-input') 
+ |  WHERE (SELECT count(1) FROM lnav_file WHERE filepath='stdin') = 0
diff --git a/test/expected/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.out b/test/expected/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.out
diff --git a/test/expected/test_sql.sh_5801770f3e0ecc1d62c7a97116d6da1981bbc7bd.err b/test/expected/test_sql.sh_5801770f3e0ecc1d62c7a97116d6da1981bbc7bd.err
new file mode 100644
index 0000000..3ced6be
--- /dev/null
+++ b/test/expected/test_sql.sh_5801770f3e0ecc1d62c7a97116d6da1981bbc7bd.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: A non-empty name and value must be provided when inserting an environment variable
+ --> command-option:1
+ | ;INSERT INTO environ (name, value) VALUES (null, null)
diff --git a/test/expected/test_sql.sh_5801770f3e0ecc1d62c7a97116d6da1981bbc7bd.out b/test/expected/test_sql.sh_5801770f3e0ecc1d62c7a97116d6da1981bbc7bd.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_5801770f3e0ecc1d62c7a97116d6da1981bbc7bd.out
diff --git a/test/expected/test_sql.sh_5fe26fe4fc22f23f8dbe3a6aab394602886f2971.err b/test/expected/test_sql.sh_5fe26fe4fc22f23f8dbe3a6aab394602886f2971.err
new file mode 100644
index 0000000..dfe4674
--- /dev/null
+++ b/test/expected/test_sql.sh_5fe26fe4fc22f23f8dbe3a6aab394602886f2971.err
@@ -0,0 +1,5 @@
+✘ error: invalid SQL statement
+ reason: using a question-mark (?) for bound variables is not supported, only named bound parameters are supported
+ --> command-option:1
+ | ;SELECT 1 = ? 
+ = help: named parameters start with a dollar-sign ($) or colon (:) followed by the variable name
diff --git a/test/expected/test_sql.sh_5fe26fe4fc22f23f8dbe3a6aab394602886f2971.out b/test/expected/test_sql.sh_5fe26fe4fc22f23f8dbe3a6aab394602886f2971.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_5fe26fe4fc22f23f8dbe3a6aab394602886f2971.out
diff --git a/test/expected/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.err b/test/expected/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.err
diff --git a/test/expected/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.out b/test/expected/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.out
new file mode 100644
index 0000000..898c9a8
--- /dev/null
+++ b/test/expected/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.out
@@ -0,0 +1,2 @@
+filepath 
+foo
diff --git a/test/expected/test_sql.sh_6ad9d0adf85c36363f6b24f49950dcdc13dd34ab.err b/test/expected/test_sql.sh_6ad9d0adf85c36363f6b24f49950dcdc13dd34ab.err
new file mode 100644
index 0000000..cdb2140
--- /dev/null
+++ b/test/expected/test_sql.sh_6ad9d0adf85c36363f6b24f49950dcdc13dd34ab.err
@@ -0,0 +1,6 @@
+✘ error: unable to read script file: nonexistent-file -- No such file or directory
+ --> command-option:1
+ | ;.read nonexistent-file 
+ = help: ;.read path
+ ══════════════════════════════════════════════════════════════════════
+ Execute the SQLite statements in the given file
diff --git a/test/expected/test_sql.sh_6ad9d0adf85c36363f6b24f49950dcdc13dd34ab.out b/test/expected/test_sql.sh_6ad9d0adf85c36363f6b24f49950dcdc13dd34ab.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_6ad9d0adf85c36363f6b24f49950dcdc13dd34ab.out
diff --git a/test/expected/test_sql.sh_6edb0c8d5323d1b962d90dd6ecdd7eee9008d7b5.err b/test/expected/test_sql.sh_6edb0c8d5323d1b962d90dd6ecdd7eee9008d7b5.err
new file mode 100644
index 0000000..f031c59
--- /dev/null
+++ b/test/expected/test_sql.sh_6edb0c8d5323d1b962d90dd6ecdd7eee9008d7b5.err
@@ -0,0 +1,6 @@
+✘ error: unknown search table -- search_test1
+ --> command-option:1
+ | :delete-search-table search_test1 
+ = help: :delete-search-table table-name
+ ══════════════════════════════════════════════════════════════════════
+ Create an SQL table based on a regex search
diff --git a/test/expected/test_sql.sh_6edb0c8d5323d1b962d90dd6ecdd7eee9008d7b5.out b/test/expected/test_sql.sh_6edb0c8d5323d1b962d90dd6ecdd7eee9008d7b5.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_6edb0c8d5323d1b962d90dd6ecdd7eee9008d7b5.out
diff --git a/test/expected/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.err b/test/expected/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.err
diff --git a/test/expected/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.out b/test/expected/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.out
new file mode 100644
index 0000000..801a9af
--- /dev/null
+++ b/test/expected/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.out
@@ -0,0 +1,2 @@
+log_top_datetime() 
+ <NULL>
diff --git a/test/expected/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.err b/test/expected/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.err
diff --git a/test/expected/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.out b/test/expected/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.out
new file mode 100644
index 0000000..fabc853
--- /dev/null
+++ b/test/expected/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.out
@@ -0,0 +1,2 @@
+ col_0 
+eth0.IPv4
diff --git a/test/expected/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.err b/test/expected/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.err
new file mode 100644
index 0000000..1a0c2b0
--- /dev/null
+++ b/test/expected/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.err
@@ -0,0 +1,6 @@
+✘ error: call to raise_error(msg) failed
+ reason: expecting the new name for stdin as the first argument
+ --> command-option:1
+ | |rename-stdin 
+ --> ../test/.lnav/formats/default/rename-stdin.lnav:6
+ | ;SELECT raise_error('expecting the new name for stdin as the first argument') WHERE $1 IS NULL
diff --git a/test/expected/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.out b/test/expected/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.out
diff --git a/test/expected/test_sql.sh_85fe3b9803254ea54b864d4865d7bd4d7a7f86c6.err b/test/expected/test_sql.sh_85fe3b9803254ea54b864d4865d7bd4d7a7f86c6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_85fe3b9803254ea54b864d4865d7bd4d7a7f86c6.err
diff --git a/test/expected/test_sql.sh_85fe3b9803254ea54b864d4865d7bd4d7a7f86c6.out b/test/expected/test_sql.sh_85fe3b9803254ea54b864d4865d7bd4d7a7f86c6.out
new file mode 100644
index 0000000..97b8dcc
--- /dev/null
+++ b/test/expected/test_sql.sh_85fe3b9803254ea54b864d4865d7bd4d7a7f86c6.out
@@ -0,0 +1,4 @@
+192.168.202.254 - - [20/Jul/2009:23:00:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:23:00:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:23:00:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
+10.112.81.15 - - [15/Feb/2013:06:01:31 +0000] "-" 400 0 "-" "-"
diff --git a/test/expected/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.err b/test/expected/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.err
diff --git a/test/expected/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.out b/test/expected/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.out
new file mode 100644
index 0000000..b21f574
--- /dev/null
+++ b/test/expected/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.out
@@ -0,0 +1,4 @@
+ log_time 
+2009-07-20 22:59:26.000
+2009-07-20 22:59:29.000
+2009-07-20 22:59:29.000
diff --git a/test/expected/test_sql.sh_9a209f3ee1b1f543ca2587b695d2eb0e63e74c51.err b/test/expected/test_sql.sh_9a209f3ee1b1f543ca2587b695d2eb0e63e74c51.err
new file mode 100644
index 0000000..d291abe
--- /dev/null
+++ b/test/expected/test_sql.sh_9a209f3ee1b1f543ca2587b695d2eb0e63e74c51.err
@@ -0,0 +1,6 @@
+✘ error: unknown search table -- search_test1
+ --> command-option:2
+ | :delete-search-table search_test1 
+ = help: :delete-search-table table-name
+ ══════════════════════════════════════════════════════════════════════
+ Create an SQL table based on a regex search
diff --git a/test/expected/test_sql.sh_9a209f3ee1b1f543ca2587b695d2eb0e63e74c51.out b/test/expected/test_sql.sh_9a209f3ee1b1f543ca2587b695d2eb0e63e74c51.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_9a209f3ee1b1f543ca2587b695d2eb0e63e74c51.out
diff --git a/test/expected/test_sql.sh_9b03e9f7a1bc35e408b3a17ee90cfdadea164df6.err b/test/expected/test_sql.sh_9b03e9f7a1bc35e408b3a17ee90cfdadea164df6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_9b03e9f7a1bc35e408b3a17ee90cfdadea164df6.err
diff --git a/test/expected/test_sql.sh_9b03e9f7a1bc35e408b3a17ee90cfdadea164df6.out b/test/expected/test_sql.sh_9b03e9f7a1bc35e408b3a17ee90cfdadea164df6.out
new file mode 100644
index 0000000..f648fc6
--- /dev/null
+++ b/test/expected/test_sql.sh_9b03e9f7a1bc35e408b3a17ee90cfdadea164df6.out
@@ -0,0 +1,4 @@
+Min: 0   1-23   24-48   49+ Max: 291690
+ Thu Nov 03 00:15:00               
+▲ 70 values in the range 0.00-3788.18
+ Thu Nov 03 00:20:00
diff --git a/test/expected/test_sql.sh_9ceccab07fbf7130bffe3c201c710719e4a3e9af.err b/test/expected/test_sql.sh_9ceccab07fbf7130bffe3c201c710719e4a3e9af.err
new file mode 100644
index 0000000..3129cfa
--- /dev/null
+++ b/test/expected/test_sql.sh_9ceccab07fbf7130bffe3c201c710719e4a3e9af.err
@@ -0,0 +1,6 @@
+✘ error: Cannot generate spectrogram for database results
+ reason: The “log_time” column is not in ascending order between rows 1 and 2
+ --> command-option:2
+ | :spectrogram sc_bytes 
+ = note: An ascending “log_time” column is needed to render a spectrogram
+ = help: Add an “ORDER BY log_time ASC” clause to your SELECT statement
diff --git a/test/expected/test_sql.sh_9ceccab07fbf7130bffe3c201c710719e4a3e9af.out b/test/expected/test_sql.sh_9ceccab07fbf7130bffe3c201c710719e4a3e9af.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_9ceccab07fbf7130bffe3c201c710719e4a3e9af.out
diff --git a/test/expected/test_sql.sh_9e1d05b821822ee40e13fadb24ec558f4bfcff10.err b/test/expected/test_sql.sh_9e1d05b821822ee40e13fadb24ec558f4bfcff10.err
new file mode 100644
index 0000000..d3d1a0a
--- /dev/null
+++ b/test/expected/test_sql.sh_9e1d05b821822ee40e13fadb24ec558f4bfcff10.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: real file paths cannot be updated, only symbolic ones
+ --> command-option:1
+ | ;UPDATE lnav_file SET filepath='foo' WHERE endswith(filepath, '_log.0')
diff --git a/test/expected/test_sql.sh_9e1d05b821822ee40e13fadb24ec558f4bfcff10.out b/test/expected/test_sql.sh_9e1d05b821822ee40e13fadb24ec558f4bfcff10.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_9e1d05b821822ee40e13fadb24ec558f4bfcff10.out
diff --git a/test/expected/test_sql.sh_a6b68b9f0044d18e7fa8f9287ddc9110701edc33.err b/test/expected/test_sql.sh_a6b68b9f0044d18e7fa8f9287ddc9110701edc33.err
new file mode 100644
index 0000000..8dd63fa
--- /dev/null
+++ b/test/expected/test_sql.sh_a6b68b9f0044d18e7fa8f9287ddc9110701edc33.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: attempt to write a readonly database
+ --> command-option:1
+ | ;delete from access_log 
diff --git a/test/expected/test_sql.sh_a6b68b9f0044d18e7fa8f9287ddc9110701edc33.out b/test/expected/test_sql.sh_a6b68b9f0044d18e7fa8f9287ddc9110701edc33.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_a6b68b9f0044d18e7fa8f9287ddc9110701edc33.out
diff --git a/test/expected/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.err b/test/expected/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.err
diff --git a/test/expected/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.out b/test/expected/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.out
new file mode 100644
index 0000000..c012bd8
--- /dev/null
+++ b/test/expected/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.out
@@ -0,0 +1,2 @@
+ log_time 
+2009-07-20 22:59:26.000
diff --git a/test/expected/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.err b/test/expected/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.err
diff --git a/test/expected/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.out b/test/expected/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.out
new file mode 100644
index 0000000..4382802
--- /dev/null
+++ b/test/expected/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.out
@@ -0,0 +1,4 @@
+ log_body 
+lookup(file): lookup for foobar failed
+attempting to mount entry /auto/opt
+lookup(file): lookup for opt failed
diff --git a/test/expected/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.err b/test/expected/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.err
diff --git a/test/expected/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.out b/test/expected/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.out
new file mode 100644
index 0000000..b21f574
--- /dev/null
+++ b/test/expected/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.out
@@ -0,0 +1,4 @@
+ log_time 
+2009-07-20 22:59:26.000
+2009-07-20 22:59:29.000
+2009-07-20 22:59:29.000
diff --git a/test/expected/test_sql.sh_b2694e4fbecdd128798af25ee0d069e7e35fb499.err b/test/expected/test_sql.sh_b2694e4fbecdd128798af25ee0d069e7e35fb499.err
new file mode 100644
index 0000000..fe7b342
--- /dev/null
+++ b/test/expected/test_sql.sh_b2694e4fbecdd128798af25ee0d069e7e35fb499.err
@@ -0,0 +1,4 @@
+✘ error: failed to compile SQL statement
+ reason: the start parameter is required
+ --> command-option:1
+ | SELECT * FROM generate_series() 
diff --git a/test/expected/test_sql.sh_b2694e4fbecdd128798af25ee0d069e7e35fb499.out b/test/expected/test_sql.sh_b2694e4fbecdd128798af25ee0d069e7e35fb499.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_b2694e4fbecdd128798af25ee0d069e7e35fb499.out
diff --git a/test/expected/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.err b/test/expected/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.err
diff --git a/test/expected/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.out b/test/expected/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.out
new file mode 100644
index 0000000..c2c44ad
--- /dev/null
+++ b/test/expected/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.out
@@ -0,0 +1,2 @@
+ log_body 
+timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
diff --git a/test/expected/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.err b/test/expected/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.err
diff --git a/test/expected/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.out b/test/expected/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.out
new file mode 100644
index 0000000..85a1303
--- /dev/null
+++ b/test/expected/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.out
@@ -0,0 +1,5 @@
+match_index  content  case match_index when 2 then replicate('abc', 1000) else '' end 
+  0 {"col_0":10}  
+ 1 {"col_0":50}  
+ 2 {"col_0":50} abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc⋯bcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc 
+ 3 {"col_0":50}  
diff --git a/test/expected/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.err b/test/expected/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.err
diff --git a/test/expected/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.out b/test/expected/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.out
new file mode 100644
index 0000000..7041f45
--- /dev/null
+++ b/test/expected/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.out
@@ -0,0 +1,2 @@
+lnav_top_file() 
+ <NULL>
diff --git a/test/expected/test_sql.sh_c20b0320096342c180146a5d18a6de82319d70b2.err b/test/expected/test_sql.sh_c20b0320096342c180146a5d18a6de82319d70b2.err
new file mode 100644
index 0000000..da8dff5
--- /dev/null
+++ b/test/expected/test_sql.sh_c20b0320096342c180146a5d18a6de82319d70b2.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: A non-empty name and value must be provided when inserting an environment variable
+ --> command-option:1
+ | ;INSERT INTO environ (name, value) VALUES ("", null)
diff --git a/test/expected/test_sql.sh_c20b0320096342c180146a5d18a6de82319d70b2.out b/test/expected/test_sql.sh_c20b0320096342c180146a5d18a6de82319d70b2.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_c20b0320096342c180146a5d18a6de82319d70b2.out
diff --git a/test/expected/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.err b/test/expected/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.err
diff --git a/test/expected/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.out b/test/expected/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.out
new file mode 100644
index 0000000..b21f574
--- /dev/null
+++ b/test/expected/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.out
@@ -0,0 +1,4 @@
+ log_time 
+2009-07-20 22:59:26.000
+2009-07-20 22:59:29.000
+2009-07-20 22:59:29.000
diff --git a/test/expected/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.err b/test/expected/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.err
diff --git a/test/expected/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.out b/test/expected/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.out
new file mode 100644
index 0000000..86a4d5a
--- /dev/null
+++ b/test/expected/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.out
@@ -0,0 +1,3 @@
+log_line  col_0 
+ 0 eth0.IPv4 
+ 7 eth0.IPv4
diff --git a/test/expected/test_sql.sh_c73dec2706fc0b9a124f5da3a83f40d8d3255beb.err b/test/expected/test_sql.sh_c73dec2706fc0b9a124f5da3a83f40d8d3255beb.err
new file mode 100644
index 0000000..8ab7471
--- /dev/null
+++ b/test/expected/test_sql.sh_c73dec2706fc0b9a124f5da3a83f40d8d3255beb.err
@@ -0,0 +1,4 @@
+✘ error: failed to compile SQL statement
+ reason: not authorized
+ --> command-option:1
+ | attach database 'file:memdb?cache=shared' as 'db'
diff --git a/test/expected/test_sql.sh_c73dec2706fc0b9a124f5da3a83f40d8d3255beb.out b/test/expected/test_sql.sh_c73dec2706fc0b9a124f5da3a83f40d8d3255beb.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_c73dec2706fc0b9a124f5da3a83f40d8d3255beb.out
diff --git a/test/expected/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.err b/test/expected/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.err
diff --git a/test/expected/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.out b/test/expected/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.out
new file mode 100644
index 0000000..762b09c
--- /dev/null
+++ b/test/expected/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.out
@@ -0,0 +1,2 @@
+ log_top_datetime() 
+2016-03-13 22:49:15.000
diff --git a/test/expected/test_sql.sh_cc77a633a66d1778705a34e3657737547b3fb08d.err b/test/expected/test_sql.sh_cc77a633a66d1778705a34e3657737547b3fb08d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_cc77a633a66d1778705a34e3657737547b3fb08d.err
diff --git a/test/expected/test_sql.sh_cc77a633a66d1778705a34e3657737547b3fb08d.out b/test/expected/test_sql.sh_cc77a633a66d1778705a34e3657737547b3fb08d.out
new file mode 100644
index 0000000..b13e5f0
--- /dev/null
+++ b/test/expected/test_sql.sh_cc77a633a66d1778705a34e3657737547b3fb08d.out
@@ -0,0 +1,2 @@
+log_top_line() 
+ 2
diff --git a/test/expected/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.err b/test/expected/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.err
new file mode 100644
index 0000000..c7ee159
--- /dev/null
+++ b/test/expected/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.err
@@ -0,0 +1,10 @@
+✘ error: call to raise_error(msg) failed
+ reason: oops!
+ --> command-option:2
+ | ;SELECT $inum, $nul, $fnum, $str, raise_error('oops!')
+ = note: the bound parameters are set as follows:
+ $fnum:FLOAT = “2”
+ $inum:INTEGER = “1”
+ $nul:NULL = “<NULL>”
+ $str:TEXT = “abc”
+
diff --git a/test/expected/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.out b/test/expected/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.out
diff --git a/test/expected/test_sql.sh_e70dc7d2b686c7f91c2b41b10f3920c50f3ea405.err b/test/expected/test_sql.sh_e70dc7d2b686c7f91c2b41b10f3920c50f3ea405.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_e70dc7d2b686c7f91c2b41b10f3920c50f3ea405.err
diff --git a/test/expected/test_sql.sh_e70dc7d2b686c7f91c2b41b10f3920c50f3ea405.out b/test/expected/test_sql.sh_e70dc7d2b686c7f91c2b41b10f3920c50f3ea405.out
new file mode 100644
index 0000000..889aced
--- /dev/null
+++ b/test/expected/test_sql.sh_e70dc7d2b686c7f91c2b41b10f3920c50f3ea405.out
@@ -0,0 +1 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_sql.sh_ff8a978fc0de0fed675a3cd1454cf435a6856fd5.err b/test/expected/test_sql.sh_ff8a978fc0de0fed675a3cd1454cf435a6856fd5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_ff8a978fc0de0fed675a3cd1454cf435a6856fd5.err
diff --git a/test/expected/test_sql.sh_ff8a978fc0de0fed675a3cd1454cf435a6856fd5.out b/test/expected/test_sql.sh_ff8a978fc0de0fed675a3cd1454cf435a6856fd5.out
new file mode 100644
index 0000000..a4a70f3
--- /dev/null
+++ b/test/expected/test_sql.sh_ff8a978fc0de0fed675a3cd1454cf435a6856fd5.out
@@ -0,0 +1,3 @@
+134
+46210
+78929
diff --git a/test/expected/test_sql_anno.sh_028d5d5af2f3519b59d349d41cb7ecf385253b51.err b/test/expected/test_sql_anno.sh_028d5d5af2f3519b59d349d41cb7ecf385253b51.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_028d5d5af2f3519b59d349d41cb7ecf385253b51.err
diff --git a/test/expected/test_sql_anno.sh_028d5d5af2f3519b59d349d41cb7ecf385253b51.out b/test/expected/test_sql_anno.sh_028d5d5af2f3519b59d349d41cb7ecf385253b51.out
new file mode 100644
index 0000000..8adbd5c
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_028d5d5af2f3519b59d349d41cb7ecf385253b51.out
@@ -0,0 +1,5 @@
+ SELECT * FROM FOO
+ sql_keyword ------
+ sql_oper -
+ sql_keyword ----
+ sql_ident ---
diff --git a/test/expected/test_sql_anno.sh_0a37c43350ddd7a2d0d75695be32fac083ad04a4.err b/test/expected/test_sql_anno.sh_0a37c43350ddd7a2d0d75695be32fac083ad04a4.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_0a37c43350ddd7a2d0d75695be32fac083ad04a4.err
diff --git a/test/expected/test_sql_anno.sh_0a37c43350ddd7a2d0d75695be32fac083ad04a4.out b/test/expected/test_sql_anno.sh_0a37c43350ddd7a2d0d75695be32fac083ad04a4.out
new file mode 100644
index 0000000..0e8b3dd
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_0a37c43350ddd7a2d0d75695be32fac083ad04a4.out
@@ -0,0 +1,4 @@
+ CREATE
+ sql_keyword ------
+CREATE: Assign a name to a SELECT statement
+CREATE: Create a table
diff --git a/test/expected/test_sql_anno.sh_1151e5b727f6b57070bf2c8f047f1d7e02b803a6.err b/test/expected/test_sql_anno.sh_1151e5b727f6b57070bf2c8f047f1d7e02b803a6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_1151e5b727f6b57070bf2c8f047f1d7e02b803a6.err
diff --git a/test/expected/test_sql_anno.sh_1151e5b727f6b57070bf2c8f047f1d7e02b803a6.out b/test/expected/test_sql_anno.sh_1151e5b727f6b57070bf2c8f047f1d7e02b803a6.out
new file mode 100644
index 0000000..d8f654e
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_1151e5b727f6b57070bf2c8f047f1d7e02b803a6.out
@@ -0,0 +1,6 @@
+ SELECT lower(abc
+ sql_keyword ------
+ sql_func ---------
+ sql_ident -----
+ sql_ident ---
+lower: Returns a copy of the given string with all ASCII characters converted to lower case.
diff --git a/test/expected/test_sql_anno.sh_1b29488b949c294479aa6054f80a35bc106b454b.err b/test/expected/test_sql_anno.sh_1b29488b949c294479aa6054f80a35bc106b454b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_1b29488b949c294479aa6054f80a35bc106b454b.err
diff --git a/test/expected/test_sql_anno.sh_1b29488b949c294479aa6054f80a35bc106b454b.out b/test/expected/test_sql_anno.sh_1b29488b949c294479aa6054f80a35bc106b454b.out
new file mode 100644
index 0000000..c9237a8
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_1b29488b949c294479aa6054f80a35bc106b454b.out
@@ -0,0 +1,2 @@
+ TABLE
+ sql_keyword -----
diff --git a/test/expected/test_sql_anno.sh_331a152080d2e278b7cc0a37728eca1ded36ed72.err b/test/expected/test_sql_anno.sh_331a152080d2e278b7cc0a37728eca1ded36ed72.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_331a152080d2e278b7cc0a37728eca1ded36ed72.err
diff --git a/test/expected/test_sql_anno.sh_331a152080d2e278b7cc0a37728eca1ded36ed72.out b/test/expected/test_sql_anno.sh_331a152080d2e278b7cc0a37728eca1ded36ed72.out
new file mode 100644
index 0000000..b7bee8a
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_331a152080d2e278b7cc0a37728eca1ded36ed72.out
@@ -0,0 +1,5 @@
+ SELECT 'hello, world!' FROM "my table"
+ sql_keyword ------
+ sql_string ---------------
+ sql_keyword ----
+ sql_ident ----------
diff --git a/test/expected/test_sql_anno.sh_4ca92f0da538c2f9d524211a021b306af0d2740d.err b/test/expected/test_sql_anno.sh_4ca92f0da538c2f9d524211a021b306af0d2740d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_4ca92f0da538c2f9d524211a021b306af0d2740d.err
diff --git a/test/expected/test_sql_anno.sh_4ca92f0da538c2f9d524211a021b306af0d2740d.out b/test/expected/test_sql_anno.sh_4ca92f0da538c2f9d524211a021b306af0d2740d.out
new file mode 100644
index 0000000..9498d4b
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_4ca92f0da538c2f9d524211a021b306af0d2740d.out
@@ -0,0 +1,7 @@
+ SELECT * FROM foo.bar
+ sql_keyword ------
+ sql_oper -
+ sql_keyword ----
+ sql_ident ---
+ sql_garbage -
+ sql_ident ---
diff --git a/test/expected/test_sql_anno.sh_73814eca259e469b57bf7469787b91e8e8569b17.err b/test/expected/test_sql_anno.sh_73814eca259e469b57bf7469787b91e8e8569b17.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_73814eca259e469b57bf7469787b91e8e8569b17.err
diff --git a/test/expected/test_sql_anno.sh_73814eca259e469b57bf7469787b91e8e8569b17.out b/test/expected/test_sql_anno.sh_73814eca259e469b57bf7469787b91e8e8569b17.out
new file mode 100644
index 0000000..8433625
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_73814eca259e469b57bf7469787b91e8e8569b17.out
@@ -0,0 +1,7 @@
+ SELECT (1 + 2) AS three
+ sql_keyword ------
+ sql_number -
+ sql_oper -
+ sql_number -
+ sql_keyword --
+ sql_ident -----
diff --git a/test/expected/test_sql_anno.sh_74bc5fb90a0c94a1a37d30a8e9254ea02c192a75.err b/test/expected/test_sql_anno.sh_74bc5fb90a0c94a1a37d30a8e9254ea02c192a75.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_74bc5fb90a0c94a1a37d30a8e9254ea02c192a75.err
diff --git a/test/expected/test_sql_anno.sh_74bc5fb90a0c94a1a37d30a8e9254ea02c192a75.out b/test/expected/test_sql_anno.sh_74bc5fb90a0c94a1a37d30a8e9254ea02c192a75.out
new file mode 100644
index 0000000..00a2e8a
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_74bc5fb90a0c94a1a37d30a8e9254ea02c192a75.out
@@ -0,0 +1,6 @@
+ SELECT lower(abc)
+ sql_keyword ------
+ sql_func ---------
+ sql_ident -----
+ sql_ident ---
+SELECT: Query the database and return zero or more rows of data.
diff --git a/test/expected/test_sql_anno.sh_7b183037479528581e1eacace7b9acae41c5aa8e.err b/test/expected/test_sql_anno.sh_7b183037479528581e1eacace7b9acae41c5aa8e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_7b183037479528581e1eacace7b9acae41c5aa8e.err
diff --git a/test/expected/test_sql_anno.sh_7b183037479528581e1eacace7b9acae41c5aa8e.out b/test/expected/test_sql_anno.sh_7b183037479528581e1eacace7b9acae41c5aa8e.out
new file mode 100644
index 0000000..7c92ed1
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_7b183037479528581e1eacace7b9acae41c5aa8e.out
@@ -0,0 +1,12 @@
+ SELECT instr(lower(abc), '123') FROM bar
+ sql_keyword ------
+ sql_func -----------------------
+ sql_ident -----
+ sql_func ---------
+ sql_ident -----
+ sql_ident ---
+ sql_comma -
+ sql_string -----
+ sql_keyword ----
+ sql_ident ---
+SELECT: Query the database and return zero or more rows of data.
diff --git a/test/expected/test_sql_anno.sh_96ebdc277ae760e1b6efae3195ff678654b04e52.err b/test/expected/test_sql_anno.sh_96ebdc277ae760e1b6efae3195ff678654b04e52.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_96ebdc277ae760e1b6efae3195ff678654b04e52.err
diff --git a/test/expected/test_sql_anno.sh_96ebdc277ae760e1b6efae3195ff678654b04e52.out b/test/expected/test_sql_anno.sh_96ebdc277ae760e1b6efae3195ff678654b04e52.out
new file mode 100644
index 0000000..dc88535
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_96ebdc277ae760e1b6efae3195ff678654b04e52.out
@@ -0,0 +1,7 @@
+ SELECT foo(bar())
+ sql_keyword ------
+ sql_func ---------
+ sql_ident ---
+ sql_func ----
+ sql_ident ---
+SELECT: Query the database and return zero or more rows of data.
diff --git a/test/expected/test_sql_anno.sh_99da5994c8c90536dbdb1b8ad7dbfb41698a5e8c.err b/test/expected/test_sql_anno.sh_99da5994c8c90536dbdb1b8ad7dbfb41698a5e8c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_99da5994c8c90536dbdb1b8ad7dbfb41698a5e8c.err
diff --git a/test/expected/test_sql_anno.sh_99da5994c8c90536dbdb1b8ad7dbfb41698a5e8c.out b/test/expected/test_sql_anno.sh_99da5994c8c90536dbdb1b8ad7dbfb41698a5e8c.out
new file mode 100644
index 0000000..5fa2f87
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_99da5994c8c90536dbdb1b8ad7dbfb41698a5e8c.out
@@ -0,0 +1,10 @@
+ SELECT instr(lower(abc), '123')
+ sql_keyword ------
+ sql_func -----------------------
+ sql_ident -----
+ sql_func ---------
+ sql_ident -----
+ sql_ident ---
+ sql_comma -
+ sql_string -----
+lower: Returns a copy of the given string with all ASCII characters converted to lower case.
diff --git a/test/expected/test_sql_anno.sh_b1a2ddce48beb3e4b1e3ca4b4229a7c21b83b7c4.err b/test/expected/test_sql_anno.sh_b1a2ddce48beb3e4b1e3ca4b4229a7c21b83b7c4.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_b1a2ddce48beb3e4b1e3ca4b4229a7c21b83b7c4.err
diff --git a/test/expected/test_sql_anno.sh_b1a2ddce48beb3e4b1e3ca4b4229a7c21b83b7c4.out b/test/expected/test_sql_anno.sh_b1a2ddce48beb3e4b1e3ca4b4229a7c21b83b7c4.out
new file mode 100644
index 0000000..fc6d386
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_b1a2ddce48beb3e4b1e3ca4b4229a7c21b83b7c4.out
@@ -0,0 +1,6 @@
+ SELECT lower( abc )
+ sql_keyword ------
+ sql_func ----------------
+ sql_ident -----
+ sql_ident ---
+lower: Returns a copy of the given string with all ASCII characters converted to lower case.
diff --git a/test/expected/test_sql_anno.sh_be6839712d088fc7b31618ed90f8ce706c35a9c0.err b/test/expected/test_sql_anno.sh_be6839712d088fc7b31618ed90f8ce706c35a9c0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_be6839712d088fc7b31618ed90f8ce706c35a9c0.err
diff --git a/test/expected/test_sql_anno.sh_be6839712d088fc7b31618ed90f8ce706c35a9c0.out b/test/expected/test_sql_anno.sh_be6839712d088fc7b31618ed90f8ce706c35a9c0.out
new file mode 100644
index 0000000..902a1db
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_be6839712d088fc7b31618ed90f8ce706c35a9c0.out
@@ -0,0 +1,7 @@
+ SELECT (1.5 + 2.2) AS decim
+ sql_keyword ------
+ sql_number ---
+ sql_oper -
+ sql_number ---
+ sql_keyword --
+ sql_ident -----
diff --git a/test/expected/test_sql_anno.sh_c879ba94fdc1a099cf56bd33e5b3e9be65310036.err b/test/expected/test_sql_anno.sh_c879ba94fdc1a099cf56bd33e5b3e9be65310036.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_c879ba94fdc1a099cf56bd33e5b3e9be65310036.err
diff --git a/test/expected/test_sql_anno.sh_c879ba94fdc1a099cf56bd33e5b3e9be65310036.out b/test/expected/test_sql_anno.sh_c879ba94fdc1a099cf56bd33e5b3e9be65310036.out
new file mode 100644
index 0000000..c09afc3
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_c879ba94fdc1a099cf56bd33e5b3e9be65310036.out
@@ -0,0 +1,10 @@
+ SELECT instr(lower(abc), '123')
+ sql_keyword ------
+ sql_func -----------------------
+ sql_ident -----
+ sql_func ---------
+ sql_ident -----
+ sql_ident ---
+ sql_comma -
+ sql_string -----
+instr: Finds the first occurrence of the needle within the haystack and returns the number of prior characters plus 1, or 0 if the needle was not found
diff --git a/test/expected/test_sql_anno.sh_c909647ed0e585002074f55c946f3033df1815b2.err b/test/expected/test_sql_anno.sh_c909647ed0e585002074f55c946f3033df1815b2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_c909647ed0e585002074f55c946f3033df1815b2.err
diff --git a/test/expected/test_sql_anno.sh_c909647ed0e585002074f55c946f3033df1815b2.out b/test/expected/test_sql_anno.sh_c909647ed0e585002074f55c946f3033df1815b2.out
new file mode 100644
index 0000000..304d8dc
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_c909647ed0e585002074f55c946f3033df1815b2.out
@@ -0,0 +1,6 @@
+ SELECT foo(bar())
+ sql_keyword ------
+ sql_func ---------
+ sql_ident ---
+ sql_func ----
+ sql_ident ---
diff --git a/test/expected/test_sql_anno.sh_ce0506ee7a12eb0f7b970522cc6a79180ecb20cc.err b/test/expected/test_sql_anno.sh_ce0506ee7a12eb0f7b970522cc6a79180ecb20cc.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_ce0506ee7a12eb0f7b970522cc6a79180ecb20cc.err
diff --git a/test/expected/test_sql_anno.sh_ce0506ee7a12eb0f7b970522cc6a79180ecb20cc.out b/test/expected/test_sql_anno.sh_ce0506ee7a12eb0f7b970522cc6a79180ecb20cc.out
new file mode 100644
index 0000000..654e434
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_ce0506ee7a12eb0f7b970522cc6a79180ecb20cc.out
@@ -0,0 +1,11 @@
+ SELECT * from vmw_log, regexp_capture(log_body, '--> /SessionStats/SessionPool/Session/(?<line>[abc]+)')
+ sql_keyword ------
+ sql_oper -
+ sql_keyword ----
+ sql_ident -------
+ sql_comma -
+ sql_func --------------------------------------------------------------------------------
+ sql_ident --------------
+ sql_ident --------
+ sql_comma -
+ sql_string -------------------------------------------------------
diff --git a/test/expected/test_sql_anno.sh_f3c64191d6016767a5857fbb1bad26548586bb96.err b/test/expected/test_sql_anno.sh_f3c64191d6016767a5857fbb1bad26548586bb96.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_f3c64191d6016767a5857fbb1bad26548586bb96.err
diff --git a/test/expected/test_sql_anno.sh_f3c64191d6016767a5857fbb1bad26548586bb96.out b/test/expected/test_sql_anno.sh_f3c64191d6016767a5857fbb1bad26548586bb96.out
new file mode 100644
index 0000000..2ee5ee2
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_f3c64191d6016767a5857fbb1bad26548586bb96.out
@@ -0,0 +1,10 @@
+ SELECT * FROM (SELECT foo, bar FROM baz)
+ sql_keyword ------
+ sql_oper -
+ sql_keyword ----
+ sql_keyword ------
+ sql_ident ---
+ sql_comma -
+ sql_ident ---
+ sql_keyword ----
+ sql_ident ---
diff --git a/test/expected/test_sql_coll_func.sh_077cab6e271c914daf5b221cc512853077891f35.err b/test/expected/test_sql_coll_func.sh_077cab6e271c914daf5b221cc512853077891f35.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_077cab6e271c914daf5b221cc512853077891f35.err
diff --git a/test/expected/test_sql_coll_func.sh_077cab6e271c914daf5b221cc512853077891f35.out b/test/expected/test_sql_coll_func.sh_077cab6e271c914daf5b221cc512853077891f35.out
new file mode 100644
index 0000000..36b0c2b
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_077cab6e271c914daf5b221cc512853077891f35.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column 'fe80::a85f:80b4:5cbe:8691' = 'fe80:0000:0000:0000:a85f:80b4:5cbe:8691' collate ipaddress: 1
diff --git a/test/expected/test_sql_coll_func.sh_0ce56741d3c34af274c8ddb4b90c4e5749d05971.err b/test/expected/test_sql_coll_func.sh_0ce56741d3c34af274c8ddb4b90c4e5749d05971.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_0ce56741d3c34af274c8ddb4b90c4e5749d05971.err
diff --git a/test/expected/test_sql_coll_func.sh_0ce56741d3c34af274c8ddb4b90c4e5749d05971.out b/test/expected/test_sql_coll_func.sh_0ce56741d3c34af274c8ddb4b90c4e5749d05971.out
new file mode 100644
index 0000000..cf84c47
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_0ce56741d3c34af274c8ddb4b90c4e5749d05971.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column 'info' collate loglevel between 'trace' and 'fatal': 1
diff --git a/test/expected/test_sql_coll_func.sh_180ad44fe073cc9642da642af1f442adfd98ec62.err b/test/expected/test_sql_coll_func.sh_180ad44fe073cc9642da642af1f442adfd98ec62.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_180ad44fe073cc9642da642af1f442adfd98ec62.err
diff --git a/test/expected/test_sql_coll_func.sh_180ad44fe073cc9642da642af1f442adfd98ec62.out b/test/expected/test_sql_coll_func.sh_180ad44fe073cc9642da642af1f442adfd98ec62.out
new file mode 100644
index 0000000..187dc99
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_180ad44fe073cc9642da642af1f442adfd98ec62.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column 'file10.txt' < 'file2.txt' collate naturalcase: 0
diff --git a/test/expected/test_sql_coll_func.sh_2230714a0b2ab6aca9ddfe686734f313cef5a96b.err b/test/expected/test_sql_coll_func.sh_2230714a0b2ab6aca9ddfe686734f313cef5a96b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_2230714a0b2ab6aca9ddfe686734f313cef5a96b.err
diff --git a/test/expected/test_sql_coll_func.sh_2230714a0b2ab6aca9ddfe686734f313cef5a96b.out b/test/expected/test_sql_coll_func.sh_2230714a0b2ab6aca9ddfe686734f313cef5a96b.out
new file mode 100644
index 0000000..4ecbd26
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_2230714a0b2ab6aca9ddfe686734f313cef5a96b.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column '::ffff:192.168.1.10' = '192.168.1.10' collate ipaddress: 1
diff --git a/test/expected/test_sql_coll_func.sh_68515cfd0a50880f6dfc8f9810c9e761493ebb12.err b/test/expected/test_sql_coll_func.sh_68515cfd0a50880f6dfc8f9810c9e761493ebb12.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_68515cfd0a50880f6dfc8f9810c9e761493ebb12.err
diff --git a/test/expected/test_sql_coll_func.sh_68515cfd0a50880f6dfc8f9810c9e761493ebb12.out b/test/expected/test_sql_coll_func.sh_68515cfd0a50880f6dfc8f9810c9e761493ebb12.out
new file mode 100644
index 0000000..4bac183
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_68515cfd0a50880f6dfc8f9810c9e761493ebb12.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column '192.168.1.10' < '192.168.1.2' collate ipaddress: 0
diff --git a/test/expected/test_sql_coll_func.sh_6de2a86c53883ec4430b98edd06b0c0cdf23e741.err b/test/expected/test_sql_coll_func.sh_6de2a86c53883ec4430b98edd06b0c0cdf23e741.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_6de2a86c53883ec4430b98edd06b0c0cdf23e741.err
diff --git a/test/expected/test_sql_coll_func.sh_6de2a86c53883ec4430b98edd06b0c0cdf23e741.out b/test/expected/test_sql_coll_func.sh_6de2a86c53883ec4430b98edd06b0c0cdf23e741.out
new file mode 100644
index 0000000..90b4acb
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_6de2a86c53883ec4430b98edd06b0c0cdf23e741.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column '192.168.1.10' < '192.168.1.2': 1
diff --git a/test/expected/test_sql_coll_func.sh_918178c6dd9d70d0432ededfde5af5e53c094385.err b/test/expected/test_sql_coll_func.sh_918178c6dd9d70d0432ededfde5af5e53c094385.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_918178c6dd9d70d0432ededfde5af5e53c094385.err
diff --git a/test/expected/test_sql_coll_func.sh_918178c6dd9d70d0432ededfde5af5e53c094385.out b/test/expected/test_sql_coll_func.sh_918178c6dd9d70d0432ededfde5af5e53c094385.out
new file mode 100644
index 0000000..2f6aec0
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_918178c6dd9d70d0432ededfde5af5e53c094385.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column '192.168.1.10' < '192.168.1.12' collate ipaddress: 1
diff --git a/test/expected/test_sql_coll_func.sh_c76a24a209987e4c668c87588c12b8f34294b144.err b/test/expected/test_sql_coll_func.sh_c76a24a209987e4c668c87588c12b8f34294b144.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_c76a24a209987e4c668c87588c12b8f34294b144.err
diff --git a/test/expected/test_sql_coll_func.sh_c76a24a209987e4c668c87588c12b8f34294b144.out b/test/expected/test_sql_coll_func.sh_c76a24a209987e4c668c87588c12b8f34294b144.out
new file mode 100644
index 0000000..913c6b3
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_c76a24a209987e4c668c87588c12b8f34294b144.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column '' < '192.168.1.2' collate ipaddress: 1
diff --git a/test/expected/test_sql_coll_func.sh_cacb045d2bce6dc298c4da3d96bdc34dab2404df.err b/test/expected/test_sql_coll_func.sh_cacb045d2bce6dc298c4da3d96bdc34dab2404df.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_cacb045d2bce6dc298c4da3d96bdc34dab2404df.err
diff --git a/test/expected/test_sql_coll_func.sh_cacb045d2bce6dc298c4da3d96bdc34dab2404df.out b/test/expected/test_sql_coll_func.sh_cacb045d2bce6dc298c4da3d96bdc34dab2404df.out
new file mode 100644
index 0000000..2718d82
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_cacb045d2bce6dc298c4da3d96bdc34dab2404df.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column 'file10.txt' < 'file2.txt': 1
diff --git a/test/expected/test_sql_coll_func.sh_cae4bc239c924bbc05a0b099b63f0e3af7560976.err b/test/expected/test_sql_coll_func.sh_cae4bc239c924bbc05a0b099b63f0e3af7560976.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_cae4bc239c924bbc05a0b099b63f0e3af7560976.err
diff --git a/test/expected/test_sql_coll_func.sh_cae4bc239c924bbc05a0b099b63f0e3af7560976.out b/test/expected/test_sql_coll_func.sh_cae4bc239c924bbc05a0b099b63f0e3af7560976.out
new file mode 100644
index 0000000..5b48b4e
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_cae4bc239c924bbc05a0b099b63f0e3af7560976.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column 'w' < 'e' collate loglevel: 1
diff --git a/test/expected/test_sql_coll_func.sh_d4e3c9f7a38458726900731d2b71c104d591ef14.err b/test/expected/test_sql_coll_func.sh_d4e3c9f7a38458726900731d2b71c104d591ef14.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_d4e3c9f7a38458726900731d2b71c104d591ef14.err
diff --git a/test/expected/test_sql_coll_func.sh_d4e3c9f7a38458726900731d2b71c104d591ef14.out b/test/expected/test_sql_coll_func.sh_d4e3c9f7a38458726900731d2b71c104d591ef14.out
new file mode 100644
index 0000000..bcfa7cb
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_d4e3c9f7a38458726900731d2b71c104d591ef14.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column 'h9.example.com' < 'h10.example.com' collate ipaddress: 1
diff --git a/test/expected/test_sql_coll_func.sh_d5c8f7ab91c3dbe46add7e08f532b17797d9975c.err b/test/expected/test_sql_coll_func.sh_d5c8f7ab91c3dbe46add7e08f532b17797d9975c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_d5c8f7ab91c3dbe46add7e08f532b17797d9975c.err
diff --git a/test/expected/test_sql_coll_func.sh_d5c8f7ab91c3dbe46add7e08f532b17797d9975c.out b/test/expected/test_sql_coll_func.sh_d5c8f7ab91c3dbe46add7e08f532b17797d9975c.out
new file mode 100644
index 0000000..945e0ee
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_d5c8f7ab91c3dbe46add7e08f532b17797d9975c.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column '192.168.1.2' > '' collate ipaddress: 1
diff --git a/test/expected/test_sql_coll_func.sh_eb2c424733ce978d1b6d1dcb93d6e45af7c8fa96.err b/test/expected/test_sql_coll_func.sh_eb2c424733ce978d1b6d1dcb93d6e45af7c8fa96.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_eb2c424733ce978d1b6d1dcb93d6e45af7c8fa96.err
diff --git a/test/expected/test_sql_coll_func.sh_eb2c424733ce978d1b6d1dcb93d6e45af7c8fa96.out b/test/expected/test_sql_coll_func.sh_eb2c424733ce978d1b6d1dcb93d6e45af7c8fa96.out
new file mode 100644
index 0000000..d6a7338
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_eb2c424733ce978d1b6d1dcb93d6e45af7c8fa96.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column 'e' < 'w' collate loglevel: 0
diff --git a/test/expected/test_sql_coll_func.sh_f045e94d921bfcfbded83ee681bf11445a99ff6d.err b/test/expected/test_sql_coll_func.sh_f045e94d921bfcfbded83ee681bf11445a99ff6d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_f045e94d921bfcfbded83ee681bf11445a99ff6d.err
diff --git a/test/expected/test_sql_coll_func.sh_f045e94d921bfcfbded83ee681bf11445a99ff6d.out b/test/expected/test_sql_coll_func.sh_f045e94d921bfcfbded83ee681bf11445a99ff6d.out
new file mode 100644
index 0000000..fc31b19
--- /dev/null
+++ b/test/expected/test_sql_coll_func.sh_f045e94d921bfcfbded83ee681bf11445a99ff6d.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column '192.168.1.2' < 'fe80::a85f:80b4:5cbe:8691' collate ipaddress: 1
diff --git a/test/expected/test_sql_fs_func.sh_109ff42de817b56a9082f605f63af71c0db8c9d7.err b/test/expected/test_sql_fs_func.sh_109ff42de817b56a9082f605f63af71c0db8c9d7.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_109ff42de817b56a9082f605f63af71c0db8c9d7.err
diff --git a/test/expected/test_sql_fs_func.sh_109ff42de817b56a9082f605f63af71c0db8c9d7.out b/test/expected/test_sql_fs_func.sh_109ff42de817b56a9082f605f63af71c0db8c9d7.out
new file mode 100644
index 0000000..b95b567
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_109ff42de817b56a9082f605f63af71c0db8c9d7.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column joinpath(): (null)
diff --git a/test/expected/test_sql_fs_func.sh_17b09f79bfcac1762153ec9650fb1e545a24d8a3.err b/test/expected/test_sql_fs_func.sh_17b09f79bfcac1762153ec9650fb1e545a24d8a3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_17b09f79bfcac1762153ec9650fb1e545a24d8a3.err
diff --git a/test/expected/test_sql_fs_func.sh_17b09f79bfcac1762153ec9650fb1e545a24d8a3.out b/test/expected/test_sql_fs_func.sh_17b09f79bfcac1762153ec9650fb1e545a24d8a3.out
new file mode 100644
index 0000000..cf84c59
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_17b09f79bfcac1762153ec9650fb1e545a24d8a3.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column basename('/'): /
diff --git a/test/expected/test_sql_fs_func.sh_18ddc138b263dd06f3fe81fec05bc4330caffef7.err b/test/expected/test_sql_fs_func.sh_18ddc138b263dd06f3fe81fec05bc4330caffef7.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_18ddc138b263dd06f3fe81fec05bc4330caffef7.err
diff --git a/test/expected/test_sql_fs_func.sh_18ddc138b263dd06f3fe81fec05bc4330caffef7.out b/test/expected/test_sql_fs_func.sh_18ddc138b263dd06f3fe81fec05bc4330caffef7.out
new file mode 100644
index 0000000..7271fd2
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_18ddc138b263dd06f3fe81fec05bc4330caffef7.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column basename('/foo'): foo
diff --git a/test/expected/test_sql_fs_func.sh_20a76db446a0a558dcbdf41033f97d4a22ca1bfa.err b/test/expected/test_sql_fs_func.sh_20a76db446a0a558dcbdf41033f97d4a22ca1bfa.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_20a76db446a0a558dcbdf41033f97d4a22ca1bfa.err
diff --git a/test/expected/test_sql_fs_func.sh_20a76db446a0a558dcbdf41033f97d4a22ca1bfa.out b/test/expected/test_sql_fs_func.sh_20a76db446a0a558dcbdf41033f97d4a22ca1bfa.out
new file mode 100644
index 0000000..bace683
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_20a76db446a0a558dcbdf41033f97d4a22ca1bfa.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column dirname('foo'): .
diff --git a/test/expected/test_sql_fs_func.sh_2c3f66e78deb8721b1d1fe5a787e9958895401d7.err b/test/expected/test_sql_fs_func.sh_2c3f66e78deb8721b1d1fe5a787e9958895401d7.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_2c3f66e78deb8721b1d1fe5a787e9958895401d7.err
diff --git a/test/expected/test_sql_fs_func.sh_2c3f66e78deb8721b1d1fe5a787e9958895401d7.out b/test/expected/test_sql_fs_func.sh_2c3f66e78deb8721b1d1fe5a787e9958895401d7.out
new file mode 100644
index 0000000..983fcf5
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_2c3f66e78deb8721b1d1fe5a787e9958895401d7.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column dirname('/foo//'): /
diff --git a/test/expected/test_sql_fs_func.sh_3ed11101a413e47c3dfe219557b7a6df04a64253.err b/test/expected/test_sql_fs_func.sh_3ed11101a413e47c3dfe219557b7a6df04a64253.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_3ed11101a413e47c3dfe219557b7a6df04a64253.err
diff --git a/test/expected/test_sql_fs_func.sh_3ed11101a413e47c3dfe219557b7a6df04a64253.out b/test/expected/test_sql_fs_func.sh_3ed11101a413e47c3dfe219557b7a6df04a64253.out
new file mode 100644
index 0000000..77491a9
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_3ed11101a413e47c3dfe219557b7a6df04a64253.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column dirname('foo//'): .
diff --git a/test/expected/test_sql_fs_func.sh_469380561dccd79c7249562067107c330838eaad.err b/test/expected/test_sql_fs_func.sh_469380561dccd79c7249562067107c330838eaad.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_469380561dccd79c7249562067107c330838eaad.err
diff --git a/test/expected/test_sql_fs_func.sh_469380561dccd79c7249562067107c330838eaad.out b/test/expected/test_sql_fs_func.sh_469380561dccd79c7249562067107c330838eaad.out
new file mode 100644
index 0000000..6e4accc
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_469380561dccd79c7249562067107c330838eaad.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column dirname(''): .
diff --git a/test/expected/test_sql_fs_func.sh_54b004f301907860d360434b37fd6c81fcc12f99.err b/test/expected/test_sql_fs_func.sh_54b004f301907860d360434b37fd6c81fcc12f99.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_54b004f301907860d360434b37fd6c81fcc12f99.err
diff --git a/test/expected/test_sql_fs_func.sh_54b004f301907860d360434b37fd6c81fcc12f99.out b/test/expected/test_sql_fs_func.sh_54b004f301907860d360434b37fd6c81fcc12f99.out
new file mode 100644
index 0000000..a2f9057
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_54b004f301907860d360434b37fd6c81fcc12f99.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column basename('foo'): foo
diff --git a/test/expected/test_sql_fs_func.sh_73df81c6889d1f06fb3f3b6bf30c6046b3f52c8b.err b/test/expected/test_sql_fs_func.sh_73df81c6889d1f06fb3f3b6bf30c6046b3f52c8b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_73df81c6889d1f06fb3f3b6bf30c6046b3f52c8b.err
diff --git a/test/expected/test_sql_fs_func.sh_73df81c6889d1f06fb3f3b6bf30c6046b3f52c8b.out b/test/expected/test_sql_fs_func.sh_73df81c6889d1f06fb3f3b6bf30c6046b3f52c8b.out
new file mode 100644
index 0000000..49e73dc
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_73df81c6889d1f06fb3f3b6bf30c6046b3f52c8b.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column joinpath('foo', 'bar', 'baz', '/root'): /root
diff --git a/test/expected/test_sql_fs_func.sh_74ca242a126316bcb82ccefd9369f9e43b7fd2e1.err b/test/expected/test_sql_fs_func.sh_74ca242a126316bcb82ccefd9369f9e43b7fd2e1.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_74ca242a126316bcb82ccefd9369f9e43b7fd2e1.err
diff --git a/test/expected/test_sql_fs_func.sh_74ca242a126316bcb82ccefd9369f9e43b7fd2e1.out b/test/expected/test_sql_fs_func.sh_74ca242a126316bcb82ccefd9369f9e43b7fd2e1.out
new file mode 100644
index 0000000..8a5ccfc
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_74ca242a126316bcb82ccefd9369f9e43b7fd2e1.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column joinpath('foo'): foo
diff --git a/test/expected/test_sql_fs_func.sh_7b116cb0ab7a28b866e0d2b80fe8ef0cd25f2aa3.err b/test/expected/test_sql_fs_func.sh_7b116cb0ab7a28b866e0d2b80fe8ef0cd25f2aa3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_7b116cb0ab7a28b866e0d2b80fe8ef0cd25f2aa3.err
diff --git a/test/expected/test_sql_fs_func.sh_7b116cb0ab7a28b866e0d2b80fe8ef0cd25f2aa3.out b/test/expected/test_sql_fs_func.sh_7b116cb0ab7a28b866e0d2b80fe8ef0cd25f2aa3.out
new file mode 100644
index 0000000..b6bb6f9
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_7b116cb0ab7a28b866e0d2b80fe8ef0cd25f2aa3.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column dirname('/'): /
diff --git a/test/expected/test_sql_fs_func.sh_7b5d7dd8d0003ab83e3e5cb0a5ce802fe9a0e3b3.err b/test/expected/test_sql_fs_func.sh_7b5d7dd8d0003ab83e3e5cb0a5ce802fe9a0e3b3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_7b5d7dd8d0003ab83e3e5cb0a5ce802fe9a0e3b3.err
diff --git a/test/expected/test_sql_fs_func.sh_7b5d7dd8d0003ab83e3e5cb0a5ce802fe9a0e3b3.out b/test/expected/test_sql_fs_func.sh_7b5d7dd8d0003ab83e3e5cb0a5ce802fe9a0e3b3.out
new file mode 100644
index 0000000..fcf9b4c
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_7b5d7dd8d0003ab83e3e5cb0a5ce802fe9a0e3b3.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column joinpath('foo', 'bar', 'baz'): foo/bar/baz
diff --git a/test/expected/test_sql_fs_func.sh_917ffde411c1425e8a6addae0170900dcd553986.err b/test/expected/test_sql_fs_func.sh_917ffde411c1425e8a6addae0170900dcd553986.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_917ffde411c1425e8a6addae0170900dcd553986.err
diff --git a/test/expected/test_sql_fs_func.sh_917ffde411c1425e8a6addae0170900dcd553986.out b/test/expected/test_sql_fs_func.sh_917ffde411c1425e8a6addae0170900dcd553986.out
new file mode 100644
index 0000000..864b02c
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_917ffde411c1425e8a6addae0170900dcd553986.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column dirname('/foo'): /
diff --git a/test/expected/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.err b/test/expected/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.err
new file mode 100644
index 0000000..b1d8939
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to readlink(path) failed","attrs":[{"start":8,"end":16,"type":"role","value":46},{"start":17,"end":21,"type":"role","value":45},{"start":8,"end":22,"type":"role","value":59}]},"reason":{"str":"unable to stat path: non-existent-link -- No such file or directory","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.out b/test/expected/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.out
diff --git a/test/expected/test_sql_fs_func.sh_a247b137e71124e496f1beab56c7fe85717c4199.err b/test/expected/test_sql_fs_func.sh_a247b137e71124e496f1beab56c7fe85717c4199.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_a247b137e71124e496f1beab56c7fe85717c4199.err
diff --git a/test/expected/test_sql_fs_func.sh_a247b137e71124e496f1beab56c7fe85717c4199.out b/test/expected/test_sql_fs_func.sh_a247b137e71124e496f1beab56c7fe85717c4199.out
new file mode 100644
index 0000000..2f75397
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_a247b137e71124e496f1beab56c7fe85717c4199.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column basename(''): .
diff --git a/test/expected/test_sql_fs_func.sh_b66242975fd6ecb7260cd96ac29accaf4f4af6ae.err b/test/expected/test_sql_fs_func.sh_b66242975fd6ecb7260cd96ac29accaf4f4af6ae.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_b66242975fd6ecb7260cd96ac29accaf4f4af6ae.err
diff --git a/test/expected/test_sql_fs_func.sh_b66242975fd6ecb7260cd96ac29accaf4f4af6ae.out b/test/expected/test_sql_fs_func.sh_b66242975fd6ecb7260cd96ac29accaf4f4af6ae.out
new file mode 100644
index 0000000..71c2d31
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_b66242975fd6ecb7260cd96ac29accaf4f4af6ae.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column dirname('foo///'): .
diff --git a/test/expected/test_sql_fs_func.sh_c5d78cfbf5594cc27590277353c08a92e2497622.err b/test/expected/test_sql_fs_func.sh_c5d78cfbf5594cc27590277353c08a92e2497622.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_c5d78cfbf5594cc27590277353c08a92e2497622.err
diff --git a/test/expected/test_sql_fs_func.sh_c5d78cfbf5594cc27590277353c08a92e2497622.out b/test/expected/test_sql_fs_func.sh_c5d78cfbf5594cc27590277353c08a92e2497622.out
new file mode 100644
index 0000000..cfb2e26
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_c5d78cfbf5594cc27590277353c08a92e2497622.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column basename('/foo/'): foo
diff --git a/test/expected/test_sql_fs_func.sh_cc402803bf14ee3673089c575f1af87220cb6a72.err b/test/expected/test_sql_fs_func.sh_cc402803bf14ee3673089c575f1af87220cb6a72.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_cc402803bf14ee3673089c575f1af87220cb6a72.err
diff --git a/test/expected/test_sql_fs_func.sh_cc402803bf14ee3673089c575f1af87220cb6a72.out b/test/expected/test_sql_fs_func.sh_cc402803bf14ee3673089c575f1af87220cb6a72.out
new file mode 100644
index 0000000..46a1c9c
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_cc402803bf14ee3673089c575f1af87220cb6a72.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column basename('foo/bar'): bar
diff --git a/test/expected/test_sql_fs_func.sh_cf307d87104e99a1858bb7c4f28ea3068340f188.err b/test/expected/test_sql_fs_func.sh_cf307d87104e99a1858bb7c4f28ea3068340f188.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_cf307d87104e99a1858bb7c4f28ea3068340f188.err
diff --git a/test/expected/test_sql_fs_func.sh_cf307d87104e99a1858bb7c4f28ea3068340f188.out b/test/expected/test_sql_fs_func.sh_cf307d87104e99a1858bb7c4f28ea3068340f188.out
new file mode 100644
index 0000000..01ff27e
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_cf307d87104e99a1858bb7c4f28ea3068340f188.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column basename('/foo///'): foo
diff --git a/test/expected/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.err b/test/expected/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.err
new file mode 100644
index 0000000..0316795
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to realpath(path) failed","attrs":[{"start":8,"end":16,"type":"role","value":46},{"start":17,"end":21,"type":"role","value":45},{"start":8,"end":22,"type":"role","value":59}]},"reason":{"str":"Could not get real path for non-existent-path -- No such file or directory","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.out b/test/expected/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.out
diff --git a/test/expected/test_sql_fs_func.sh_d51ad77cd67a2a691838c9d95142638df1c07360.err b/test/expected/test_sql_fs_func.sh_d51ad77cd67a2a691838c9d95142638df1c07360.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_d51ad77cd67a2a691838c9d95142638df1c07360.err
diff --git a/test/expected/test_sql_fs_func.sh_d51ad77cd67a2a691838c9d95142638df1c07360.out b/test/expected/test_sql_fs_func.sh_d51ad77cd67a2a691838c9d95142638df1c07360.out
new file mode 100644
index 0000000..0d744ab
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_d51ad77cd67a2a691838c9d95142638df1c07360.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column dirname('/foo/bar'): /foo
diff --git a/test/expected/test_sql_fs_func.sh_e24cf3f35643f945392e7d7a4ca82fea98b4519e.err b/test/expected/test_sql_fs_func.sh_e24cf3f35643f945392e7d7a4ca82fea98b4519e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_e24cf3f35643f945392e7d7a4ca82fea98b4519e.err
diff --git a/test/expected/test_sql_fs_func.sh_e24cf3f35643f945392e7d7a4ca82fea98b4519e.out b/test/expected/test_sql_fs_func.sh_e24cf3f35643f945392e7d7a4ca82fea98b4519e.out
new file mode 100644
index 0000000..6306be6
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_e24cf3f35643f945392e7d7a4ca82fea98b4519e.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column basename('//'): /
diff --git a/test/expected/test_sql_fs_func.sh_f31f240313ddec806aa6f353ceed707dfd9aaf16.err b/test/expected/test_sql_fs_func.sh_f31f240313ddec806aa6f353ceed707dfd9aaf16.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_f31f240313ddec806aa6f353ceed707dfd9aaf16.err
diff --git a/test/expected/test_sql_fs_func.sh_f31f240313ddec806aa6f353ceed707dfd9aaf16.out b/test/expected/test_sql_fs_func.sh_f31f240313ddec806aa6f353ceed707dfd9aaf16.out
new file mode 100644
index 0000000..00c5d02
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_f31f240313ddec806aa6f353ceed707dfd9aaf16.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column readlink('sql_fs_readlink_test.lnk'): sql_fs_readlink_test
diff --git a/test/expected/test_sql_indexes.sh_026dd9752b6101e0791689d3a2026f7e517e36f5.err b/test/expected/test_sql_indexes.sh_026dd9752b6101e0791689d3a2026f7e517e36f5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_026dd9752b6101e0791689d3a2026f7e517e36f5.err
diff --git a/test/expected/test_sql_indexes.sh_026dd9752b6101e0791689d3a2026f7e517e36f5.out b/test/expected/test_sql_indexes.sh_026dd9752b6101e0791689d3a2026f7e517e36f5.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_026dd9752b6101e0791689d3a2026f7e517e36f5.out
diff --git a/test/expected/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.err b/test/expected/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.err
diff --git a/test/expected/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.out b/test/expected/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.out
new file mode 100644
index 0000000..7179021
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.out
@@ -0,0 +1,3 @@
+log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters log_msg_format 
+  1  <NULL> 2009-07-20 22:59:29.000  3000 error   0  <NULL>  <NULL>  <NULL>  
+ 3  <NULL> 2013-02-15 06:00:31.000  112777262000 error   0  <NULL>  <NULL>  <NULL>  
diff --git a/test/expected/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.err b/test/expected/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.err
diff --git a/test/expected/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.out b/test/expected/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.out
new file mode 100644
index 0000000..5467779
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.out
@@ -0,0 +1,5 @@
+log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters  c_ip cs_method cs_referer cs_uri_query  cs_uri_stem cs_user_agent cs_username cs_version sc_bytes sc_status cs_host  log_unique_path 
+  0  <NULL> 2009-07-20 22:59:26.000  0 info   0  <NULL>  <NULL>  <NULL> 192.168.202.254 GET  -   <NULL> /vmw/cgi/tramp  gPXE/0.9.7  -  HTTP/1.0   134  200  <NULL> logfile_access_log.0 
+   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
+  2  <NULL> 2009-07-20 22:59:29.000  0 info   0  <NULL>  <NULL>  <NULL> 192.168.202.254 GET  -   <NULL> /vmw/vSphere/default/vmkernel.gz gPXE/0.9.7  -  HTTP/1.0   78929  200  <NULL> logfile_access_log.0 
+ 3  <NULL> 2013-02-15 06:00:31.000  112777262000 error   0  <NULL>  <NULL>  <NULL> 10.112.81.15  <NULL>  -   <NULL> <NULL>  -  -  <NULL>   0  400  <NULL> logfile_access_log.1
diff --git a/test/expected/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.err b/test/expected/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.err
diff --git a/test/expected/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.out b/test/expected/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.out
new file mode 100644
index 0000000..823c4d0
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.out
@@ -0,0 +1,2 @@
+$id $parent $notused  replace($detail, 'SCAN TABLE', 'SCAN') 
+ 2  0  0 SCAN all_logs VIRTUAL TABLE INDEX 1:SEARCH all_logs USING log_level < ? 
diff --git a/test/expected/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.err b/test/expected/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.err
diff --git a/test/expected/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.out b/test/expected/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.out
new file mode 100644
index 0000000..cb2aac6
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.out
@@ -0,0 +1,5 @@
+log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters log_msg_format log_format 
+ 0  <NULL> 2009-07-20 22:59:26.000  0 info   0  <NULL>  <NULL>  <NULL>   access_log 
+  1 <NULL> 2009-07-20 22:59:29.000 3000 error 0 <NULL> <NULL> <NULL> access_log
+ 2  <NULL> 2009-07-20 22:59:29.000  0 info   0  <NULL>  <NULL>  <NULL>   access_log 
+ 3  <NULL> 2013-02-15 06:00:31.000  112777262000 error   0  <NULL>  <NULL>  <NULL>   access_log
diff --git a/test/expected/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.err b/test/expected/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.err
diff --git a/test/expected/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.out b/test/expected/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.out
new file mode 100644
index 0000000..ee48805
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.out
@@ -0,0 +1,3 @@
+log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters log_msg_format 
+ 0  <NULL> 2009-07-20 22:59:26.000  0 info   0  <NULL>  <NULL>  <NULL>  
+ 2 <NULL> 2009-07-20 22:59:29.000 0 info 0 <NULL> <NULL> <NULL>
diff --git a/test/expected/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.err b/test/expected/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.err
diff --git a/test/expected/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.out b/test/expected/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.out
new file mode 100644
index 0000000..2a91985
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.out
@@ -0,0 +1,2 @@
+$id $parent $notused  replace($detail, 'SCAN TABLE', 'SCAN') 
+ 2  0  0 SCAN all_logs VIRTUAL TABLE INDEX 1:SEARCH all_logs USING log_format = ? 
diff --git a/test/expected/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.err b/test/expected/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.err
diff --git a/test/expected/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.out b/test/expected/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.out
new file mode 100644
index 0000000..82958af
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.out
@@ -0,0 +1,2 @@
+$id $parent $notused  replace($detail, 'SCAN TABLE', 'SCAN') 
+ 2  0  0 SCAN access_log VIRTUAL TABLE INDEX 1:SEARCH access_log USING log_path GLOB ? 
diff --git a/test/expected/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.err b/test/expected/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.err
diff --git a/test/expected/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.out b/test/expected/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.out
new file mode 100644
index 0000000..16c7c37
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.out
@@ -0,0 +1,5 @@
+log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters log_msg_format 
+ 0  <NULL> 2009-07-20 22:59:26.000  0 info   0  <NULL>  <NULL>  <NULL>  
+  1 <NULL> 2009-07-20 22:59:29.000 3000 error 0 <NULL> <NULL> <NULL>
+ 2  <NULL> 2009-07-20 22:59:29.000  0 info   0  <NULL>  <NULL>  <NULL>  
+ 3  <NULL> 2013-02-15 06:00:31.000  112777262000 error   0  <NULL>  <NULL>  <NULL>  
diff --git a/test/expected/test_sql_json_func.sh_017d24148f3e28f719429b709f4aa5478f458443.err b/test/expected/test_sql_json_func.sh_017d24148f3e28f719429b709f4aa5478f458443.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_017d24148f3e28f719429b709f4aa5478f458443.err
diff --git a/test/expected/test_sql_json_func.sh_017d24148f3e28f719429b709f4aa5478f458443.out b/test/expected/test_sql_json_func.sh_017d24148f3e28f719429b709f4aa5478f458443.out
new file mode 100644
index 0000000..451a2fa
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_017d24148f3e28f719429b709f4aa5478f458443.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column jget('[null, true, 20, 30, 40]', '/0'): (null)
diff --git a/test/expected/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.err b/test/expected/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.err
new file mode 100644
index 0000000..9654daa
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.err
@@ -0,0 +1,4 @@
+error: sqlite3_exec failed -- parse error: premature EOF
+ [123, true
+ (right here) ------^
+
diff --git a/test/expected/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.out b/test/expected/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.out
diff --git a/test/expected/test_sql_json_func.sh_191436b38db80b1dd9e7e0814c31c5fa7239dc51.err b/test/expected/test_sql_json_func.sh_191436b38db80b1dd9e7e0814c31c5fa7239dc51.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_191436b38db80b1dd9e7e0814c31c5fa7239dc51.err
diff --git a/test/expected/test_sql_json_func.sh_191436b38db80b1dd9e7e0814c31c5fa7239dc51.out b/test/expected/test_sql_json_func.sh_191436b38db80b1dd9e7e0814c31c5fa7239dc51.out
new file mode 100644
index 0000000..531034e
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_191436b38db80b1dd9e7e0814c31c5fa7239dc51.out
@@ -0,0 +1,3 @@
+Row 0:
+ Column id: 1
+ Column stack: {"key1":10,"key2":20,"key3":30}
diff --git a/test/expected/test_sql_json_func.sh_1a74914cbf12fcd5c06935b992f6355acdbcf2d8.err b/test/expected/test_sql_json_func.sh_1a74914cbf12fcd5c06935b992f6355acdbcf2d8.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_1a74914cbf12fcd5c06935b992f6355acdbcf2d8.err
diff --git a/test/expected/test_sql_json_func.sh_1a74914cbf12fcd5c06935b992f6355acdbcf2d8.out b/test/expected/test_sql_json_func.sh_1a74914cbf12fcd5c06935b992f6355acdbcf2d8.out
new file mode 100644
index 0000000..449f615
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_1a74914cbf12fcd5c06935b992f6355acdbcf2d8.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column jget('[null, true, 20, 30, 4.0]', '/4'): 4.0
diff --git a/test/expected/test_sql_json_func.sh_1c1a2d438d2bde95abd9a859d113c3661e650a36.err b/test/expected/test_sql_json_func.sh_1c1a2d438d2bde95abd9a859d113c3661e650a36.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_1c1a2d438d2bde95abd9a859d113c3661e650a36.err
diff --git a/test/expected/test_sql_json_func.sh_1c1a2d438d2bde95abd9a859d113c3661e650a36.out b/test/expected/test_sql_json_func.sh_1c1a2d438d2bde95abd9a859d113c3661e650a36.out
new file mode 100644
index 0000000..fb37801
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_1c1a2d438d2bde95abd9a859d113c3661e650a36.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column jget('[null, true, 20, 30, 40]', '/0/foo'): (null)
diff --git a/test/expected/test_sql_json_func.sh_238417283b8e5db23c992f966e3f106bd178f7d0.err b/test/expected/test_sql_json_func.sh_238417283b8e5db23c992f966e3f106bd178f7d0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_238417283b8e5db23c992f966e3f106bd178f7d0.err
diff --git a/test/expected/test_sql_json_func.sh_238417283b8e5db23c992f966e3f106bd178f7d0.out b/test/expected/test_sql_json_func.sh_238417283b8e5db23c992f966e3f106bd178f7d0.out
new file mode 100644
index 0000000..4b8f538
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_238417283b8e5db23c992f966e3f106bd178f7d0.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column jget('[null, true, 20, 30, 40, {"msg": "Hello"}]', ''): [null,true,20,30,40,{"msg":"Hello"}]
diff --git a/test/expected/test_sql_json_func.sh_32459ba8e8bb9a1d9e63b6c67059d7f065cf4301.err b/test/expected/test_sql_json_func.sh_32459ba8e8bb9a1d9e63b6c67059d7f065cf4301.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_32459ba8e8bb9a1d9e63b6c67059d7f065cf4301.err
diff --git a/test/expected/test_sql_json_func.sh_32459ba8e8bb9a1d9e63b6c67059d7f065cf4301.out b/test/expected/test_sql_json_func.sh_32459ba8e8bb9a1d9e63b6c67059d7f065cf4301.out
new file mode 100644
index 0000000..dd75a1d
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_32459ba8e8bb9a1d9e63b6c67059d7f065cf4301.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column jget('[null, true, 20, 30, 40]', '/abc', 1): 1
diff --git a/test/expected/test_sql_json_func.sh_39c13797278d765c027d3581a0b6e0574f5c56eb.err b/test/expected/test_sql_json_func.sh_39c13797278d765c027d3581a0b6e0574f5c56eb.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_39c13797278d765c027d3581a0b6e0574f5c56eb.err
diff --git a/test/expected/test_sql_json_func.sh_39c13797278d765c027d3581a0b6e0574f5c56eb.out b/test/expected/test_sql_json_func.sh_39c13797278d765c027d3581a0b6e0574f5c56eb.out
new file mode 100644
index 0000000..3d09bd6
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_39c13797278d765c027d3581a0b6e0574f5c56eb.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column json_contains('4', 4): 1
diff --git a/test/expected/test_sql_json_func.sh_3cf4b66d40c4b1979ff14a9eccad8bd5ac48151c.err b/test/expected/test_sql_json_func.sh_3cf4b66d40c4b1979ff14a9eccad8bd5ac48151c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_3cf4b66d40c4b1979ff14a9eccad8bd5ac48151c.err
diff --git a/test/expected/test_sql_json_func.sh_3cf4b66d40c4b1979ff14a9eccad8bd5ac48151c.out b/test/expected/test_sql_json_func.sh_3cf4b66d40c4b1979ff14a9eccad8bd5ac48151c.out
new file mode 100644
index 0000000..0973745
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_3cf4b66d40c4b1979ff14a9eccad8bd5ac48151c.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column res: 0
diff --git a/test/expected/test_sql_json_func.sh_4192f378e320cb3f2c3c228b63ec65de92044704.err b/test/expected/test_sql_json_func.sh_4192f378e320cb3f2c3c228b63ec65de92044704.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_4192f378e320cb3f2c3c228b63ec65de92044704.err
diff --git a/test/expected/test_sql_json_func.sh_4192f378e320cb3f2c3c228b63ec65de92044704.out b/test/expected/test_sql_json_func.sh_4192f378e320cb3f2c3c228b63ec65de92044704.out
new file mode 100644
index 0000000..14f3b8e
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_4192f378e320cb3f2c3c228b63ec65de92044704.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column json_contains('4', 2): 0
diff --git a/test/expected/test_sql_json_func.sh_57c3aecdced547b837177ab02d3776361363e48d.err b/test/expected/test_sql_json_func.sh_57c3aecdced547b837177ab02d3776361363e48d.err
new file mode 100644
index 0000000..73b5594
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_57c3aecdced547b837177ab02d3776361363e48d.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- Uneven number of arguments to json_group_object(), expecting key and value pairs
diff --git a/test/expected/test_sql_json_func.sh_57c3aecdced547b837177ab02d3776361363e48d.out b/test/expected/test_sql_json_func.sh_57c3aecdced547b837177ab02d3776361363e48d.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_57c3aecdced547b837177ab02d3776361363e48d.out
diff --git a/test/expected/test_sql_json_func.sh_5b4a95677a1fc7d11f4b87d92165f56a60a65828.err b/test/expected/test_sql_json_func.sh_5b4a95677a1fc7d11f4b87d92165f56a60a65828.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_5b4a95677a1fc7d11f4b87d92165f56a60a65828.err
diff --git a/test/expected/test_sql_json_func.sh_5b4a95677a1fc7d11f4b87d92165f56a60a65828.out b/test/expected/test_sql_json_func.sh_5b4a95677a1fc7d11f4b87d92165f56a60a65828.out
new file mode 100644
index 0000000..414df03
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_5b4a95677a1fc7d11f4b87d92165f56a60a65828.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column json_concat(NULL, json('{"abc": 1}')): [{"abc":1}]
diff --git a/test/expected/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.err b/test/expected/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.err
new file mode 100644
index 0000000..8bf9a3d
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to json_contains(json, value) failed","attrs":[{"start":8,"end":21,"type":"role","value":46},{"start":22,"end":26,"type":"role","value":45},{"start":28,"end":33,"type":"role","value":45},{"start":8,"end":34,"type":"role","value":59}]},"reason":{"str":"parse error: premature EOF\n [\"hi\", \"bye\", \"solong]\n (right here) ------^","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.out b/test/expected/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.out
diff --git a/test/expected/test_sql_json_func.sh_61417198a652aab93e9495b6e8cf3a634af175c6.err b/test/expected/test_sql_json_func.sh_61417198a652aab93e9495b6e8cf3a634af175c6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_61417198a652aab93e9495b6e8cf3a634af175c6.err
diff --git a/test/expected/test_sql_json_func.sh_61417198a652aab93e9495b6e8cf3a634af175c6.out b/test/expected/test_sql_json_func.sh_61417198a652aab93e9495b6e8cf3a634af175c6.out
new file mode 100644
index 0000000..69e1a5e
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_61417198a652aab93e9495b6e8cf3a634af175c6.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column json_contains('', 4): 0
diff --git a/test/expected/test_sql_json_func.sh_79ab816ac01c9902ddbb0f6f20392ab2f2cd6172.err b/test/expected/test_sql_json_func.sh_79ab816ac01c9902ddbb0f6f20392ab2f2cd6172.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_79ab816ac01c9902ddbb0f6f20392ab2f2cd6172.err
diff --git a/test/expected/test_sql_json_func.sh_79ab816ac01c9902ddbb0f6f20392ab2f2cd6172.out b/test/expected/test_sql_json_func.sh_79ab816ac01c9902ddbb0f6f20392ab2f2cd6172.out
new file mode 100644
index 0000000..9a729a8
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_79ab816ac01c9902ddbb0f6f20392ab2f2cd6172.out
@@ -0,0 +1,3 @@
+Row 0:
+ Column id: 1
+ Column stack: {"1":10,"2":[1,2,3],"3":30.5}
diff --git a/test/expected/test_sql_json_func.sh_7c01aaf09078aaa3f23d127f9e03a317dca066de.err b/test/expected/test_sql_json_func.sh_7c01aaf09078aaa3f23d127f9e03a317dca066de.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_7c01aaf09078aaa3f23d127f9e03a317dca066de.err
diff --git a/test/expected/test_sql_json_func.sh_7c01aaf09078aaa3f23d127f9e03a317dca066de.out b/test/expected/test_sql_json_func.sh_7c01aaf09078aaa3f23d127f9e03a317dca066de.out
new file mode 100644
index 0000000..c70a186
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_7c01aaf09078aaa3f23d127f9e03a317dca066de.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column json_contains('"hi"', 'hi'): 1
diff --git a/test/expected/test_sql_json_func.sh_80c97b22084a06fd765ad22c935616c578968d07.err b/test/expected/test_sql_json_func.sh_80c97b22084a06fd765ad22c935616c578968d07.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_80c97b22084a06fd765ad22c935616c578968d07.err
diff --git a/test/expected/test_sql_json_func.sh_80c97b22084a06fd765ad22c935616c578968d07.out b/test/expected/test_sql_json_func.sh_80c97b22084a06fd765ad22c935616c578968d07.out
new file mode 100644
index 0000000..57ecd1c
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_80c97b22084a06fd765ad22c935616c578968d07.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column jget('[null, true, 20, 30, 40]', '/abc'): (null)
diff --git a/test/expected/test_sql_json_func.sh_83d8615c9ce5dfab5e4373570c1b68b8608155f5.err b/test/expected/test_sql_json_func.sh_83d8615c9ce5dfab5e4373570c1b68b8608155f5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_83d8615c9ce5dfab5e4373570c1b68b8608155f5.err
diff --git a/test/expected/test_sql_json_func.sh_83d8615c9ce5dfab5e4373570c1b68b8608155f5.out b/test/expected/test_sql_json_func.sh_83d8615c9ce5dfab5e4373570c1b68b8608155f5.out
new file mode 100644
index 0000000..375f86a
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_83d8615c9ce5dfab5e4373570c1b68b8608155f5.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column json_contains('"hi"', 'hi there'): 0
diff --git a/test/expected/test_sql_json_func.sh_8cae9740ddfd6ba4c865fca0117b7bea3bb556e5.err b/test/expected/test_sql_json_func.sh_8cae9740ddfd6ba4c865fca0117b7bea3bb556e5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_8cae9740ddfd6ba4c865fca0117b7bea3bb556e5.err
diff --git a/test/expected/test_sql_json_func.sh_8cae9740ddfd6ba4c865fca0117b7bea3bb556e5.out b/test/expected/test_sql_json_func.sh_8cae9740ddfd6ba4c865fca0117b7bea3bb556e5.out
new file mode 100644
index 0000000..3a26b62
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_8cae9740ddfd6ba4c865fca0117b7bea3bb556e5.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column json_concat(json('[null, true, 0]'), 1.0, 2.0): [null,true,0,1.0,2.0]
diff --git a/test/expected/test_sql_json_func.sh_8e229f1b5fa3d3803e9db2f295a8d1a490e1b3db.err b/test/expected/test_sql_json_func.sh_8e229f1b5fa3d3803e9db2f295a8d1a490e1b3db.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_8e229f1b5fa3d3803e9db2f295a8d1a490e1b3db.err
diff --git a/test/expected/test_sql_json_func.sh_8e229f1b5fa3d3803e9db2f295a8d1a490e1b3db.out b/test/expected/test_sql_json_func.sh_8e229f1b5fa3d3803e9db2f295a8d1a490e1b3db.out
new file mode 100644
index 0000000..72ded4f
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_8e229f1b5fa3d3803e9db2f295a8d1a490e1b3db.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column jget('[null, true, 20, 30, 40, {"msg": "Hello"}]', '/5/msg'): Hello
diff --git a/test/expected/test_sql_json_func.sh_8e3724c90bf96dff5d8ba3cfaf4b7e2eaa9e5f66.err b/test/expected/test_sql_json_func.sh_8e3724c90bf96dff5d8ba3cfaf4b7e2eaa9e5f66.err
new file mode 100644
index 0000000..da16df8
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_8e3724c90bf96dff5d8ba3cfaf4b7e2eaa9e5f66.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- expecting JSON value and pointer
diff --git a/test/expected/test_sql_json_func.sh_8e3724c90bf96dff5d8ba3cfaf4b7e2eaa9e5f66.out b/test/expected/test_sql_json_func.sh_8e3724c90bf96dff5d8ba3cfaf4b7e2eaa9e5f66.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_8e3724c90bf96dff5d8ba3cfaf4b7e2eaa9e5f66.out
diff --git a/test/expected/test_sql_json_func.sh_93ba3ba52b0dd2d5a3ba43bcb7c3638c05ecfe75.err b/test/expected/test_sql_json_func.sh_93ba3ba52b0dd2d5a3ba43bcb7c3638c05ecfe75.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_93ba3ba52b0dd2d5a3ba43bcb7c3638c05ecfe75.err
diff --git a/test/expected/test_sql_json_func.sh_93ba3ba52b0dd2d5a3ba43bcb7c3638c05ecfe75.out b/test/expected/test_sql_json_func.sh_93ba3ba52b0dd2d5a3ba43bcb7c3638c05ecfe75.out
new file mode 100644
index 0000000..67ca681
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_93ba3ba52b0dd2d5a3ba43bcb7c3638c05ecfe75.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column jget('[null, true, 20, 30, 40]', '/3'): 30
diff --git a/test/expected/test_sql_json_func.sh_97aa53b581838f5875fe2beda8d1cb245a24f3d6.err b/test/expected/test_sql_json_func.sh_97aa53b581838f5875fe2beda8d1cb245a24f3d6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_97aa53b581838f5875fe2beda8d1cb245a24f3d6.err
diff --git a/test/expected/test_sql_json_func.sh_97aa53b581838f5875fe2beda8d1cb245a24f3d6.out b/test/expected/test_sql_json_func.sh_97aa53b581838f5875fe2beda8d1cb245a24f3d6.out
new file mode 100644
index 0000000..df74174
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_97aa53b581838f5875fe2beda8d1cb245a24f3d6.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column json_concat(NULL, NULL): [null]
diff --git a/test/expected/test_sql_json_func.sh_98a83bc899a78c04d1fdb390b2c1e403c35428c7.err b/test/expected/test_sql_json_func.sh_98a83bc899a78c04d1fdb390b2c1e403c35428c7.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_98a83bc899a78c04d1fdb390b2c1e403c35428c7.err
diff --git a/test/expected/test_sql_json_func.sh_98a83bc899a78c04d1fdb390b2c1e403c35428c7.out b/test/expected/test_sql_json_func.sh_98a83bc899a78c04d1fdb390b2c1e403c35428c7.out
new file mode 100644
index 0000000..6f7f8d0
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_98a83bc899a78c04d1fdb390b2c1e403c35428c7.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column res: 1
diff --git a/test/expected/test_sql_json_func.sh_98ce02dff32d955466524bb167fa45fdf8591788.err b/test/expected/test_sql_json_func.sh_98ce02dff32d955466524bb167fa45fdf8591788.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_98ce02dff32d955466524bb167fa45fdf8591788.err
diff --git a/test/expected/test_sql_json_func.sh_98ce02dff32d955466524bb167fa45fdf8591788.out b/test/expected/test_sql_json_func.sh_98ce02dff32d955466524bb167fa45fdf8591788.out
new file mode 100644
index 0000000..f6f983c
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_98ce02dff32d955466524bb167fa45fdf8591788.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column json_contains(NULL, 4): 0
diff --git a/test/expected/test_sql_json_func.sh_9ab4f51486d7cc99c584721bf0e50c223dac4f18.err b/test/expected/test_sql_json_func.sh_9ab4f51486d7cc99c584721bf0e50c223dac4f18.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_9ab4f51486d7cc99c584721bf0e50c223dac4f18.err
diff --git a/test/expected/test_sql_json_func.sh_9ab4f51486d7cc99c584721bf0e50c223dac4f18.out b/test/expected/test_sql_json_func.sh_9ab4f51486d7cc99c584721bf0e50c223dac4f18.out
new file mode 100644
index 0000000..7019ce5
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_9ab4f51486d7cc99c584721bf0e50c223dac4f18.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column typeof(jget('[null, true, 20, 30, 40]', '/3')): integer
diff --git a/test/expected/test_sql_json_func.sh_9d260ed24b28579ef1dbed25b10c42741e52b023.err b/test/expected/test_sql_json_func.sh_9d260ed24b28579ef1dbed25b10c42741e52b023.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_9d260ed24b28579ef1dbed25b10c42741e52b023.err
diff --git a/test/expected/test_sql_json_func.sh_9d260ed24b28579ef1dbed25b10c42741e52b023.out b/test/expected/test_sql_json_func.sh_9d260ed24b28579ef1dbed25b10c42741e52b023.out
new file mode 100644
index 0000000..1c9c316
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_9d260ed24b28579ef1dbed25b10c42741e52b023.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column json_group_array(column1): []
diff --git a/test/expected/test_sql_json_func.sh_9fbfe3c93467666c45b643f3b8ba990a294c17ff.err b/test/expected/test_sql_json_func.sh_9fbfe3c93467666c45b643f3b8ba990a294c17ff.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_9fbfe3c93467666c45b643f3b8ba990a294c17ff.err
diff --git a/test/expected/test_sql_json_func.sh_9fbfe3c93467666c45b643f3b8ba990a294c17ff.out b/test/expected/test_sql_json_func.sh_9fbfe3c93467666c45b643f3b8ba990a294c17ff.out
new file mode 100644
index 0000000..776dfd6
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_9fbfe3c93467666c45b643f3b8ba990a294c17ff.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column jget('4', null): 4
diff --git a/test/expected/test_sql_json_func.sh_a4ffc64f89cf9917fbc918227fd3c05e54d9e8b5.err b/test/expected/test_sql_json_func.sh_a4ffc64f89cf9917fbc918227fd3c05e54d9e8b5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_a4ffc64f89cf9917fbc918227fd3c05e54d9e8b5.err
diff --git a/test/expected/test_sql_json_func.sh_a4ffc64f89cf9917fbc918227fd3c05e54d9e8b5.out b/test/expected/test_sql_json_func.sh_a4ffc64f89cf9917fbc918227fd3c05e54d9e8b5.out
new file mode 100644
index 0000000..931d5dc
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_a4ffc64f89cf9917fbc918227fd3c05e54d9e8b5.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column json_contains('[[0]]', 0): 0
diff --git a/test/expected/test_sql_json_func.sh_a5e179607645aefce14b9fd12ddef34107afe337.err b/test/expected/test_sql_json_func.sh_a5e179607645aefce14b9fd12ddef34107afe337.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_a5e179607645aefce14b9fd12ddef34107afe337.err
diff --git a/test/expected/test_sql_json_func.sh_a5e179607645aefce14b9fd12ddef34107afe337.out b/test/expected/test_sql_json_func.sh_a5e179607645aefce14b9fd12ddef34107afe337.out
new file mode 100644
index 0000000..f150fde
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_a5e179607645aefce14b9fd12ddef34107afe337.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column stack: [10,null,"hello"]
diff --git a/test/expected/test_sql_json_func.sh_b2fc37822e29f7f59497a02a8968c680b545ee1d.err b/test/expected/test_sql_json_func.sh_b2fc37822e29f7f59497a02a8968c680b545ee1d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_b2fc37822e29f7f59497a02a8968c680b545ee1d.err
diff --git a/test/expected/test_sql_json_func.sh_b2fc37822e29f7f59497a02a8968c680b545ee1d.out b/test/expected/test_sql_json_func.sh_b2fc37822e29f7f59497a02a8968c680b545ee1d.out
new file mode 100644
index 0000000..68ffe43
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_b2fc37822e29f7f59497a02a8968c680b545ee1d.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column json_concat(json('["tag0"]'), 'tag1', 'tag2'): ["tag0","tag1","tag2"]
diff --git a/test/expected/test_sql_json_func.sh_bbd979ed74b46ae1696ed7312a48a436bcf99ec0.err b/test/expected/test_sql_json_func.sh_bbd979ed74b46ae1696ed7312a48a436bcf99ec0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_bbd979ed74b46ae1696ed7312a48a436bcf99ec0.err
diff --git a/test/expected/test_sql_json_func.sh_bbd979ed74b46ae1696ed7312a48a436bcf99ec0.out b/test/expected/test_sql_json_func.sh_bbd979ed74b46ae1696ed7312a48a436bcf99ec0.out
new file mode 100644
index 0000000..e2c7330
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_bbd979ed74b46ae1696ed7312a48a436bcf99ec0.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column jget('[null, true, 20, 30, 40, {"msg": "Hello"}]', '/5'): {"msg":"Hello"}
diff --git a/test/expected/test_sql_json_func.sh_c1ae603d969a5b106328287523c0ddfed07146ad.err b/test/expected/test_sql_json_func.sh_c1ae603d969a5b106328287523c0ddfed07146ad.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_c1ae603d969a5b106328287523c0ddfed07146ad.err
diff --git a/test/expected/test_sql_json_func.sh_c1ae603d969a5b106328287523c0ddfed07146ad.out b/test/expected/test_sql_json_func.sh_c1ae603d969a5b106328287523c0ddfed07146ad.out
new file mode 100644
index 0000000..ae0858b
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_c1ae603d969a5b106328287523c0ddfed07146ad.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column json_contains('null', NULL): 1
diff --git a/test/expected/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.err b/test/expected/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.err
new file mode 100644
index 0000000..f8e3d64
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to json_concat(json, value, ...) failed","attrs":[{"start":8,"end":19,"type":"role","value":46},{"start":20,"end":24,"type":"role","value":45},{"start":26,"end":31,"type":"role","value":45},{"start":8,"end":37,"type":"role","value":59}]},"reason":{"str":"Invalid JSON: parse error: premature EOF\n [null,\n (right here) ------^","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.out b/test/expected/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.out
diff --git a/test/expected/test_sql_json_func.sh_ebafb98307f307ae8d8ab6921c32929aab3a1a16.err b/test/expected/test_sql_json_func.sh_ebafb98307f307ae8d8ab6921c32929aab3a1a16.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_ebafb98307f307ae8d8ab6921c32929aab3a1a16.err
diff --git a/test/expected/test_sql_json_func.sh_ebafb98307f307ae8d8ab6921c32929aab3a1a16.out b/test/expected/test_sql_json_func.sh_ebafb98307f307ae8d8ab6921c32929aab3a1a16.out
new file mode 100644
index 0000000..e187559
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_ebafb98307f307ae8d8ab6921c32929aab3a1a16.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column typeof(jget('[null, true, 20, 30, 4.0]', '/4')): real
diff --git a/test/expected/test_sql_json_func.sh_ee36fbea10a33ca106a211feb05d61ecf8e74634.err b/test/expected/test_sql_json_func.sh_ee36fbea10a33ca106a211feb05d61ecf8e74634.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_ee36fbea10a33ca106a211feb05d61ecf8e74634.err
diff --git a/test/expected/test_sql_json_func.sh_ee36fbea10a33ca106a211feb05d61ecf8e74634.out b/test/expected/test_sql_json_func.sh_ee36fbea10a33ca106a211feb05d61ecf8e74634.out
new file mode 100644
index 0000000..4cdd719
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_ee36fbea10a33ca106a211feb05d61ecf8e74634.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column jget('4', ''): 4
diff --git a/test/expected/test_sql_json_func.sh_f1cbc70771cc75520f807261eac3a88dc2d8fe6b.err b/test/expected/test_sql_json_func.sh_f1cbc70771cc75520f807261eac3a88dc2d8fe6b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_f1cbc70771cc75520f807261eac3a88dc2d8fe6b.err
diff --git a/test/expected/test_sql_json_func.sh_f1cbc70771cc75520f807261eac3a88dc2d8fe6b.out b/test/expected/test_sql_json_func.sh_f1cbc70771cc75520f807261eac3a88dc2d8fe6b.out
new file mode 100644
index 0000000..5e3bd8b
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_f1cbc70771cc75520f807261eac3a88dc2d8fe6b.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column stack: [10,100,20,200,30,300]
diff --git a/test/expected/test_sql_json_func.sh_f34205b59e04f261897ad89f659595c743a18ca9.err b/test/expected/test_sql_json_func.sh_f34205b59e04f261897ad89f659595c743a18ca9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_f34205b59e04f261897ad89f659595c743a18ca9.err
diff --git a/test/expected/test_sql_json_func.sh_f34205b59e04f261897ad89f659595c743a18ca9.out b/test/expected/test_sql_json_func.sh_f34205b59e04f261897ad89f659595c743a18ca9.out
new file mode 100644
index 0000000..95c2d9b
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_f34205b59e04f261897ad89f659595c743a18ca9.out
@@ -0,0 +1,3 @@
+Row 0:
+ Column id: 1
+ Column stack: {"1":10,"2":null,"3":30.5}
diff --git a/test/expected/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.err b/test/expected/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.err
new file mode 100644
index 0000000..e8eef68
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.err
@@ -0,0 +1,4 @@
+error: sqlite3_exec failed -- parse error: premature EOF
+ [null, true, 20, 30, 40
+ (right here) ------^
+
diff --git a/test/expected/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.out b/test/expected/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.out
diff --git a/test/expected/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.err b/test/expected/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.err
diff --git a/test/expected/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.out b/test/expected/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.out
new file mode 100644
index 0000000..19aa1c4
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.out
@@ -0,0 +1,4 @@
+match_index capture_index capture_name capture_count range_start range_stop content 
+ 0  0  <NULL>  3  1  9 abc=def; 
+ 0 1 <NULL> 3 1 4 abc
+ 0  2  <NULL>  3  5  8 def 
diff --git a/test/expected/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.err b/test/expected/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.err
diff --git a/test/expected/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.out b/test/expected/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.out
new file mode 100644
index 0000000..4917183
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.out
@@ -0,0 +1,2 @@
+match_index  content 
+ 0 {"key":"foo","value":4670} 
diff --git a/test/expected/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.err b/test/expected/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.err
diff --git a/test/expected/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.out b/test/expected/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.out
new file mode 100644
index 0000000..78f05ff
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.out
@@ -0,0 +1,27 @@
+log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,log_hostname,log_msgid,log_pid,log_pri,log_procname,log_struct,log_syslog_tag,syslog_version,match_index,content
+2,<NULL>,2022-08-16 00:32:15.000,199000,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,0,"{""value"":""com.apple.cdscheduler""}"
+2,<NULL>,2022-08-16 00:32:15.000,199000,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,1,"{""value"":"" claims selected messages.\n\tThose messages may not appear in standard system log files or in the ASL database.""}"
+5,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,0,"{""value"":""com.apple.install""}"
+5,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,1,"{""value"":"" claims selected messages.\n\tThose messages may not appear in standard system log files or in the ASL database.""}"
+8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,0,"{""value"":""com.apple.authd""}"
+8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,1,"{""value"":"" sharing output destination ""}"
+8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,2,"{""value"":""/var/log/asl""}"
+8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,3,"{""value"":"" with ASL Module ""}"
+8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,4,"{""value"":""com.apple.asl""}"
+8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,5,"{""value"":"".\n\tOutput parameters from ASL Module ""}"
+8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,6,"{""value"":""com.apple.asl""}"
+8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,7,"{""value"":"" override any specified in ASL Module ""}"
+8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,8,"{""value"":""com.apple.authd""}"
+8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,9,"{""value"":"".""}"
+11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,0,"{""value"":""com.apple.authd""}"
+11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,1,"{""value"":"" sharing output destination ""}"
+11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,2,"{""value"":""/var/log/system.log""}"
+11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,3,"{""value"":"" with ASL Module ""}"
+11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,4,"{""value"":""com.apple.asl""}"
+11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,5,"{""value"":"".\n\tOutput parameters from ASL Module ""}"
+11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,6,"{""value"":""com.apple.asl""}"
+11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,7,"{""value"":"" override any specified in ASL Module ""}"
+11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,8,"{""value"":""com.apple.authd""}"
+11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,9,"{""value"":"".""}"
+14,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,0,"{""value"":""com.apple.authd""}"
+14,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,1,"{""value"":"" claims selected messages.\n\tThose messages may not appear in standard system log files or in the ASL database.""}"
diff --git a/test/expected/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.err b/test/expected/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.err
diff --git a/test/expected/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.out b/test/expected/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.out
new file mode 100644
index 0000000..655ce13
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.out
@@ -0,0 +1,2 @@
+match_index  content 
+ 0 {"key":"foo","value":"123e"} 
diff --git a/test/expected/test_sql_regexp.sh_d42e1fcfe6d42394f79da84be2d37e62c4c0ea63.err b/test/expected/test_sql_regexp.sh_d42e1fcfe6d42394f79da84be2d37e62c4c0ea63.err
new file mode 100644
index 0000000..79d28a5
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_d42e1fcfe6d42394f79da84be2d37e62c4c0ea63.err
@@ -0,0 +1,9 @@
+✘ error: unable to parse flags
+ reason: invalid JSON
+ |  reason: lexical error: invalid char in json text.
+ |   |  {abc
+ |   |  (right here) ------^
+ |   --> flags:1
+ |   | {abc
+ --> command-option:1
+ | ;SELECT * from regexp_capture_into_json('foo=0x123e;', '(?<key>\w+)=(?<value>[^;]+)', '{abc')
diff --git a/test/expected/test_sql_regexp.sh_d42e1fcfe6d42394f79da84be2d37e62c4c0ea63.out b/test/expected/test_sql_regexp.sh_d42e1fcfe6d42394f79da84be2d37e62c4c0ea63.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_d42e1fcfe6d42394f79da84be2d37e62c4c0ea63.out
diff --git a/test/expected/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.err b/test/expected/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.err
diff --git a/test/expected/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.out b/test/expected/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.out
new file mode 100644
index 0000000..6e952fb
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.out
@@ -0,0 +1,2 @@
+match_index  content 
+ 0 {"col_0":"abc","col_1":"def"} 
diff --git a/test/expected/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.err b/test/expected/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.err
diff --git a/test/expected/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.out b/test/expected/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.out
new file mode 100644
index 0000000..fef8e26
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.out
@@ -0,0 +1,2 @@
+match_index  content 
+ 0 {"key":"foo","value":"0x123e"} 
diff --git a/test/expected/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.err b/test/expected/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.err
diff --git a/test/expected/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.out b/test/expected/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.out
new file mode 100644
index 0000000..d56bc20
--- /dev/null
+++ b/test/expected/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.out
@@ -0,0 +1,2 @@
+log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters  comp  opid  tid  user  item prc reason  req  sid  src  sub vpxa_update  line  file match_index  lro_id  entity  operation  SessionId  SessionSubId 
+ 2  <NULL> 2022-06-02 11:58:12.376  182 info   0  <NULL>  <NULL>  <NULL> <NULL> e3979f6 45709 <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro  <NULL> <NULL> <NULL>  0 lro-846064 SessionManager vim.SessionManager.sessionIsActive 52626140-422b-6287-b4e4-344192c6a01d 523e0a4b-6e83-6bcd-9342-22502dd89866 
diff --git a/test/expected/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.err b/test/expected/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.err
diff --git a/test/expected/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.out b/test/expected/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.out
new file mode 100644
index 0000000..c92cf49
--- /dev/null
+++ b/test/expected/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.out
@@ -0,0 +1,12 @@
+log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters match_index  name 
+ 2  <NULL> 2022-08-16 00:32:15.000  199000 info   0  <NULL>  <NULL>  <NULL>  0 com.apple.cdscheduler 
+ 5 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 0 com.apple.install
+ 8  <NULL> 2022-08-16 00:32:15.000  0 info   0  <NULL>  <NULL>  <NULL>  0 com.apple.authd 
+ 8 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 1 com.apple.asl
+ 8  <NULL> 2022-08-16 00:32:15.000  0 info   0  <NULL>  <NULL>  <NULL>  2 com.apple.asl 
+ 8 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 3 com.apple.authd
+ 11  <NULL> 2022-08-16 00:32:15.000  0 info   0  <NULL>  <NULL>  <NULL>  0 com.apple.authd 
+ 11 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 1 com.apple.asl
+ 11  <NULL> 2022-08-16 00:32:15.000  0 info   0  <NULL>  <NULL>  <NULL>  2 com.apple.asl 
+ 11 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 3 com.apple.authd
+ 14  <NULL> 2022-08-16 00:32:15.000  0 info   0  <NULL>  <NULL>  <NULL>  0 com.apple.authd 
diff --git a/test/expected/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.err b/test/expected/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.err
diff --git a/test/expected/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.out b/test/expected/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.out
new file mode 100644
index 0000000..738eab3
--- /dev/null
+++ b/test/expected/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.out
@@ -0,0 +1,4 @@
+log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters match_index user pid cpu_pct mem_pct vsz rss tty stat start_time cpu_time  cmd  cmd_name cmd_args 
+ 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> 
+ 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  1 root  2  0  0  0  0 ?  S  Jun01  0:00  [kthreadd] [kthreadd]  <NULL>
+ 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  1 root  2  0  0  0  0 ?  S  Jun01  0:00  [kthreadd] [kthreadd]  <NULL> 
diff --git a/test/expected/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.err b/test/expected/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.err
diff --git a/test/expected/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.out b/test/expected/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.out
new file mode 100644
index 0000000..326fcbd
--- /dev/null
+++ b/test/expected/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.out
@@ -0,0 +1,24 @@
+log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters match_index user pid cpu_pct mem_pct  vsz rss tty stat start_time cpu_time  cmd  cmd_name  cmd_args 
+ 0  <NULL> 2022-06-02 00:01:01.000  0 info   0  <NULL>  <NULL>  <NULL>  0 root  1  0  0 158392 7792 ?  Ss  Jun01  0:14  /lib/systemd/systemd --switched-root --system --deserialize 16 /lib/systemd/systemd  --switched-root --system --deserialize 16 
+ 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>
+ 0  <NULL> 2022-06-02 00:01:01.000  0 info   0  <NULL>  <NULL>  <NULL>  2 root  3  0  0  0  0 ?  I<  Jun01  0:00  [rcu_gp]  [rcu_gp]  <NULL> 
+ 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>
+ 0  <NULL> 2022-06-02 00:01:01.000  0 info   0  <NULL>  <NULL>  <NULL>  4 root  6  0  0  0  0 ?  I<  Jun01  0:00  [kworker/0:0H-kblockd]  [kworker/0:0H-kblockd] <NULL> 
+ 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  0 root  1  0  0 158392 7792 ?  Ss  Jun01  0:14  /lib/systemd/systemd --switched-root --system --deserialize 16 /lib/systemd/systemd  --switched-root --system --deserialize 16
+ 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  1 root  2  0  0  0  0 ?  S  Jun01  0:00  [kthreadd]  [kthreadd]  <NULL> 
+ 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL> <NULL> <NULL> 2 root 3 0 0 0 0 ? I< Jun01 0:00 [rcu_gp] [rcu_gp] <NULL>
+ 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  3 root  4  0  0  0  0 ?  I<  Jun01  0:00  [rcu_par_gp]  [rcu_par_gp]  <NULL> 
+ 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL> <NULL> <NULL> 4 root 6 0 0 0 0 ? I< Jun01 0:00 [kworker/0:0H-kblockd] [kworker/0:0H-kblockd] <NULL>
+ 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  5 root  8  0  0  0  0 ?  I<  Jun01  0:00  [mm_percpu_wq]  [mm_percpu_wq]  <NULL> 
+ 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL> <NULL> <NULL> 6 root 9 0 0 0 0 ? S Jun01 0:00 [ksoftirqd/0] [ksoftirqd/0] <NULL>
+ 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  7 root  10  0  0  0  0 ?  I  Jun01  0:23  [rcu_sched]  [rcu_sched]  <NULL> 
+ 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL> <NULL> <NULL> 8 root 11 0 0 0 0 ? I Jun01 0:00 [rcu_bh] [rcu_bh] <NULL>
+ 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  9 root  12  0  0  0  0 ?  S  Jun01  0:00  [migration/0]  [migration/0]  <NULL> 
+ 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL> <NULL> <NULL> 10 root 14 0 0 0 0 ? S Jun01 0:00 [cpuhp/0] [cpuhp/0] <NULL>
+ 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  0 root  1  0  0 158392 7792 ?  Ss  Jun01  0:14  /lib/systemd/systemd --switched-root --system --deserialize 16 /lib/systemd/systemd  --switched-root --system --deserialize 16 
+ 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL> <NULL> <NULL> 1 root 2 0 0 0 0 ? S Jun01 0:00 [kthreadd] [kthreadd] <NULL>
+ 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  2 root  3  0  0  0  0 ?  I<  Jun01  0:00  [rcu_gp]  [rcu_gp]  <NULL> 
+ 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL> <NULL> <NULL> 3 root 4 0 0 0 0 ? I< Jun01 0:00 [rcu_par_gp] [rcu_par_gp] <NULL>
+ 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  4 root  6  0  0  0  0 ?  I<  Jun01  0:00  [kworker/0:0H-kblockd]  [kworker/0:0H-kblockd] <NULL> 
+ 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL> <NULL> <NULL> 5 root 8 0 0 0 0 ? I< Jun01 0:00 [mm_percpu_wq] [mm_percpu_wq] <NULL>
+ 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  6 root  9  0  0  0  0 ?  S  Jun01  0:00  [ksoftirqd/0]  [ksoftirqd/0]  <NULL> 
diff --git a/test/expected/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.err b/test/expected/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.err
diff --git a/test/expected/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.out b/test/expected/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.out
new file mode 100644
index 0000000..767d785
--- /dev/null
+++ b/test/expected/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.out
@@ -0,0 +1,6 @@
+log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters  comp  opid  tid  user  item prc reason  req  sid  src  sub vpxa_update  line  file match_index  lro_id  entity  operation  SessionId  SessionSubId  log_body 
+ 0  <NULL> 2022-06-02 11:58:12.193  0 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) 
+ 2  <NULL> 2022-06-02 11:58:12.376  182 info   0  <NULL>  <NULL>  <NULL> <NULL> e3979f6  45709 <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro  <NULL> <NULL> <NULL>  0 lro-846064 SessionManager  vim.SessionManager.sessionIsActive  52626140-422b-6287-b4e4-344192c6a01d 523e0a4b-6e83-6bcd-9342-22502dd89866 [VpxLRO] -- BEGIN lro-846064 -- SessionManager -- vim.Sessio⋯287-b4e4-344192c6a01d(523e0a4b-6e83-6bcd-9342-22502dd89866)
+ 4  <NULL> 2022-06-02 11:58:12.623  246 info   0  <NULL>  <NULL>  <NULL> <NULL> l3wrhr4o-cbf-h5:70001034-60 47524 <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro  <NULL> <NULL> <NULL>  0 lro-846066 ChangeLogCollector vim.cdc.ChangeLogCollector.waitForChanges 526861fc-0c28-1930-ae5e-d8c2772bf8c2 52a7a308-9646-c054-f1e7-16131c1a7db6 [VpxLRO] -- BEGIN lro-846066 -- ChangeLogCollector -- vim.c⋯1930-ae5e-d8c2772bf8c2(52a7a308-9646-c054-f1e7-16131c1a7db6) 
+ 6  <NULL> 2022-06-02 11:58:12.736  113 info   0  <NULL>  <NULL>  <NULL> <NULL> 499b440  48432 <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro  <NULL> <NULL> <NULL>  0 lro-846067 SessionManager 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)
+ 8  <NULL> 2022-06-02 11:58:12.740  4 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) 
diff --git a/test/expected/test_sql_str_func.sh_005b9365ac99596e539f47c9fe432668c209b21f.err b/test/expected/test_sql_str_func.sh_005b9365ac99596e539f47c9fe432668c209b21f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_005b9365ac99596e539f47c9fe432668c209b21f.err
diff --git a/test/expected/test_sql_str_func.sh_005b9365ac99596e539f47c9fe432668c209b21f.out b/test/expected/test_sql_str_func.sh_005b9365ac99596e539f47c9fe432668c209b21f.out
new file mode 100644
index 0000000..2c908c0
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_005b9365ac99596e539f47c9fe432668c209b21f.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column repl: abc=def
diff --git a/test/expected/test_sql_str_func.sh_04712488fe50554eb36d3ced80f9a033602f3daa.err b/test/expected/test_sql_str_func.sh_04712488fe50554eb36d3ced80f9a033602f3daa.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_04712488fe50554eb36d3ced80f9a033602f3daa.err
diff --git a/test/expected/test_sql_str_func.sh_04712488fe50554eb36d3ced80f9a033602f3daa.out b/test/expected/test_sql_str_func.sh_04712488fe50554eb36d3ced80f9a033602f3daa.out
new file mode 100644
index 0000000..1d3dddd
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_04712488fe50554eb36d3ced80f9a033602f3daa.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column result: {"col_0":1}
diff --git a/test/expected/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.err b/test/expected/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.err
diff --git a/test/expected/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.out b/test/expected/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.out
new file mode 100644
index 0000000..e144653
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column parse_url('https://example.com/'): {"scheme":"https","user":null,"password":null,"host":"example.com","port":null,"path":"/","query":null,"parameters":null,"fragment":null}
diff --git a/test/expected/test_sql_str_func.sh_11bcc5d32eabbedb6974f160dace9ef1ef0009e9.err b/test/expected/test_sql_str_func.sh_11bcc5d32eabbedb6974f160dace9ef1ef0009e9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_11bcc5d32eabbedb6974f160dace9ef1ef0009e9.err
diff --git a/test/expected/test_sql_str_func.sh_11bcc5d32eabbedb6974f160dace9ef1ef0009e9.out b/test/expected/test_sql_str_func.sh_11bcc5d32eabbedb6974f160dace9ef1ef0009e9.out
new file mode 100644
index 0000000..efa08d6
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_11bcc5d32eabbedb6974f160dace9ef1ef0009e9.out
@@ -0,0 +1,64 @@
+Row 0:
+ Column match_index: 0
+ Column capture_index: 0
+ Column capture_name: (null)
+ Column capture_count: 2
+ Column range_start: 1
+ Column range_stop: 2
+ Column content: 1
+Row 1:
+ Column match_index: 0
+ Column capture_index: 1
+ Column capture_name: (null)
+ Column capture_count: 2
+ Column range_start: 1
+ Column range_stop: 2
+ Column content: 1
+Row 2:
+ Column match_index: 1
+ Column capture_index: 0
+ Column capture_name: (null)
+ Column capture_count: 2
+ Column range_start: 3
+ Column range_stop: 4
+ Column content: 2
+Row 3:
+ Column match_index: 1
+ Column capture_index: 1
+ Column capture_name: (null)
+ Column capture_count: 2
+ Column range_start: 3
+ Column range_stop: 4
+ Column content: 2
+Row 4:
+ Column match_index: 2
+ Column capture_index: 0
+ Column capture_name: (null)
+ Column capture_count: 2
+ Column range_start: 5
+ Column range_stop: 6
+ Column content: 3
+Row 5:
+ Column match_index: 2
+ Column capture_index: 1
+ Column capture_name: (null)
+ Column capture_count: 2
+ Column range_start: 5
+ Column range_stop: 6
+ Column content: 3
+Row 6:
+ Column match_index: 3
+ Column capture_index: 0
+ Column capture_name: (null)
+ Column capture_count: 2
+ Column range_start: 7
+ Column range_stop: 9
+ Column content: 45
+Row 7:
+ Column match_index: 3
+ Column capture_index: 1
+ Column capture_name: (null)
+ Column capture_count: 2
+ Column range_start: 7
+ Column range_stop: 9
+ Column content: 45
diff --git a/test/expected/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.err b/test/expected/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.err
diff --git a/test/expected/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.out b/test/expected/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.out
new file mode 100644
index 0000000..eea58f2
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.out
@@ -0,0 +1,198 @@
+anonymize(bro_id_resp_h)
+10.0.0.1
+10.0.0.2
+10.0.0.2
+10.0.0.2
+10.0.0.2
+10.0.0.2
+10.0.0.2
+10.0.0.3
+10.0.0.4
+10.0.0.1
+10.0.0.4
+10.0.0.4
+10.0.0.5
+10.0.0.4
+10.0.0.4
+10.0.0.1
+10.0.0.6
+10.0.0.4
+10.0.0.7
+10.0.0.8
+10.0.0.8
+10.0.0.8
+10.0.0.8
+10.0.0.8
+10.0.0.8
+10.0.0.8
+10.0.0.8
+10.0.0.9
+10.0.0.10
+10.0.0.5
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.5
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.5
+10.0.0.10
+10.0.0.6
+10.0.0.12
+10.0.0.1
+10.0.0.1
+10.0.0.6
+10.0.0.11
+10.0.0.11
+10.0.0.13
+10.0.0.6
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.13
+10.0.0.6
+10.0.0.6
+10.0.0.6
+10.0.0.6
+10.0.0.6
+10.0.0.6
+10.0.0.6
+10.0.0.6
+10.0.0.14
+10.0.0.6
+10.0.0.14
+10.0.0.15
+10.0.0.16
+10.0.0.6
+10.0.0.16
+10.0.0.17
+10.0.0.5
+10.0.0.1
+10.0.0.17
+10.0.0.15
+10.0.0.17
+10.0.0.18
+10.0.0.18
+10.0.0.10
+10.0.0.5
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.18
+10.0.0.11
+10.0.0.11
+10.0.0.11
+10.0.0.18
+10.0.0.18
+10.0.0.18
+10.0.0.19
+10.0.0.18
+10.0.0.19
+10.0.0.19
+10.0.0.19
+10.0.0.19
+10.0.0.19
+10.0.0.19
+10.0.0.19
+10.0.0.19
+10.0.0.20
+10.0.0.20
+10.0.0.21
+10.0.0.18
+10.0.0.18
+10.0.0.22
+10.0.0.6
+10.0.0.5
+10.0.0.5
+10.0.0.5
+10.0.0.5
+10.0.0.6
+10.0.0.23
+10.0.0.24
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.24
+10.0.0.24
+10.0.0.24
+10.0.0.24
+10.0.0.25
+10.0.0.26
+10.0.0.27
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.25
+10.0.0.26
+10.0.0.24
+10.0.0.24
+10.0.0.27
+10.0.0.23
+10.0.0.25
+10.0.0.26
+10.0.0.24
+10.0.0.24
+10.0.0.27
+10.0.0.25
+10.0.0.26
+10.0.0.24
+10.0.0.24
+10.0.0.27
+10.0.0.28
+10.0.0.23
+10.0.0.25
+10.0.0.24
+10.0.0.24
+10.0.0.27
+10.0.0.26
+10.0.0.23
+10.0.0.25
+10.0.0.26
+10.0.0.24
+10.0.0.24
+10.0.0.27
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.23
+10.0.0.27
+10.0.0.23
+10.0.0.25
+10.0.0.24
+10.0.0.24
+10.0.0.27
+10.0.0.26
diff --git a/test/expected/test_sql_str_func.sh_129e58679e72f3cc5864812026e49a7917baf3d0.err b/test/expected/test_sql_str_func.sh_129e58679e72f3cc5864812026e49a7917baf3d0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_129e58679e72f3cc5864812026e49a7917baf3d0.err
diff --git a/test/expected/test_sql_str_func.sh_129e58679e72f3cc5864812026e49a7917baf3d0.out b/test/expected/test_sql_str_func.sh_129e58679e72f3cc5864812026e49a7917baf3d0.out
new file mode 100644
index 0000000..c474fab
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_129e58679e72f3cc5864812026e49a7917baf3d0.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column gunzip(gzip(1)): 1
diff --git a/test/expected/test_sql_str_func.sh_151a0fd71ef6837c8cbd8a67e315019b5812b079.err b/test/expected/test_sql_str_func.sh_151a0fd71ef6837c8cbd8a67e315019b5812b079.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_151a0fd71ef6837c8cbd8a67e315019b5812b079.err
diff --git a/test/expected/test_sql_str_func.sh_151a0fd71ef6837c8cbd8a67e315019b5812b079.out b/test/expected/test_sql_str_func.sh_151a0fd71ef6837c8cbd8a67e315019b5812b079.out
new file mode 100644
index 0000000..3b8aad8
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_151a0fd71ef6837c8cbd8a67e315019b5812b079.out
@@ -0,0 +1,8 @@
+Row 0:
+ Column match_index: 0
+ Column capture_index: 0
+ Column capture_name: (null)
+ Column capture_count: 1
+ Column range_start: 1
+ Column range_stop: 4
+ Column content: foo
diff --git a/test/expected/test_sql_str_func.sh_1e7362ac3d9690b1b2cfbd320b6129c46ecfbb8a.err b/test/expected/test_sql_str_func.sh_1e7362ac3d9690b1b2cfbd320b6129c46ecfbb8a.err
new file mode 100644
index 0000000..9b9cb88
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_1e7362ac3d9690b1b2cfbd320b6129c46ecfbb8a.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- wrong number of arguments to function humanize_file_size()
diff --git a/test/expected/test_sql_str_func.sh_1e7362ac3d9690b1b2cfbd320b6129c46ecfbb8a.out b/test/expected/test_sql_str_func.sh_1e7362ac3d9690b1b2cfbd320b6129c46ecfbb8a.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_1e7362ac3d9690b1b2cfbd320b6129c46ecfbb8a.out
diff --git a/test/expected/test_sql_str_func.sh_211c5428db0590795072c31cb116ef35281e02b5.err b/test/expected/test_sql_str_func.sh_211c5428db0590795072c31cb116ef35281e02b5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_211c5428db0590795072c31cb116ef35281e02b5.err
diff --git a/test/expected/test_sql_str_func.sh_211c5428db0590795072c31cb116ef35281e02b5.out b/test/expected/test_sql_str_func.sh_211c5428db0590795072c31cb116ef35281e02b5.out
new file mode 100644
index 0000000..13d2b61
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_211c5428db0590795072c31cb116ef35281e02b5.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column endswith('foo.', '.'): 1
diff --git a/test/expected/test_sql_str_func.sh_2f189f0785bb81a1298db35e9e166983b633c73f.err b/test/expected/test_sql_str_func.sh_2f189f0785bb81a1298db35e9e166983b633c73f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_2f189f0785bb81a1298db35e9e166983b633c73f.err
diff --git a/test/expected/test_sql_str_func.sh_2f189f0785bb81a1298db35e9e166983b633c73f.out b/test/expected/test_sql_str_func.sh_2f189f0785bb81a1298db35e9e166983b633c73f.out
new file mode 100644
index 0000000..7942a4a
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_2f189f0785bb81a1298db35e9e166983b633c73f.out
@@ -0,0 +1,8 @@
+Row 0:
+ Column match_index: 0
+ Column capture_index: 0
+ Column capture_name: (null)
+ Column capture_count: 1
+ Column range_start: 1
+ Column range_stop: 8
+ Column content: foo bar
diff --git a/test/expected/test_sql_str_func.sh_30f65162174b886130b94a5dd1f094e7f09debed.err b/test/expected/test_sql_str_func.sh_30f65162174b886130b94a5dd1f094e7f09debed.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_30f65162174b886130b94a5dd1f094e7f09debed.err
diff --git a/test/expected/test_sql_str_func.sh_30f65162174b886130b94a5dd1f094e7f09debed.out b/test/expected/test_sql_str_func.sh_30f65162174b886130b94a5dd1f094e7f09debed.out
new file mode 100644
index 0000000..76ba63e
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_30f65162174b886130b94a5dd1f094e7f09debed.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column unparse_url(parse_url('https://example.com/search?flag&flag2&=def#frag1%20space')): https://example.com/search?flag&flag2&=def#frag1%20space
diff --git a/test/expected/test_sql_str_func.sh_352434d199f7b493668c9f2774472eb69ef0d9f0.err b/test/expected/test_sql_str_func.sh_352434d199f7b493668c9f2774472eb69ef0d9f0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_352434d199f7b493668c9f2774472eb69ef0d9f0.err
diff --git a/test/expected/test_sql_str_func.sh_352434d199f7b493668c9f2774472eb69ef0d9f0.out b/test/expected/test_sql_str_func.sh_352434d199f7b493668c9f2774472eb69ef0d9f0.out
new file mode 100644
index 0000000..8cb1716
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_352434d199f7b493668c9f2774472eb69ef0d9f0.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column regexp('bc', 'abcd'): 1
diff --git a/test/expected/test_sql_str_func.sh_36fc9005464f1106f969559e640d9fa36d5fadad.err b/test/expected/test_sql_str_func.sh_36fc9005464f1106f969559e640d9fa36d5fadad.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_36fc9005464f1106f969559e640d9fa36d5fadad.err
diff --git a/test/expected/test_sql_str_func.sh_36fc9005464f1106f969559e640d9fa36d5fadad.out b/test/expected/test_sql_str_func.sh_36fc9005464f1106f969559e640d9fa36d5fadad.out
new file mode 100644
index 0000000..52f6a45
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_36fc9005464f1106f969559e640d9fa36d5fadad.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column regexp_replace('test 1 2 3', '\d+', 'N'): test N N N
diff --git a/test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.err b/test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.err
new file mode 100644
index 0000000..e3d40ab
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"invalid URL: “https://bad@[fe::”","attrs":[]},"reason":{"str":"Port number was not a decimal number between 0 and 65535","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.out b/test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.out
diff --git a/test/expected/test_sql_str_func.sh_3de72fe5c1751dd212a1cd45cf2caa7f3b52bced.err b/test/expected/test_sql_str_func.sh_3de72fe5c1751dd212a1cd45cf2caa7f3b52bced.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_3de72fe5c1751dd212a1cd45cf2caa7f3b52bced.err
diff --git a/test/expected/test_sql_str_func.sh_3de72fe5c1751dd212a1cd45cf2caa7f3b52bced.out b/test/expected/test_sql_str_func.sh_3de72fe5c1751dd212a1cd45cf2caa7f3b52bced.out
new file mode 100644
index 0000000..e139659
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_3de72fe5c1751dd212a1cd45cf2caa7f3b52bced.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column result: {"foo":1,"bar":2,"baz":20.0,"msg":"hello"}
diff --git a/test/expected/test_sql_str_func.sh_4b402274da152135c6c99456b693e1ecabca0256.err b/test/expected/test_sql_str_func.sh_4b402274da152135c6c99456b693e1ecabca0256.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_4b402274da152135c6c99456b693e1ecabca0256.err
diff --git a/test/expected/test_sql_str_func.sh_4b402274da152135c6c99456b693e1ecabca0256.out b/test/expected/test_sql_str_func.sh_4b402274da152135c6c99456b693e1ecabca0256.out
new file mode 100644
index 0000000..cf88bf4
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_4b402274da152135c6c99456b693e1ecabca0256.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column startswith('foo', '.'): 0
diff --git a/test/expected/test_sql_str_func.sh_51055e40d709332ee772ba5719039314bbf5e411.err b/test/expected/test_sql_str_func.sh_51055e40d709332ee772ba5719039314bbf5e411.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_51055e40d709332ee772ba5719039314bbf5e411.err
diff --git a/test/expected/test_sql_str_func.sh_51055e40d709332ee772ba5719039314bbf5e411.out b/test/expected/test_sql_str_func.sh_51055e40d709332ee772ba5719039314bbf5e411.out
new file mode 100644
index 0000000..a8efc56
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_51055e40d709332ee772ba5719039314bbf5e411.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column endswith('foo', '.'): 0
diff --git a/test/expected/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.err b/test/expected/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.err
diff --git a/test/expected/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.out b/test/expected/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.out
new file mode 100644
index 0000000..061b9ed
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column parse_url('https://example.com/search?flag&flag2&=def'): {"scheme":"https","user":null,"password":null,"host":"example.com","port":null,"path":"/search","query":"flag&flag2&=def","parameters":{"flag":null,"flag2":null,"":"def"},"fragment":null}
diff --git a/test/expected/test_sql_str_func.sh_5203db1a4a81e43a693f339fd26e1ed635da9d5a.err b/test/expected/test_sql_str_func.sh_5203db1a4a81e43a693f339fd26e1ed635da9d5a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_5203db1a4a81e43a693f339fd26e1ed635da9d5a.err
diff --git a/test/expected/test_sql_str_func.sh_5203db1a4a81e43a693f339fd26e1ed635da9d5a.out b/test/expected/test_sql_str_func.sh_5203db1a4a81e43a693f339fd26e1ed635da9d5a.out
new file mode 100644
index 0000000..e062d63
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_5203db1a4a81e43a693f339fd26e1ed635da9d5a.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column result: {"foo":1,"bar":2}
diff --git a/test/expected/test_sql_str_func.sh_5abe3717393fba14ec510a37b4b94fedc67aae8e.err b/test/expected/test_sql_str_func.sh_5abe3717393fba14ec510a37b4b94fedc67aae8e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_5abe3717393fba14ec510a37b4b94fedc67aae8e.err
diff --git a/test/expected/test_sql_str_func.sh_5abe3717393fba14ec510a37b4b94fedc67aae8e.out b/test/expected/test_sql_str_func.sh_5abe3717393fba14ec510a37b4b94fedc67aae8e.out
new file mode 100644
index 0000000..aed4105
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_5abe3717393fba14ec510a37b4b94fedc67aae8e.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column endswith('foo.txt', '.txt'): 1
diff --git a/test/expected/test_sql_str_func.sh_5e436fbd4efb140600999c5208886a5a57b8a30e.err b/test/expected/test_sql_str_func.sh_5e436fbd4efb140600999c5208886a5a57b8a30e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_5e436fbd4efb140600999c5208886a5a57b8a30e.err
diff --git a/test/expected/test_sql_str_func.sh_5e436fbd4efb140600999c5208886a5a57b8a30e.out b/test/expected/test_sql_str_func.sh_5e436fbd4efb140600999c5208886a5a57b8a30e.out
new file mode 100644
index 0000000..22d58c4
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_5e436fbd4efb140600999c5208886a5a57b8a30e.out
@@ -0,0 +1,24 @@
+Row 0:
+ Column match_index: 0
+ Column capture_index: 0
+ Column capture_name: (null)
+ Column capture_count: 3
+ Column range_start: 1
+ Column range_stop: 8
+ Column content: foo bar
+Row 1:
+ Column match_index: 0
+ Column capture_index: 1
+ Column capture_name: (null)
+ Column capture_count: 3
+ Column range_start: 0
+ Column range_stop: 0
+ Column content: (null)
+Row 2:
+ Column match_index: 0
+ Column capture_index: 2
+ Column capture_name: word
+ Column capture_count: 3
+ Column range_start: 5
+ Column range_stop: 8
+ Column content: bar
diff --git a/test/expected/test_sql_str_func.sh_5f9979fa5ce7b76efe714bb27ffbe9f5927ae941.err b/test/expected/test_sql_str_func.sh_5f9979fa5ce7b76efe714bb27ffbe9f5927ae941.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_5f9979fa5ce7b76efe714bb27ffbe9f5927ae941.err
diff --git a/test/expected/test_sql_str_func.sh_5f9979fa5ce7b76efe714bb27ffbe9f5927ae941.out b/test/expected/test_sql_str_func.sh_5f9979fa5ce7b76efe714bb27ffbe9f5927ae941.out
new file mode 100644
index 0000000..3268219
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_5f9979fa5ce7b76efe714bb27ffbe9f5927ae941.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column regexp('[e-z]+', 'ea'): 1
diff --git a/test/expected/test_sql_str_func.sh_60a005a9f0d44ad022b5554415319933d5743c51.err b/test/expected/test_sql_str_func.sh_60a005a9f0d44ad022b5554415319933d5743c51.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_60a005a9f0d44ad022b5554415319933d5743c51.err
diff --git a/test/expected/test_sql_str_func.sh_60a005a9f0d44ad022b5554415319933d5743c51.out b/test/expected/test_sql_str_func.sh_60a005a9f0d44ad022b5554415319933d5743c51.out
new file mode 100644
index 0000000..4645bc6
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_60a005a9f0d44ad022b5554415319933d5743c51.out
@@ -0,0 +1,3 @@
+Row 0:
+ Column typeof(result): text
+ Column result: {"col_0":"","col_1":""}
diff --git a/test/expected/test_sql_str_func.sh_660288b48d9b30244621d873944938f7ef043976.err b/test/expected/test_sql_str_func.sh_660288b48d9b30244621d873944938f7ef043976.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_660288b48d9b30244621d873944938f7ef043976.err
diff --git a/test/expected/test_sql_str_func.sh_660288b48d9b30244621d873944938f7ef043976.out b/test/expected/test_sql_str_func.sh_660288b48d9b30244621d873944938f7ef043976.out
new file mode 100644
index 0000000..0a2022e
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_660288b48d9b30244621d873944938f7ef043976.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column value: foo
diff --git a/test/expected/test_sql_str_func.sh_6607c0dd8baff16930eb3e0daf6354af5b50052b.err b/test/expected/test_sql_str_func.sh_6607c0dd8baff16930eb3e0daf6354af5b50052b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_6607c0dd8baff16930eb3e0daf6354af5b50052b.err
diff --git a/test/expected/test_sql_str_func.sh_6607c0dd8baff16930eb3e0daf6354af5b50052b.out b/test/expected/test_sql_str_func.sh_6607c0dd8baff16930eb3e0daf6354af5b50052b.out
new file mode 100644
index 0000000..b86c36b
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_6607c0dd8baff16930eb3e0daf6354af5b50052b.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column endswith('a', '.txt'): 0
diff --git a/test/expected/test_sql_str_func.sh_69f5d49e62da48e188bd9d6af4bd3adeb21eb7d1.err b/test/expected/test_sql_str_func.sh_69f5d49e62da48e188bd9d6af4bd3adeb21eb7d1.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_69f5d49e62da48e188bd9d6af4bd3adeb21eb7d1.err
diff --git a/test/expected/test_sql_str_func.sh_69f5d49e62da48e188bd9d6af4bd3adeb21eb7d1.out b/test/expected/test_sql_str_func.sh_69f5d49e62da48e188bd9d6af4bd3adeb21eb7d1.out
new file mode 100644
index 0000000..913b8ce
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_69f5d49e62da48e188bd9d6af4bd3adeb21eb7d1.out
@@ -0,0 +1,6 @@
+Row 0:
+ Column match_index: 0
+ Column content: {"col_0":1,"col_1":2}
+Row 1:
+ Column match_index: 1
+ Column content: {"col_0":3,"col_1":4}
diff --git a/test/expected/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.err b/test/expected/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.err
diff --git a/test/expected/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.out b/test/expected/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.out
new file mode 100644
index 0000000..d1dcc93
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column parse_url('https://example.com/sea%26rch?flag&flag2&=def#frag1%20space'): {"scheme":"https","user":null,"password":null,"host":"example.com","port":null,"path":"/sea&rch","query":"flag&flag2&=def","parameters":{"flag":null,"flag2":null,"":"def"},"fragment":"frag1 space"}
diff --git a/test/expected/test_sql_str_func.sh_71f37db33504b2c08a7a3323c482556f53d88100.err b/test/expected/test_sql_str_func.sh_71f37db33504b2c08a7a3323c482556f53d88100.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_71f37db33504b2c08a7a3323c482556f53d88100.err
diff --git a/test/expected/test_sql_str_func.sh_71f37db33504b2c08a7a3323c482556f53d88100.out b/test/expected/test_sql_str_func.sh_71f37db33504b2c08a7a3323c482556f53d88100.out
new file mode 100644
index 0000000..3718bc2
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_71f37db33504b2c08a7a3323c482556f53d88100.out
@@ -0,0 +1,16 @@
+Row 0:
+ Column match_index: 0
+ Column capture_index: 0
+ Column capture_name: (null)
+ Column capture_count: 2
+ Column range_start: 1
+ Column range_stop: 8
+ Column content: foo bar
+Row 1:
+ Column match_index: 0
+ Column capture_index: 1
+ Column capture_name: word
+ Column capture_count: 2
+ Column range_start: 5
+ Column range_stop: 8
+ Column content: bar
diff --git a/test/expected/test_sql_str_func.sh_77fc174faeec1eda687a9373dbdbdd1aaef56e20.err b/test/expected/test_sql_str_func.sh_77fc174faeec1eda687a9373dbdbdd1aaef56e20.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_77fc174faeec1eda687a9373dbdbdd1aaef56e20.err
diff --git a/test/expected/test_sql_str_func.sh_77fc174faeec1eda687a9373dbdbdd1aaef56e20.out b/test/expected/test_sql_str_func.sh_77fc174faeec1eda687a9373dbdbdd1aaef56e20.out
new file mode 100644
index 0000000..bf73241
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_77fc174faeec1eda687a9373dbdbdd1aaef56e20.out
@@ -0,0 +1,3 @@
+Row 0:
+ Column typeof(result): text
+ Column result:
diff --git a/test/expected/test_sql_str_func.sh_790da4aab5af901feeff5426790876eb91b967cb.err b/test/expected/test_sql_str_func.sh_790da4aab5af901feeff5426790876eb91b967cb.err
new file mode 100644
index 0000000..4f2a2e8
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_790da4aab5af901feeff5426790876eb91b967cb.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- Expecting an integer for argument number 0
diff --git a/test/expected/test_sql_str_func.sh_790da4aab5af901feeff5426790876eb91b967cb.out b/test/expected/test_sql_str_func.sh_790da4aab5af901feeff5426790876eb91b967cb.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_790da4aab5af901feeff5426790876eb91b967cb.out
diff --git a/test/expected/test_sql_str_func.sh_7a544cd702579c1fab35870428788ad763cf1143.err b/test/expected/test_sql_str_func.sh_7a544cd702579c1fab35870428788ad763cf1143.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_7a544cd702579c1fab35870428788ad763cf1143.err
diff --git a/test/expected/test_sql_str_func.sh_7a544cd702579c1fab35870428788ad763cf1143.out b/test/expected/test_sql_str_func.sh_7a544cd702579c1fab35870428788ad763cf1143.out
new file mode 100644
index 0000000..ec11590
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_7a544cd702579c1fab35870428788ad763cf1143.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column result: (null)
diff --git a/test/expected/test_sql_str_func.sh_7b6e7c26e8a80459fef55d56156d6ff93c00bd49.err b/test/expected/test_sql_str_func.sh_7b6e7c26e8a80459fef55d56156d6ff93c00bd49.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_7b6e7c26e8a80459fef55d56156d6ff93c00bd49.err
diff --git a/test/expected/test_sql_str_func.sh_7b6e7c26e8a80459fef55d56156d6ff93c00bd49.out b/test/expected/test_sql_str_func.sh_7b6e7c26e8a80459fef55d56156d6ff93c00bd49.out
new file mode 100644
index 0000000..c3b7854
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_7b6e7c26e8a80459fef55d56156d6ff93c00bd49.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column unparse_url(parse_url('https://example.com/search?flag&flag2&=def')): https://example.com/search?flag&flag2&=def
diff --git a/test/expected/test_sql_str_func.sh_7c1e7604ac050e7047201638dca0a6b0fcfd8bdf.err b/test/expected/test_sql_str_func.sh_7c1e7604ac050e7047201638dca0a6b0fcfd8bdf.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_7c1e7604ac050e7047201638dca0a6b0fcfd8bdf.err
diff --git a/test/expected/test_sql_str_func.sh_7c1e7604ac050e7047201638dca0a6b0fcfd8bdf.out b/test/expected/test_sql_str_func.sh_7c1e7604ac050e7047201638dca0a6b0fcfd8bdf.out
new file mode 100644
index 0000000..6233470
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_7c1e7604ac050e7047201638dca0a6b0fcfd8bdf.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column unparse_url(parse_url('https://example.com/search?flag&flag2')): https://example.com/search?flag&flag2
diff --git a/test/expected/test_sql_str_func.sh_7f751009d0db15fc97f9113c5c84db05ff1de9c3.err b/test/expected/test_sql_str_func.sh_7f751009d0db15fc97f9113c5c84db05ff1de9c3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_7f751009d0db15fc97f9113c5c84db05ff1de9c3.err
diff --git a/test/expected/test_sql_str_func.sh_7f751009d0db15fc97f9113c5c84db05ff1de9c3.out b/test/expected/test_sql_str_func.sh_7f751009d0db15fc97f9113c5c84db05ff1de9c3.out
new file mode 100644
index 0000000..b012761
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_7f751009d0db15fc97f9113c5c84db05ff1de9c3.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column length(gzip(1)): 21
diff --git a/test/expected/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.err b/test/expected/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.err
diff --git a/test/expected/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.out b/test/expected/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.out
new file mode 100644
index 0000000..84c7397
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column parse_url('https://example.com/search?flag&flag2'): {"scheme":"https","user":null,"password":null,"host":"example.com","port":null,"path":"/search","query":"flag&flag2","parameters":{"flag":null,"flag2":null},"fragment":null}
diff --git a/test/expected/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.err b/test/expected/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.err
new file mode 100644
index 0000000..2d0c060
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to regexp_match(re, str) failed","attrs":[{"start":8,"end":20,"type":"role","value":46},{"start":21,"end":23,"type":"role","value":45},{"start":25,"end":28,"type":"role","value":45},{"start":8,"end":29,"type":"role","value":59}]},"reason":{"str":"regular expression does not have any captures","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.out b/test/expected/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.out
diff --git a/test/expected/test_sql_str_func.sh_836e3f721a0f945ad27e7aa241121ba739aab618.err b/test/expected/test_sql_str_func.sh_836e3f721a0f945ad27e7aa241121ba739aab618.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_836e3f721a0f945ad27e7aa241121ba739aab618.err
diff --git a/test/expected/test_sql_str_func.sh_836e3f721a0f945ad27e7aa241121ba739aab618.out b/test/expected/test_sql_str_func.sh_836e3f721a0f945ad27e7aa241121ba739aab618.out
new file mode 100644
index 0000000..c803da8
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_836e3f721a0f945ad27e7aa241121ba739aab618.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column encode('foo', null): (null)
diff --git a/test/expected/test_sql_str_func.sh_838e9bc7873b2b238157ba0358e0dfd6a01d837d.err b/test/expected/test_sql_str_func.sh_838e9bc7873b2b238157ba0358e0dfd6a01d837d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_838e9bc7873b2b238157ba0358e0dfd6a01d837d.err
diff --git a/test/expected/test_sql_str_func.sh_838e9bc7873b2b238157ba0358e0dfd6a01d837d.out b/test/expected/test_sql_str_func.sh_838e9bc7873b2b238157ba0358e0dfd6a01d837d.out
new file mode 100644
index 0000000..34bf1a0
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_838e9bc7873b2b238157ba0358e0dfd6a01d837d.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column result: {"foo":"abc","col_0":123}
diff --git a/test/expected/test_sql_str_func.sh_84e77dedec887c5e2433dbc5b130000cd88963bd.err b/test/expected/test_sql_str_func.sh_84e77dedec887c5e2433dbc5b130000cd88963bd.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_84e77dedec887c5e2433dbc5b130000cd88963bd.err
diff --git a/test/expected/test_sql_str_func.sh_84e77dedec887c5e2433dbc5b130000cd88963bd.out b/test/expected/test_sql_str_func.sh_84e77dedec887c5e2433dbc5b130000cd88963bd.out
new file mode 100644
index 0000000..ec11590
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_84e77dedec887c5e2433dbc5b130000cd88963bd.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column result: (null)
diff --git a/test/expected/test_sql_str_func.sh_887afe94962d958aca2e03f7873d58ca93e190b5.err b/test/expected/test_sql_str_func.sh_887afe94962d958aca2e03f7873d58ca93e190b5.err
new file mode 100644
index 0000000..511fbab
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_887afe94962d958aca2e03f7873d58ca93e190b5.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- Expecting an value of 'base64', 'hex', or 'uri' for argument number 1
diff --git a/test/expected/test_sql_str_func.sh_887afe94962d958aca2e03f7873d58ca93e190b5.out b/test/expected/test_sql_str_func.sh_887afe94962d958aca2e03f7873d58ca93e190b5.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_887afe94962d958aca2e03f7873d58ca93e190b5.out
diff --git a/test/expected/test_sql_str_func.sh_8c9ef83431ea75050fd16824075bf72056cf5f53.err b/test/expected/test_sql_str_func.sh_8c9ef83431ea75050fd16824075bf72056cf5f53.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_8c9ef83431ea75050fd16824075bf72056cf5f53.err
diff --git a/test/expected/test_sql_str_func.sh_8c9ef83431ea75050fd16824075bf72056cf5f53.out b/test/expected/test_sql_str_func.sh_8c9ef83431ea75050fd16824075bf72056cf5f53.out
new file mode 100644
index 0000000..724853b
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_8c9ef83431ea75050fd16824075bf72056cf5f53.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column humanize_file_size(10 * 1000 * 1000): 9.5MB
diff --git a/test/expected/test_sql_str_func.sh_8cef54f0617960320b5d3615068eb27333dcf6a3.err b/test/expected/test_sql_str_func.sh_8cef54f0617960320b5d3615068eb27333dcf6a3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_8cef54f0617960320b5d3615068eb27333dcf6a3.err
diff --git a/test/expected/test_sql_str_func.sh_8cef54f0617960320b5d3615068eb27333dcf6a3.out b/test/expected/test_sql_str_func.sh_8cef54f0617960320b5d3615068eb27333dcf6a3.out
new file mode 100644
index 0000000..233afd3
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_8cef54f0617960320b5d3615068eb27333dcf6a3.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column regexp('abcd', 'abcd'): 1
diff --git a/test/expected/test_sql_str_func.sh_8f4f0ed74c4dc6b821e02a44552b694614cd9353.err b/test/expected/test_sql_str_func.sh_8f4f0ed74c4dc6b821e02a44552b694614cd9353.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_8f4f0ed74c4dc6b821e02a44552b694614cd9353.err
diff --git a/test/expected/test_sql_str_func.sh_8f4f0ed74c4dc6b821e02a44552b694614cd9353.out b/test/expected/test_sql_str_func.sh_8f4f0ed74c4dc6b821e02a44552b694614cd9353.out
new file mode 100644
index 0000000..90f0972
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_8f4f0ed74c4dc6b821e02a44552b694614cd9353.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column regexp_match(null, 'abc'): (null)
diff --git a/test/expected/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.err b/test/expected/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.err
diff --git a/test/expected/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.out b/test/expected/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.out
new file mode 100644
index 0000000..f93d348
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.out
@@ -0,0 +1,2 @@
+regexp_match('^(\w+)=([^;]+);', 'abc=def;ghi=jkl;')
+{"col_0":"abc","col_1":"def"}
diff --git a/test/expected/test_sql_str_func.sh_a4d84a0082a7df34c95c2e6e070bbf6effaa5594.err b/test/expected/test_sql_str_func.sh_a4d84a0082a7df34c95c2e6e070bbf6effaa5594.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_a4d84a0082a7df34c95c2e6e070bbf6effaa5594.err
diff --git a/test/expected/test_sql_str_func.sh_a4d84a0082a7df34c95c2e6e070bbf6effaa5594.out b/test/expected/test_sql_str_func.sh_a4d84a0082a7df34c95c2e6e070bbf6effaa5594.out
new file mode 100644
index 0000000..067e846
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_a4d84a0082a7df34c95c2e6e070bbf6effaa5594.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column repl: test{ }1{ }2{ }3
diff --git a/test/expected/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.err b/test/expected/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.err
new file mode 100644
index 0000000..475a9b2
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"invalid URL: “https://example.com:100000”","attrs":[]},"reason":{"str":"Port number was not a decimal number between 0 and 65535","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.out b/test/expected/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.out
diff --git a/test/expected/test_sql_str_func.sh_a65d2fb2f841578619528ca10168ca4d650218e9.err b/test/expected/test_sql_str_func.sh_a65d2fb2f841578619528ca10168ca4d650218e9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_a65d2fb2f841578619528ca10168ca4d650218e9.err
diff --git a/test/expected/test_sql_str_func.sh_a65d2fb2f841578619528ca10168ca4d650218e9.out b/test/expected/test_sql_str_func.sh_a65d2fb2f841578619528ca10168ca4d650218e9.out
new file mode 100644
index 0000000..bf3f522
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_a65d2fb2f841578619528ca10168ca4d650218e9.out
@@ -0,0 +1,3 @@
+Row 0:
+ Column typeof(result): real
+ Column result: 123.456
diff --git a/test/expected/test_sql_str_func.sh_ac7ecdda0fcc4279a4694291edaa2f1411f5262e.err b/test/expected/test_sql_str_func.sh_ac7ecdda0fcc4279a4694291edaa2f1411f5262e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_ac7ecdda0fcc4279a4694291edaa2f1411f5262e.err
diff --git a/test/expected/test_sql_str_func.sh_ac7ecdda0fcc4279a4694291edaa2f1411f5262e.out b/test/expected/test_sql_str_func.sh_ac7ecdda0fcc4279a4694291edaa2f1411f5262e.out
new file mode 100644
index 0000000..0652eef
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_ac7ecdda0fcc4279a4694291edaa2f1411f5262e.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column repl: <\3><\3> <\3><\3>
diff --git a/test/expected/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.err b/test/expected/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.err
diff --git a/test/expected/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.out b/test/expected/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.out
new file mode 100644
index 0000000..e93f55d
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column parse_url('https://example.com'): {"scheme":"https","user":null,"password":null,"host":"example.com","port":null,"path":"/","query":null,"parameters":null,"fragment":null}
diff --git a/test/expected/test_sql_str_func.sh_b0e5bf23bbbc0defa8bb26817782c9d46a778ad8.err b/test/expected/test_sql_str_func.sh_b0e5bf23bbbc0defa8bb26817782c9d46a778ad8.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_b0e5bf23bbbc0defa8bb26817782c9d46a778ad8.err
diff --git a/test/expected/test_sql_str_func.sh_b0e5bf23bbbc0defa8bb26817782c9d46a778ad8.out b/test/expected/test_sql_str_func.sh_b0e5bf23bbbc0defa8bb26817782c9d46a778ad8.out
new file mode 100644
index 0000000..f94307e
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_b0e5bf23bbbc0defa8bb26817782c9d46a778ad8.out
@@ -0,0 +1,16 @@
+Row 0:
+ Column match_index: 0
+ Column capture_index: 0
+ Column capture_name: (null)
+ Column capture_count: 2
+ Column range_start: 1
+ Column range_stop: 8
+ Column content: foo bar
+Row 1:
+ Column match_index: 0
+ Column capture_index: 1
+ Column capture_name: (null)
+ Column capture_count: 2
+ Column range_start: 5
+ Column range_stop: 8
+ Column content: bar
diff --git a/test/expected/test_sql_str_func.sh_b2aafbcaa7befe426d3f9df71c24f16fdc9d2856.err b/test/expected/test_sql_str_func.sh_b2aafbcaa7befe426d3f9df71c24f16fdc9d2856.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_b2aafbcaa7befe426d3f9df71c24f16fdc9d2856.err
diff --git a/test/expected/test_sql_str_func.sh_b2aafbcaa7befe426d3f9df71c24f16fdc9d2856.out b/test/expected/test_sql_str_func.sh_b2aafbcaa7befe426d3f9df71c24f16fdc9d2856.out
new file mode 100644
index 0000000..3e3281a
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_b2aafbcaa7befe426d3f9df71c24f16fdc9d2856.out
@@ -0,0 +1,3 @@
+Row 0:
+ Column typeof(result): integer
+ Column result: 123
diff --git a/test/expected/test_sql_str_func.sh_b81b27abfafbd357d41c407428d41ae0f4bb75e2.err b/test/expected/test_sql_str_func.sh_b81b27abfafbd357d41c407428d41ae0f4bb75e2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_b81b27abfafbd357d41c407428d41ae0f4bb75e2.err
diff --git a/test/expected/test_sql_str_func.sh_b81b27abfafbd357d41c407428d41ae0f4bb75e2.out b/test/expected/test_sql_str_func.sh_b81b27abfafbd357d41c407428d41ae0f4bb75e2.out
new file mode 100644
index 0000000..70e423e
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_b81b27abfafbd357d41c407428d41ae0f4bb75e2.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column unparse_url(parse_url('https://example.com/search?flag')): https://example.com/search?flag
diff --git a/test/expected/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.err b/test/expected/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.err
diff --git a/test/expected/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.out b/test/expected/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.out
new file mode 100644
index 0000000..daf8e0a
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column parse_url('https://example.com/search?flag'): {"scheme":"https","user":null,"password":null,"host":"example.com","port":null,"path":"/search","query":"flag","parameters":{"flag":null},"fragment":null}
diff --git a/test/expected/test_sql_str_func.sh_bfb7088916412360f77683009058b0747784630a.err b/test/expected/test_sql_str_func.sh_bfb7088916412360f77683009058b0747784630a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_bfb7088916412360f77683009058b0747784630a.err
diff --git a/test/expected/test_sql_str_func.sh_bfb7088916412360f77683009058b0747784630a.out b/test/expected/test_sql_str_func.sh_bfb7088916412360f77683009058b0747784630a.out
new file mode 100644
index 0000000..8a4e63d
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_bfb7088916412360f77683009058b0747784630a.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column repl: <\><\> <\><\>
diff --git a/test/expected/test_sql_str_func.sh_bfe8b09e23389af0ef14359b66d68228d0285185.err b/test/expected/test_sql_str_func.sh_bfe8b09e23389af0ef14359b66d68228d0285185.err
new file mode 100644
index 0000000..9b9cb88
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_bfe8b09e23389af0ef14359b66d68228d0285185.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- wrong number of arguments to function humanize_file_size()
diff --git a/test/expected/test_sql_str_func.sh_bfe8b09e23389af0ef14359b66d68228d0285185.out b/test/expected/test_sql_str_func.sh_bfe8b09e23389af0ef14359b66d68228d0285185.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_bfe8b09e23389af0ef14359b66d68228d0285185.out
diff --git a/test/expected/test_sql_str_func.sh_c26269b10b9b9e8485aa97c2be2afb2cc3ee910d.err b/test/expected/test_sql_str_func.sh_c26269b10b9b9e8485aa97c2be2afb2cc3ee910d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_c26269b10b9b9e8485aa97c2be2afb2cc3ee910d.err
diff --git a/test/expected/test_sql_str_func.sh_c26269b10b9b9e8485aa97c2be2afb2cc3ee910d.out b/test/expected/test_sql_str_func.sh_c26269b10b9b9e8485aa97c2be2afb2cc3ee910d.out
new file mode 100644
index 0000000..f4fd280
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_c26269b10b9b9e8485aa97c2be2afb2cc3ee910d.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column gunzip(decode(encode(gzip('Hello, World!'), 'base64'), 'base64')): Hello, World!
diff --git a/test/expected/test_sql_str_func.sh_c9e2f41431bef879364dc37a472ab01f64d89f89.err b/test/expected/test_sql_str_func.sh_c9e2f41431bef879364dc37a472ab01f64d89f89.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_c9e2f41431bef879364dc37a472ab01f64d89f89.err
diff --git a/test/expected/test_sql_str_func.sh_c9e2f41431bef879364dc37a472ab01f64d89f89.out b/test/expected/test_sql_str_func.sh_c9e2f41431bef879364dc37a472ab01f64d89f89.out
new file mode 100644
index 0000000..366c195
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_c9e2f41431bef879364dc37a472ab01f64d89f89.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column regexp('[e-z]+', 'abcd'): 0
diff --git a/test/expected/test_sql_str_func.sh_cc53348c585ee71a7456157ad6b125689813bafe.err b/test/expected/test_sql_str_func.sh_cc53348c585ee71a7456157ad6b125689813bafe.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_cc53348c585ee71a7456157ad6b125689813bafe.err
diff --git a/test/expected/test_sql_str_func.sh_cc53348c585ee71a7456157ad6b125689813bafe.out b/test/expected/test_sql_str_func.sh_cc53348c585ee71a7456157ad6b125689813bafe.out
new file mode 100644
index 0000000..548d900
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_cc53348c585ee71a7456157ad6b125689813bafe.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column encode(null, 'base64'): (null)
diff --git a/test/expected/test_sql_str_func.sh_ce9db1dbc2e5fee87247135d17787ff3af014d77.err b/test/expected/test_sql_str_func.sh_ce9db1dbc2e5fee87247135d17787ff3af014d77.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_ce9db1dbc2e5fee87247135d17787ff3af014d77.err
diff --git a/test/expected/test_sql_str_func.sh_ce9db1dbc2e5fee87247135d17787ff3af014d77.out b/test/expected/test_sql_str_func.sh_ce9db1dbc2e5fee87247135d17787ff3af014d77.out
new file mode 100644
index 0000000..3b62dec
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_ce9db1dbc2e5fee87247135d17787ff3af014d77.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column result: {"foo":1}
diff --git a/test/expected/test_sql_str_func.sh_d3367527118052081a541a660b091f6f495b1c0d.err b/test/expected/test_sql_str_func.sh_d3367527118052081a541a660b091f6f495b1c0d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_d3367527118052081a541a660b091f6f495b1c0d.err
diff --git a/test/expected/test_sql_str_func.sh_d3367527118052081a541a660b091f6f495b1c0d.out b/test/expected/test_sql_str_func.sh_d3367527118052081a541a660b091f6f495b1c0d.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_d3367527118052081a541a660b091f6f495b1c0d.out
diff --git a/test/expected/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.err b/test/expected/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.err
new file mode 100644
index 0000000..f4c8399
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- Invalid regular expression: missing closing parenthesis
diff --git a/test/expected/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.out b/test/expected/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.out
diff --git a/test/expected/test_sql_str_func.sh_d4e805ff08d4ccf62865dbf8db8d526f7ce02f37.err b/test/expected/test_sql_str_func.sh_d4e805ff08d4ccf62865dbf8db8d526f7ce02f37.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_d4e805ff08d4ccf62865dbf8db8d526f7ce02f37.err
diff --git a/test/expected/test_sql_str_func.sh_d4e805ff08d4ccf62865dbf8db8d526f7ce02f37.out b/test/expected/test_sql_str_func.sh_d4e805ff08d4ccf62865dbf8db8d526f7ce02f37.out
new file mode 100644
index 0000000..fb41ca4
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_d4e805ff08d4ccf62865dbf8db8d526f7ce02f37.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column result: {"foo":"abc","col_0":123.456}
diff --git a/test/expected/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.err b/test/expected/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.err
diff --git a/test/expected/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.out b/test/expected/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.out
new file mode 100644
index 0000000..659abf7
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.out
@@ -0,0 +1,47 @@
+[
+ {
+ "log_body": "[VpxLRO] -- BEGIN lro-846063 -- SessionManager -- vim.SessionManager.sessionIsActive -- 528e6e0c-246d-58b5-3234-278c6e0c5d0d(52c289ac-2563-48d5-8a8e-f178da022c0d)",
+ "extract(log_body)": {
+ "col_0": [
+ "VpxLRO"
+ ],
+ "col_1": "--",
+ "col_2": "BEGIN",
+ "col_3": "lro-846063",
+ "col_4": "--",
+ "col_5": "SessionManager",
+ "col_6": "--",
+ "col_7": "vim.SessionManager.sessionIsActive",
+ "col_8": "--",
+ "col_9": "528e6e0c-246d-58b5-3234-278c6e0c5d0d",
+ "col_10": [
+ "52c289ac-2563-48d5-8a8e-f178da022c0d"
+ ]
+ }
+ },
+ {
+ "log_body": "[VpxLRO] -- FINISH lro-846063",
+ "extract(log_body)": {
+ "col_0": [
+ "VpxLRO"
+ ],
+ "col_1": "--",
+ "col_2": "FINISH",
+ "col_3": "lro-846063"
+ }
+ },
+ {
+ "log_body": "Exception was thrown when call vsan-performance-manager for cluster [vim.ClusterComputeResource:domain-c109,Cluster-52] perf metrics: N3Vim5Fault8NotFound9ExceptionE(Fault cause: vim.fault.NotFound\n--> )",
+ "extract(log_body)": {
+ "Exception was thrown when call vsan-performance-manager for cluster [vim.ClusterComputeResource:domain-c109,Cluster-52] perf metrics": {
+ "N3Vim5Fault8NotFound9ExceptionE": [
+ "Fault cause",
+ "vim.fault.NotFound",
+ "\n",
+ "--",
+ ">"
+ ]
+ }
+ }
+ }
+]
diff --git a/test/expected/test_sql_str_func.sh_d8d4cde8bbc98175069be579ff5634de43880b8c.err b/test/expected/test_sql_str_func.sh_d8d4cde8bbc98175069be579ff5634de43880b8c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_d8d4cde8bbc98175069be579ff5634de43880b8c.err
diff --git a/test/expected/test_sql_str_func.sh_d8d4cde8bbc98175069be579ff5634de43880b8c.out b/test/expected/test_sql_str_func.sh_d8d4cde8bbc98175069be579ff5634de43880b8c.out
new file mode 100644
index 0000000..0c22818
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_d8d4cde8bbc98175069be579ff5634de43880b8c.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column startswith('.foo', '.'): 1
diff --git a/test/expected/test_sql_str_func.sh_e68167bf5edc7a7b1defd06bdfb694ffa8b00df2.err b/test/expected/test_sql_str_func.sh_e68167bf5edc7a7b1defd06bdfb694ffa8b00df2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_e68167bf5edc7a7b1defd06bdfb694ffa8b00df2.err
diff --git a/test/expected/test_sql_str_func.sh_e68167bf5edc7a7b1defd06bdfb694ffa8b00df2.out b/test/expected/test_sql_str_func.sh_e68167bf5edc7a7b1defd06bdfb694ffa8b00df2.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_e68167bf5edc7a7b1defd06bdfb694ffa8b00df2.out
diff --git a/test/expected/test_sql_str_func.sh_ec939e82da809965c61f1c00f68d7afaa4a88382.err b/test/expected/test_sql_str_func.sh_ec939e82da809965c61f1c00f68d7afaa4a88382.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_ec939e82da809965c61f1c00f68d7afaa4a88382.err
diff --git a/test/expected/test_sql_str_func.sh_ec939e82da809965c61f1c00f68d7afaa4a88382.out b/test/expected/test_sql_str_func.sh_ec939e82da809965c61f1c00f68d7afaa4a88382.out
new file mode 100644
index 0000000..1fd3a79
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_ec939e82da809965c61f1c00f68d7afaa4a88382.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column repl: {test}{} {1}{} {2}{} {3}{}
diff --git a/test/expected/test_sql_time_func.sh_028e99419eb1ac80b03b36148ef1d4ae1c38c44c.err b/test/expected/test_sql_time_func.sh_028e99419eb1ac80b03b36148ef1d4ae1c38c44c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_028e99419eb1ac80b03b36148ef1d4ae1c38c44c.err
diff --git a/test/expected/test_sql_time_func.sh_028e99419eb1ac80b03b36148ef1d4ae1c38c44c.out b/test/expected/test_sql_time_func.sh_028e99419eb1ac80b03b36148ef1d4ae1c38c44c.out
new file mode 100644
index 0000000..1cbda8c
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_028e99419eb1ac80b03b36148ef1d4ae1c38c44c.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timediff('today', 'yesterday'): 86400.0
diff --git a/test/expected/test_sql_time_func.sh_123c85ff1178743f5cb78efeaf98b637bcbe55ff.err b/test/expected/test_sql_time_func.sh_123c85ff1178743f5cb78efeaf98b637bcbe55ff.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_123c85ff1178743f5cb78efeaf98b637bcbe55ff.err
diff --git a/test/expected/test_sql_time_func.sh_123c85ff1178743f5cb78efeaf98b637bcbe55ff.out b/test/expected/test_sql_time_func.sh_123c85ff1178743f5cb78efeaf98b637bcbe55ff.out
new file mode 100644
index 0000000..f209496
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_123c85ff1178743f5cb78efeaf98b637bcbe55ff.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice(null, null): (null)
diff --git a/test/expected/test_sql_time_func.sh_14737ee9597b7d22519d23fbe34c0eb7d6c09ff2.err b/test/expected/test_sql_time_func.sh_14737ee9597b7d22519d23fbe34c0eb7d6c09ff2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_14737ee9597b7d22519d23fbe34c0eb7d6c09ff2.err
diff --git a/test/expected/test_sql_time_func.sh_14737ee9597b7d22519d23fbe34c0eb7d6c09ff2.out b/test/expected/test_sql_time_func.sh_14737ee9597b7d22519d23fbe34c0eb7d6c09ff2.out
new file mode 100644
index 0000000..8566fb2
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_14737ee9597b7d22519d23fbe34c0eb7d6c09ff2.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice('2015-08-07 11:59:00', 'before 12pm'): 2015-08-07 00:00:00.000
diff --git a/test/expected/test_sql_time_func.sh_1fbeb1ba69a95284eb1d4d052f5068ede7968704.err b/test/expected/test_sql_time_func.sh_1fbeb1ba69a95284eb1d4d052f5068ede7968704.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_1fbeb1ba69a95284eb1d4d052f5068ede7968704.err
diff --git a/test/expected/test_sql_time_func.sh_1fbeb1ba69a95284eb1d4d052f5068ede7968704.out b/test/expected/test_sql_time_func.sh_1fbeb1ba69a95284eb1d4d052f5068ede7968704.out
new file mode 100644
index 0000000..1a4cb45
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_1fbeb1ba69a95284eb1d4d052f5068ede7968704.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice('2015-08-07 11:59:00', 'fri'): 2015-08-07 00:00:00.000
diff --git a/test/expected/test_sql_time_func.sh_20477acc218c96f1385dc97e4d28c80a05c93709.err b/test/expected/test_sql_time_func.sh_20477acc218c96f1385dc97e4d28c80a05c93709.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_20477acc218c96f1385dc97e4d28c80a05c93709.err
diff --git a/test/expected/test_sql_time_func.sh_20477acc218c96f1385dc97e4d28c80a05c93709.out b/test/expected/test_sql_time_func.sh_20477acc218c96f1385dc97e4d28c80a05c93709.out
new file mode 100644
index 0000000..ba1b6f3
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_20477acc218c96f1385dc97e4d28c80a05c93709.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice('2015-08-07 11:59:00', 'after fri'): (null)
diff --git a/test/expected/test_sql_time_func.sh_243454526f6b5e19485db771b4932ddffd6f83a4.err b/test/expected/test_sql_time_func.sh_243454526f6b5e19485db771b4932ddffd6f83a4.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_243454526f6b5e19485db771b4932ddffd6f83a4.err
diff --git a/test/expected/test_sql_time_func.sh_243454526f6b5e19485db771b4932ddffd6f83a4.out b/test/expected/test_sql_time_func.sh_243454526f6b5e19485db771b4932ddffd6f83a4.out
new file mode 100644
index 0000000..7c5c9a3
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_243454526f6b5e19485db771b4932ddffd6f83a4.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice(1616300753.333, '100ms'): 2021-03-21 04:25:53.300
diff --git a/test/expected/test_sql_time_func.sh_28638a132caae65fd89a68459d1b4af0000b8aef.err b/test/expected/test_sql_time_func.sh_28638a132caae65fd89a68459d1b4af0000b8aef.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_28638a132caae65fd89a68459d1b4af0000b8aef.err
diff --git a/test/expected/test_sql_time_func.sh_28638a132caae65fd89a68459d1b4af0000b8aef.out b/test/expected/test_sql_time_func.sh_28638a132caae65fd89a68459d1b4af0000b8aef.out
new file mode 100644
index 0000000..46dac6c
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_28638a132caae65fd89a68459d1b4af0000b8aef.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice('2015-08-07 08:01:33', '8 am'): (null)
diff --git a/test/expected/test_sql_time_func.sh_3b551281347a8144c84f00ade2664db9ac4aacab.err b/test/expected/test_sql_time_func.sh_3b551281347a8144c84f00ade2664db9ac4aacab.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_3b551281347a8144c84f00ade2664db9ac4aacab.err
diff --git a/test/expected/test_sql_time_func.sh_3b551281347a8144c84f00ade2664db9ac4aacab.out b/test/expected/test_sql_time_func.sh_3b551281347a8144c84f00ade2664db9ac4aacab.out
new file mode 100644
index 0000000..e029e45
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_3b551281347a8144c84f00ade2664db9ac4aacab.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timediff('2017-01-02T05:00:00.100', '2017-01-02T05:00:00.000'): 0.1
diff --git a/test/expected/test_sql_time_func.sh_4035ee76938269e9247f9a696927a9ac18cce80a.err b/test/expected/test_sql_time_func.sh_4035ee76938269e9247f9a696927a9ac18cce80a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_4035ee76938269e9247f9a696927a9ac18cce80a.err
diff --git a/test/expected/test_sql_time_func.sh_4035ee76938269e9247f9a696927a9ac18cce80a.out b/test/expected/test_sql_time_func.sh_4035ee76938269e9247f9a696927a9ac18cce80a.out
new file mode 100644
index 0000000..f575185
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_4035ee76938269e9247f9a696927a9ac18cce80a.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice('2015-08-07 12:01:00', '5m'): 2015-08-07 12:00:00.000
diff --git a/test/expected/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.err b/test/expected/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.err
new file mode 100644
index 0000000..fa2cecd
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to timeslice(time, slice) failed","attrs":[{"start":8,"end":17,"type":"role","value":46},{"start":18,"end":22,"type":"role","value":45},{"start":24,"end":29,"type":"role","value":45},{"start":8,"end":30,"type":"role","value":59}]},"reason":{"str":"unable to parse time slice value: blah -- Unrecognized input","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.out b/test/expected/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.out
diff --git a/test/expected/test_sql_time_func.sh_4b96fe71bc2d18955e3625b765a6095ab1f7a75d.err b/test/expected/test_sql_time_func.sh_4b96fe71bc2d18955e3625b765a6095ab1f7a75d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_4b96fe71bc2d18955e3625b765a6095ab1f7a75d.err
diff --git a/test/expected/test_sql_time_func.sh_4b96fe71bc2d18955e3625b765a6095ab1f7a75d.out b/test/expected/test_sql_time_func.sh_4b96fe71bc2d18955e3625b765a6095ab1f7a75d.out
new file mode 100644
index 0000000..088f537
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_4b96fe71bc2d18955e3625b765a6095ab1f7a75d.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice('2015-08-07 12:01:00', 'after 12pm'): 2015-08-07 12:00:00.000
diff --git a/test/expected/test_sql_time_func.sh_53b76b094e47691b5bca106142ee470e82e8e420.err b/test/expected/test_sql_time_func.sh_53b76b094e47691b5bca106142ee470e82e8e420.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_53b76b094e47691b5bca106142ee470e82e8e420.err
diff --git a/test/expected/test_sql_time_func.sh_53b76b094e47691b5bca106142ee470e82e8e420.out b/test/expected/test_sql_time_func.sh_53b76b094e47691b5bca106142ee470e82e8e420.out
new file mode 100644
index 0000000..b5d1a46
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_53b76b094e47691b5bca106142ee470e82e8e420.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice('2015-08-07 12:01:00', '1 month'): 2015-08-03 00:00:00.000
diff --git a/test/expected/test_sql_time_func.sh_6288a9e690d381602b2be5665cc1cd3552733bc2.err b/test/expected/test_sql_time_func.sh_6288a9e690d381602b2be5665cc1cd3552733bc2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_6288a9e690d381602b2be5665cc1cd3552733bc2.err
diff --git a/test/expected/test_sql_time_func.sh_6288a9e690d381602b2be5665cc1cd3552733bc2.out b/test/expected/test_sql_time_func.sh_6288a9e690d381602b2be5665cc1cd3552733bc2.out
new file mode 100644
index 0000000..e1e9cb6
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_6288a9e690d381602b2be5665cc1cd3552733bc2.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice('2015-08-07 12:01:00', 'before 12pm'): (null)
diff --git a/test/expected/test_sql_time_func.sh_652bbd00b5159e22d94970ab1e882997d14b5777.err b/test/expected/test_sql_time_func.sh_652bbd00b5159e22d94970ab1e882997d14b5777.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_652bbd00b5159e22d94970ab1e882997d14b5777.err
diff --git a/test/expected/test_sql_time_func.sh_652bbd00b5159e22d94970ab1e882997d14b5777.out b/test/expected/test_sql_time_func.sh_652bbd00b5159e22d94970ab1e882997d14b5777.out
new file mode 100644
index 0000000..f09bc3f
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_652bbd00b5159e22d94970ab1e882997d14b5777.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice('2015-08-07 11:59:00', 'after 12pm'): (null)
diff --git a/test/expected/test_sql_time_func.sh_6832a58259168622af8b3370b0c89534f98f3f9f.err b/test/expected/test_sql_time_func.sh_6832a58259168622af8b3370b0c89534f98f3f9f.err
new file mode 100644
index 0000000..f8b9601
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_6832a58259168622af8b3370b0c89534f98f3f9f.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- timeslice() expects between 1 and 2 arguments
diff --git a/test/expected/test_sql_time_func.sh_6832a58259168622af8b3370b0c89534f98f3f9f.out b/test/expected/test_sql_time_func.sh_6832a58259168622af8b3370b0c89534f98f3f9f.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_6832a58259168622af8b3370b0c89534f98f3f9f.out
diff --git a/test/expected/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.err b/test/expected/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.err
new file mode 100644
index 0000000..c789e93
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to timeslice(time, slice) failed","attrs":[{"start":8,"end":17,"type":"role","value":46},{"start":18,"end":22,"type":"role","value":45},{"start":24,"end":29,"type":"role","value":45},{"start":8,"end":30,"type":"role","value":59}]},"reason":{"str":"no time slice value given","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.out b/test/expected/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.out
diff --git a/test/expected/test_sql_time_func.sh_7797302b63d73234c9ec9f0405c7c0a748daf8e9.err b/test/expected/test_sql_time_func.sh_7797302b63d73234c9ec9f0405c7c0a748daf8e9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_7797302b63d73234c9ec9f0405c7c0a748daf8e9.err
diff --git a/test/expected/test_sql_time_func.sh_7797302b63d73234c9ec9f0405c7c0a748daf8e9.out b/test/expected/test_sql_time_func.sh_7797302b63d73234c9ec9f0405c7c0a748daf8e9.out
new file mode 100644
index 0000000..1f9d1e1
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_7797302b63d73234c9ec9f0405c7c0a748daf8e9.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timediff('foo', 'yesterday'): (null)
diff --git a/test/expected/test_sql_time_func.sh_9569ab40cb2e51c60f818a6c2729c60d86565e7e.err b/test/expected/test_sql_time_func.sh_9569ab40cb2e51c60f818a6c2729c60d86565e7e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_9569ab40cb2e51c60f818a6c2729c60d86565e7e.err
diff --git a/test/expected/test_sql_time_func.sh_9569ab40cb2e51c60f818a6c2729c60d86565e7e.out b/test/expected/test_sql_time_func.sh_9569ab40cb2e51c60f818a6c2729c60d86565e7e.out
new file mode 100644
index 0000000..de734a9
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_9569ab40cb2e51c60f818a6c2729c60d86565e7e.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice('2015-02-01T05:10:00'): 2015-02-01 05:00:00.000
diff --git a/test/expected/test_sql_time_func.sh_9e649c4bc10f4d178519983358f7092e9c5dfe71.err b/test/expected/test_sql_time_func.sh_9e649c4bc10f4d178519983358f7092e9c5dfe71.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_9e649c4bc10f4d178519983358f7092e9c5dfe71.err
diff --git a/test/expected/test_sql_time_func.sh_9e649c4bc10f4d178519983358f7092e9c5dfe71.out b/test/expected/test_sql_time_func.sh_9e649c4bc10f4d178519983358f7092e9c5dfe71.out
new file mode 100644
index 0000000..74ec041
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_9e649c4bc10f4d178519983358f7092e9c5dfe71.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice('2015-08-07 12:01:00', '1d'): 2015-08-07 00:00:00.000
diff --git a/test/expected/test_sql_time_func.sh_b0257ced663fc444801a5e6cba89c3053acca11e.err b/test/expected/test_sql_time_func.sh_b0257ced663fc444801a5e6cba89c3053acca11e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_b0257ced663fc444801a5e6cba89c3053acca11e.err
diff --git a/test/expected/test_sql_time_func.sh_b0257ced663fc444801a5e6cba89c3053acca11e.out b/test/expected/test_sql_time_func.sh_b0257ced663fc444801a5e6cba89c3053acca11e.out
new file mode 100644
index 0000000..e913429
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_b0257ced663fc444801a5e6cba89c3053acca11e.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice('2015-08-07 12:01:00', 'before fri'): (null)
diff --git a/test/expected/test_sql_time_func.sh_b5f9ec3ea8b4551fd40017398d74c524fb54ebc9.err b/test/expected/test_sql_time_func.sh_b5f9ec3ea8b4551fd40017398d74c524fb54ebc9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_b5f9ec3ea8b4551fd40017398d74c524fb54ebc9.err
diff --git a/test/expected/test_sql_time_func.sh_b5f9ec3ea8b4551fd40017398d74c524fb54ebc9.out b/test/expected/test_sql_time_func.sh_b5f9ec3ea8b4551fd40017398d74c524fb54ebc9.out
new file mode 100644
index 0000000..f18a8b8
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_b5f9ec3ea8b4551fd40017398d74c524fb54ebc9.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice(null): (null)
diff --git a/test/expected/test_sql_time_func.sh_dbe786c096d5a7a5e1d05311b929f1427d8bac79.err b/test/expected/test_sql_time_func.sh_dbe786c096d5a7a5e1d05311b929f1427d8bac79.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_dbe786c096d5a7a5e1d05311b929f1427d8bac79.err
diff --git a/test/expected/test_sql_time_func.sh_dbe786c096d5a7a5e1d05311b929f1427d8bac79.out b/test/expected/test_sql_time_func.sh_dbe786c096d5a7a5e1d05311b929f1427d8bac79.out
new file mode 100644
index 0000000..2729e3c
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_dbe786c096d5a7a5e1d05311b929f1427d8bac79.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice('2015-08-07 12:01:00', '8 am'): (null)
diff --git a/test/expected/test_sql_time_func.sh_f3b1ea49779117bf45f85ad5615fdc5e89193db6.err b/test/expected/test_sql_time_func.sh_f3b1ea49779117bf45f85ad5615fdc5e89193db6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_f3b1ea49779117bf45f85ad5615fdc5e89193db6.err
diff --git a/test/expected/test_sql_time_func.sh_f3b1ea49779117bf45f85ad5615fdc5e89193db6.out b/test/expected/test_sql_time_func.sh_f3b1ea49779117bf45f85ad5615fdc5e89193db6.out
new file mode 100644
index 0000000..8687c5d
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_f3b1ea49779117bf45f85ad5615fdc5e89193db6.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timeslice('2015-08-07 08:00:33', '8 am'): 2015-08-07 08:00:00.000
diff --git a/test/expected/test_sql_views_vtab.sh_28e23f4e98b1acd6478e39844fd9306b444550c3.err b/test/expected/test_sql_views_vtab.sh_28e23f4e98b1acd6478e39844fd9306b444550c3.err
new file mode 100644
index 0000000..6568331
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_28e23f4e98b1acd6478e39844fd9306b444550c3.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: Only the top view in the stack can be deleted
+ --> command-option:2
+ | ;DELETE FROM lnav_view_stack WHERE name = 'log'
diff --git a/test/expected/test_sql_views_vtab.sh_28e23f4e98b1acd6478e39844fd9306b444550c3.out b/test/expected/test_sql_views_vtab.sh_28e23f4e98b1acd6478e39844fd9306b444550c3.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_28e23f4e98b1acd6478e39844fd9306b444550c3.out
diff --git a/test/expected/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.err b/test/expected/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.err
diff --git a/test/expected/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.out b/test/expected/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.out
new file mode 100644
index 0000000..710f668
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.out
@@ -0,0 +1,19 @@
+Build
+
+Lnav follows the usual GNU style for configuring and installing
+software:
+
+Run  ./autogen.sh  if compiling from a cloned repository.
+
+ ▌$ ./configure 
+ ▌$ make 
+ ▌$ sudo make install 
+
+See Also
+
+Angle-grinder[1] is a tool to slice and dice log files on the
+command-line. If you're familiar with the SumoLogic query language,
+you might find this tool more comfortable to work with.
+
+ ▌[1] - https://github.com/rcoh/angle-grinder
+
diff --git a/test/expected/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.err b/test/expected/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.err
diff --git a/test/expected/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.out b/test/expected/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.out
new file mode 100644
index 0000000..bfe5f1e
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.out
@@ -0,0 +1 @@
+2014-10-08 16:56:38,344:WARN:foo bar baz
diff --git a/test/expected/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.err b/test/expected/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.err
new file mode 100644
index 0000000..0c9a2b7
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: filter already exists -- :filter-in vmk
+ --> command-option:3
+ | ;UPDATE lnav_view_filters SET pattern = 'vmk'
diff --git a/test/expected/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.out b/test/expected/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.out
new file mode 100644
index 0000000..48f52f3
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.out
@@ -0,0 +1,3 @@
+view_name filter_id enabled type language pattern 
+log   1  1 in  regex  vmk 
+log   2    1 in regex vmk1
diff --git a/test/expected/test_sql_views_vtab.sh_662b5f9b17aa69a8e3aa9a18acb30d9acf6e2837.err b/test/expected/test_sql_views_vtab.sh_662b5f9b17aa69a8e3aa9a18acb30d9acf6e2837.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_662b5f9b17aa69a8e3aa9a18acb30d9acf6e2837.err
diff --git a/test/expected/test_sql_views_vtab.sh_662b5f9b17aa69a8e3aa9a18acb30d9acf6e2837.out b/test/expected/test_sql_views_vtab.sh_662b5f9b17aa69a8e3aa9a18acb30d9acf6e2837.out
new file mode 100644
index 0000000..2678e6c
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_662b5f9b17aa69a8e3aa9a18acb30d9acf6e2837.out
@@ -0,0 +1 @@
+10.112.81.15 - - [15/Feb/2013:06:00:31 +0000] "-" 400 0 "-" "-"
diff --git a/test/expected/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.err b/test/expected/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.err
diff --git a/test/expected/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.out b/test/expected/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.out
new file mode 100644
index 0000000..1ad5fbf
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.out
@@ -0,0 +1,2 @@
+search 
+warn
diff --git a/test/expected/test_sql_views_vtab.sh_764ea85863d4f0ea3b7cb40850ac7c8fde682d57.err b/test/expected/test_sql_views_vtab.sh_764ea85863d4f0ea3b7cb40850ac7c8fde682d57.err
new file mode 100644
index 0000000..482241e
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_764ea85863d4f0ea3b7cb40850ac7c8fde682d57.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: Expecting a non-empty pattern value
+ --> command-option:1
+ | ;INSERT INTO lnav_view_filters VALUES ('log', 0, 1, 'out', 'regex', '')
diff --git a/test/expected/test_sql_views_vtab.sh_764ea85863d4f0ea3b7cb40850ac7c8fde682d57.out b/test/expected/test_sql_views_vtab.sh_764ea85863d4f0ea3b7cb40850ac7c8fde682d57.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_764ea85863d4f0ea3b7cb40850ac7c8fde682d57.out
diff --git a/test/expected/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.err b/test/expected/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.err
new file mode 100644
index 0000000..6787d65
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: A SQL expression filter already exists
+ --> command-option:2
+ | ;INSERT INTO lnav_view_filters (view_name, language, pattern) VALUES ('log', 'sql', '1')
diff --git a/test/expected/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.out b/test/expected/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.out
new file mode 100644
index 0000000..c99c751
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.out
@@ -0,0 +1,2 @@
+view_name filter_id enabled type language pattern 
+log   0  1 out  sql  1  
diff --git a/test/expected/test_sql_views_vtab.sh_81ffd4ed3f62228494a966512791202cea7e3b57.err b/test/expected/test_sql_views_vtab.sh_81ffd4ed3f62228494a966512791202cea7e3b57.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_81ffd4ed3f62228494a966512791202cea7e3b57.err
diff --git a/test/expected/test_sql_views_vtab.sh_81ffd4ed3f62228494a966512791202cea7e3b57.out b/test/expected/test_sql_views_vtab.sh_81ffd4ed3f62228494a966512791202cea7e3b57.out
new file mode 100644
index 0000000..d51a68c
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_81ffd4ed3f62228494a966512791202cea7e3b57.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_sql_views_vtab.sh_87f53d441e22c1d27c27eaa6003c83da1207c063.err b/test/expected/test_sql_views_vtab.sh_87f53d441e22c1d27c27eaa6003c83da1207c063.err
new file mode 100644
index 0000000..609aacb
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_87f53d441e22c1d27c27eaa6003c83da1207c063.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: Expecting an lnav view name for column number 0
+ --> command-option:1
+ | ;INSERT INTO lnav_view_filters VALUES ('bad', 0, 1, 'out', 'regex', 'abc')
diff --git a/test/expected/test_sql_views_vtab.sh_87f53d441e22c1d27c27eaa6003c83da1207c063.out b/test/expected/test_sql_views_vtab.sh_87f53d441e22c1d27c27eaa6003c83da1207c063.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_87f53d441e22c1d27c27eaa6003c83da1207c063.out
diff --git a/test/expected/test_sql_views_vtab.sh_977cdf5d396522194d6b9e945169ff8073b4296b.err b/test/expected/test_sql_views_vtab.sh_977cdf5d396522194d6b9e945169ff8073b4296b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_977cdf5d396522194d6b9e945169ff8073b4296b.err
diff --git a/test/expected/test_sql_views_vtab.sh_977cdf5d396522194d6b9e945169ff8073b4296b.out b/test/expected/test_sql_views_vtab.sh_977cdf5d396522194d6b9e945169ff8073b4296b.out
new file mode 100644
index 0000000..d51a68c
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_977cdf5d396522194d6b9e945169ff8073b4296b.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_sql_views_vtab.sh_9a5be90921256e90428c77753eca5ea0d31bd910.err b/test/expected/test_sql_views_vtab.sh_9a5be90921256e90428c77753eca5ea0d31bd910.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_9a5be90921256e90428c77753eca5ea0d31bd910.err
diff --git a/test/expected/test_sql_views_vtab.sh_9a5be90921256e90428c77753eca5ea0d31bd910.out b/test/expected/test_sql_views_vtab.sh_9a5be90921256e90428c77753eca5ea0d31bd910.out
new file mode 100644
index 0000000..8ee2f08
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_9a5be90921256e90428c77753eca5ea0d31bd910.out
@@ -0,0 +1,2 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.err b/test/expected/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.err
new file mode 100644
index 0000000..a0853fd
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: filter already exists -- :filter-in vmk
+ --> command-option:2
+ | ;INSERT INTO lnav_view_filters (view_name, pattern, type) VALUES ('log', 'vmk', 'in')
diff --git a/test/expected/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.out b/test/expected/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.out
new file mode 100644
index 0000000..38afb7c
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.out
@@ -0,0 +1,2 @@
+view_name filter_id enabled type language pattern 
+log   1  1 in  regex  vmk 
diff --git a/test/expected/test_sql_views_vtab.sh_ac1f6e9a88608ef8939f9c2f7061a25a86742d46.err b/test/expected/test_sql_views_vtab.sh_ac1f6e9a88608ef8939f9c2f7061a25a86742d46.err
new file mode 100644
index 0000000..66b8e6a
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_ac1f6e9a88608ef8939f9c2f7061a25a86742d46.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: The lnav_view_stack table cannot be updated
+ --> command-option:1
+ | ;UPDATE lnav_view_stack SET name = 'foo'
diff --git a/test/expected/test_sql_views_vtab.sh_ac1f6e9a88608ef8939f9c2f7061a25a86742d46.out b/test/expected/test_sql_views_vtab.sh_ac1f6e9a88608ef8939f9c2f7061a25a86742d46.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_ac1f6e9a88608ef8939f9c2f7061a25a86742d46.out
diff --git a/test/expected/test_sql_views_vtab.sh_ade121f29bedea0d1a54452cc994b2302ad9dabb.err b/test/expected/test_sql_views_vtab.sh_ade121f29bedea0d1a54452cc994b2302ad9dabb.err
new file mode 100644
index 0000000..dd46516
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_ade121f29bedea0d1a54452cc994b2302ad9dabb.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: Invalid regular expression for pattern: missing closing parenthesis at offset 4
+ --> command-option:1
+ | ;INSERT INTO lnav_view_filters VALUES ('log', 0, 1, 'out', 'regex', 'abc(')
diff --git a/test/expected/test_sql_views_vtab.sh_ade121f29bedea0d1a54452cc994b2302ad9dabb.out b/test/expected/test_sql_views_vtab.sh_ade121f29bedea0d1a54452cc994b2302ad9dabb.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_ade121f29bedea0d1a54452cc994b2302ad9dabb.out
diff --git a/test/expected/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.err b/test/expected/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.err
new file mode 100644
index 0000000..4276af6
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: Invalid time: bad-time
+ --> command-option:1
+ | ;UPDATE lnav_views SET top_time = 'bad-time' WHERE name = 'log'
diff --git a/test/expected/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.out b/test/expected/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.out
diff --git a/test/expected/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.err b/test/expected/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.err
diff --git a/test/expected/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.out b/test/expected/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.out
new file mode 100644
index 0000000..bc35132
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.out
@@ -0,0 +1 @@
+2014-10-08 16:56:38,344:WARN:foo bar baz
diff --git a/test/expected/test_sql_views_vtab.sh_e036fabdc6c15f65a374b95c9922212670d494ee.err b/test/expected/test_sql_views_vtab.sh_e036fabdc6c15f65a374b95c9922212670d494ee.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_e036fabdc6c15f65a374b95c9922212670d494ee.err
diff --git a/test/expected/test_sql_views_vtab.sh_e036fabdc6c15f65a374b95c9922212670d494ee.out b/test/expected/test_sql_views_vtab.sh_e036fabdc6c15f65a374b95c9922212670d494ee.out
new file mode 100644
index 0000000..493283c
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_e036fabdc6c15f65a374b95c9922212670d494ee.out
@@ -0,0 +1 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_sql_views_vtab.sh_ec4623bd63ff353f50db44da1231e46a1a4f1824.err b/test/expected/test_sql_views_vtab.sh_ec4623bd63ff353f50db44da1231e46a1a4f1824.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_ec4623bd63ff353f50db44da1231e46a1a4f1824.err
diff --git a/test/expected/test_sql_views_vtab.sh_ec4623bd63ff353f50db44da1231e46a1a4f1824.out b/test/expected/test_sql_views_vtab.sh_ec4623bd63ff353f50db44da1231e46a1a4f1824.out
new file mode 100644
index 0000000..0dd4cb7
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_ec4623bd63ff353f50db44da1231e46a1a4f1824.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_sql_views_vtab.sh_f7476c76ea51cf479a6a79b037e0cb59871b629c.err b/test/expected/test_sql_views_vtab.sh_f7476c76ea51cf479a6a79b037e0cb59871b629c.err
new file mode 100644
index 0000000..aab37c6
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_f7476c76ea51cf479a6a79b037e0cb59871b629c.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: Expecting an lnav view name for column number 0
+ --> command-option:1
+ | ;INSERT INTO lnav_view_filters VALUES (NULL, 0, 1, 'out', 'regex', 'abc')
diff --git a/test/expected/test_sql_views_vtab.sh_f7476c76ea51cf479a6a79b037e0cb59871b629c.out b/test/expected/test_sql_views_vtab.sh_f7476c76ea51cf479a6a79b037e0cb59871b629c.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_f7476c76ea51cf479a6a79b037e0cb59871b629c.out
diff --git a/test/expected/test_sql_views_vtab.sh_f8340cb4c62aabd839ea09235b6ebe41b2bb48f4.err b/test/expected/test_sql_views_vtab.sh_f8340cb4c62aabd839ea09235b6ebe41b2bb48f4.err
new file mode 100644
index 0000000..8a477fc
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_f8340cb4c62aabd839ea09235b6ebe41b2bb48f4.err
@@ -0,0 +1,4 @@
+✘ error: SQL statement failed
+ reason: Expecting an value of 'in' or 'out' for column number 3
+ --> command-option:1
+ | ;INSERT INTO lnav_view_filters VALUES ('log', 0 , 1, 'bad', 'regex', 'abc')
diff --git a/test/expected/test_sql_views_vtab.sh_f8340cb4c62aabd839ea09235b6ebe41b2bb48f4.out b/test/expected/test_sql_views_vtab.sh_f8340cb4c62aabd839ea09235b6ebe41b2bb48f4.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_f8340cb4c62aabd839ea09235b6ebe41b2bb48f4.out
diff --git a/test/expected/test_sql_xml_func.sh_46dfa23e2effabf3fa150c4b871fd8d22b1c834d.err b/test/expected/test_sql_xml_func.sh_46dfa23e2effabf3fa150c4b871fd8d22b1c834d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_xml_func.sh_46dfa23e2effabf3fa150c4b871fd8d22b1c834d.err
diff --git a/test/expected/test_sql_xml_func.sh_46dfa23e2effabf3fa150c4b871fd8d22b1c834d.out b/test/expected/test_sql_xml_func.sh_46dfa23e2effabf3fa150c4b871fd8d22b1c834d.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_xml_func.sh_46dfa23e2effabf3fa150c4b871fd8d22b1c834d.out
diff --git a/test/expected/test_sql_xml_func.sh_4effabf11b59580e5f0727199eb74fba049c0cda.err b/test/expected/test_sql_xml_func.sh_4effabf11b59580e5f0727199eb74fba049c0cda.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_xml_func.sh_4effabf11b59580e5f0727199eb74fba049c0cda.err
diff --git a/test/expected/test_sql_xml_func.sh_4effabf11b59580e5f0727199eb74fba049c0cda.out b/test/expected/test_sql_xml_func.sh_4effabf11b59580e5f0727199eb74fba049c0cda.out
new file mode 100644
index 0000000..a4c5713
--- /dev/null
+++ b/test/expected/test_sql_xml_func.sh_4effabf11b59580e5f0727199eb74fba049c0cda.out
@@ -0,0 +1,6 @@
+Row 0:
+ Column result: <def>Hello &gt;</def>
+
+ Column node_path: /abc/def
+ Column node_attr: {}
+ Column node_text: Hello >
diff --git a/test/expected/test_sql_xml_func.sh_8912b59d5b515ab1373a3d9bc635ebabacd01dfd.err b/test/expected/test_sql_xml_func.sh_8912b59d5b515ab1373a3d9bc635ebabacd01dfd.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_xml_func.sh_8912b59d5b515ab1373a3d9bc635ebabacd01dfd.err
diff --git a/test/expected/test_sql_xml_func.sh_8912b59d5b515ab1373a3d9bc635ebabacd01dfd.out b/test/expected/test_sql_xml_func.sh_8912b59d5b515ab1373a3d9bc635ebabacd01dfd.out
new file mode 100644
index 0000000..2800fc5
--- /dev/null
+++ b/test/expected/test_sql_xml_func.sh_8912b59d5b515ab1373a3d9bc635ebabacd01dfd.out
@@ -0,0 +1,6 @@
+Row 0:
+ Column result: <def a="b">ghi</def>
+
+ Column node_path: /abc/def[2]
+ Column node_attr: {"a":"b"}
+ Column node_text: ghi
diff --git a/test/expected/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.err b/test/expected/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.err
new file mode 100644
index 0000000..6ac0f80
--- /dev/null
+++ b/test/expected/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- Invalid XPATH expression at offset 5: Unrecognized node test
diff --git a/test/expected/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.out b/test/expected/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.out
diff --git a/test/expected/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.err b/test/expected/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.err
new file mode 100644
index 0000000..a97d7cd
--- /dev/null
+++ b/test/expected/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- Invalid XML document at offset 3: Error parsing start element tag
diff --git a/test/expected/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.out b/test/expected/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.out
diff --git a/test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.err b/test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.err
new file mode 100644
index 0000000..b7f3a79
--- /dev/null
+++ b/test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.err
@@ -0,0 +1,4 @@
+✘ error: failed to parse YAML content
+ reason: closing ] not found
+ --> command-option:1
+ | ;SELECT yaml_to_json('[abc') 
diff --git a/test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.out b/test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.out
diff --git a/test/expected/test_sql_yaml_func.sh_dc189d02e8979b7ed245d5d750f68b9965984699.err b/test/expected/test_sql_yaml_func.sh_dc189d02e8979b7ed245d5d750f68b9965984699.err
new file mode 100644
index 0000000..b7f3a79
--- /dev/null
+++ b/test/expected/test_sql_yaml_func.sh_dc189d02e8979b7ed245d5d750f68b9965984699.err
@@ -0,0 +1,4 @@
+✘ error: failed to parse YAML content
+ reason: closing ] not found
+ --> command-option:1
+ | ;SELECT yaml_to_json('[abc') 
diff --git a/test/expected/test_sql_yaml_func.sh_dc189d02e8979b7ed245d5d750f68b9965984699.out b/test/expected/test_sql_yaml_func.sh_dc189d02e8979b7ed245d5d750f68b9965984699.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_yaml_func.sh_dc189d02e8979b7ed245d5d750f68b9965984699.out
diff --git a/test/expected/test_tailer.sh_12f539e535df04364316699f9edeac461aa9f9de.err b/test/expected/test_tailer.sh_12f539e535df04364316699f9edeac461aa9f9de.err
new file mode 100644
index 0000000..b77acd0
--- /dev/null
+++ b/test/expected/test_tailer.sh_12f539e535df04364316699f9edeac461aa9f9de.err
@@ -0,0 +1,3 @@
+tailer stderr:
+info: load preview request -- 1234
+info: exiting...
diff --git a/test/expected/test_tailer.sh_12f539e535df04364316699f9edeac461aa9f9de.out b/test/expected/test_tailer.sh_12f539e535df04364316699f9edeac461aa9f9de.out
new file mode 100644
index 0000000..cd58305
--- /dev/null
+++ b/test/expected/test_tailer.sh_12f539e535df04364316699f9edeac461aa9f9de.out
@@ -0,0 +1,8 @@
+preview of file: {test_dir}/remote-log-dir/*
+{test_dir}/remote-log-dir/logfile_access_log.0
+{test_dir}/remote-log-dir/logfile_access_log.1
+
+all done!
+tailer stderr:
+info: load preview request -- 1234
+info: exiting...
diff --git a/test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.err b/test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.err
new file mode 100644
index 0000000..08a372f
--- /dev/null
+++ b/test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.err
@@ -0,0 +1,2 @@
+✘ error: unable to open file: non-existent:
+ reason: failed to ssh to host: ssh: Could not resolve hostname non-existent: nodename nor servname provided, or not known
diff --git a/test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.out b/test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.out
diff --git a/test/expected/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.err b/test/expected/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.err
diff --git a/test/expected/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.out b/test/expected/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.out
new file mode 100644
index 0000000..a39be1e
--- /dev/null
+++ b/test/expected/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.out
@@ -0,0 +1,178 @@
+Build[1][2] Docs[3][4] Coverage Status[5][6] lnav[7][8]
+
+ ▌[1] - https://github.com/tstack/lnav/workflows/ci-build/badge.svg
+ ▌[2] - https://github.com/tstack/lnav/actions?query=workflow%3Aci-build
+ ▌[3] - https://readthedocs.org/projects/lnav/badge/?version=latest&style=plastic
+ ▌[4] - https://docs.lnav.org
+ ▌[5] - https://coveralls.io/repos/github/tstack/lnav/badge.svg?branch=master
+ ▌[6] - https://coveralls.io/github/tstack/lnav?branch=master
+ ▌[7] - https://snapcraft.io/lnav/badge.svg
+ ▌[8] - https://snapcraft.io/lnav
+
+<img
+src="https://assets-global.website-files.com/6257adef93867e50d84d30e2/62594fddd654fc29fcc07359_cb48d2a8d4991281d7a6a95d2f58195e.svg"
+height="20"/>[1]
+
+ ▌[1] - https://discord.gg/erBPnKwz7R
+
+This is the source repository for lnav, visit https://lnav.org[1] for
+a high level overview.
+
+ ▌[1] - https://lnav.org
+
+LNAV – The Logfile Navigator
+
+The Log File Navigator, lnav for short, is an advanced log file viewer
+for the small-scale. It is a terminal application that can understand
+your log files and make it easy for you to find problems with little
+to no setup.
+
+Screenshot
+
+The following screenshot shows a syslog file. Log lines are displayed
+with highlights. Errors are red and warnings are yellow.
+
+Screenshot[1][2]
+
+ ▌[1] - file://{top_srcdir}/docs/assets/images/lnav-syslog-thumb.png
+ ▌[2] - file://{top_srcdir}/docs/assets/images/lnav-syslog.png
+
+Features
+
+ • Log messages from different files are collated together
+ into a single view
+ • Automatic detection of log format
+ • Automatic decompression of GZip and BZip2 files
+ • Filter log messages based on regular expressions
+ • Use SQL to analyze your logs
+ • And more...
+
+Installation
+
+Download a statically-linked binary for Linux/MacOS from the release
+page[1]
+
+ ▌[1] - https://github.com/tstack/lnav/releases/latest#release-artifacts
+
+Usage
+
+The only file installed is the executable,  lnav . You can execute it
+with no arguments to view the default set of files:
+
+ ▌$ lnav 
+
+You can view all the syslog messages by running:
+
+ ▌$ lnav /var/log/messages* 
+
+Usage with  systemd-journald 
+
+On systems running  systemd-journald , you can use  lnav  as the
+pager:
+
+ ▌$ journalctl | lnav 
+
+or in follow mode:
+
+ ▌$ journalctl -f | lnav 
+
+Since  journalctl 's default output format omits the year, if you are
+viewing logs which span multiple years you will need to change the
+output format to include the year, otherwise  lnav  gets confused:
+
+ ▌$ journalctl -o short-iso | lnav 
+
+It is also possible to use  journalctl 's json output format and  lnav
+will make use of additional fields such as PRIORITY and _SYSTEMD_UNIT:
+
+ ▌$ journalctl -o json | lnav 
+
+In case some MESSAGE fields contain special characters such as ANSI
+color codes which are considered as unprintable by journalctl,
+specifying  journalctl 's  -a  option might be preferable in order to
+output those messages still in a non-binary representation:
+
+ ▌$ journalctl -a -o json | lnav 
+
+If using systemd v236 or newer, the output fields can be limited to
+the ones actually recognized by  lnav  for increased efficiency:
+
+ ▌$ journalctl -o json --output-fields=MESSAGE,PRIORITY,_PID,SYSLOG_IDENTIFIER,_SYSTEMD_UNIT | lnav 
+
+If your system has been running for a long time, for increased
+efficiency you may want to limit the number of log lines fed into  lnav
+, e.g. via  journalctl 's  -n  or  --since=...  options.
+
+In case of a persistent journal, you may want to limit the number of
+log lines fed into  lnav  via  journalctl 's  -b  option.
+
+Support
+
+Please file issues on this repository or use the discussions section.
+The following alternatives are also available:
+
+ • support@lnav.org[1]
+ • Discord[2]
+ • Google Groups[3]
+
+ ▌[1] - mailto:support@lnav.org
+ ▌[2] - https://discord.gg/erBPnKwz7R
+ ▌[3] - https://groups.google.com/g/lnav
+
+Links
+
+ • Main Site[1]
+ • Documentation[2] on Read the Docs
+ • Internal Architecture[3]
+
+ ▌[1] - https://lnav.org
+ ▌[2] - https://docs.lnav.org
+ ▌[3] - file://{top_srcdir}/ARCHITECTURE.md
+
+Contributing
+
+ • Become a Sponsor on GitHub[1]
+
+ ▌[1] - https://github.com/sponsors/tstack
+
+Building From Source
+
+Prerequisites
+
+The following software packages are required to build lnav:
+
+ • gcc/clang - A C++14-compatible compiler.
+ • libpcre2 - The Perl Compatible Regular Expression v2
+ (PCRE2) library.
+ • sqlite - The SQLite database engine. Version 3.9.0
+ or higher is required.
+ • ncurses - The ncurses text UI library.
+ • readline - The readline line editing library.
+ • zlib - The zlib compression library.
+ • bz2 - The bzip2 compression library.
+ • libcurl - The cURL library for downloading files
+ from URLs. Version 7.23.0 or higher is required.
+ • libarchive - The libarchive library for opening archive
+ files, like zip/tgz.
+ • wireshark - The 'tshark' program is used to interpret
+ pcap files.
+
+Build
+
+Lnav follows the usual GNU style for configuring and installing
+software:
+
+Run  ./autogen.sh  if compiling from a cloned repository.
+
+ ▌$ ./configure 
+ ▌$ make 
+ ▌$ sudo make install 
+
+See Also
+
+Angle-grinder[1] is a tool to slice and dice log files on the
+command-line. If you're familiar with the SumoLogic query language,
+you might find this tool more comfortable to work with.
+
+ ▌[1] - https://github.com/rcoh/angle-grinder
+
diff --git a/test/expected/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.err b/test/expected/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.err
diff --git a/test/expected/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.out b/test/expected/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.out
new file mode 100644
index 0000000..accb1c3
--- /dev/null
+++ b/test/expected/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.out
@@ -0,0 +1,149 @@
+Screenshot
+
+The following screenshot shows a syslog file. Log lines are displayed
+with highlights. Errors are red and warnings are yellow.
+
+Screenshot[1][2]
+
+ ▌[1] - file://{top_srcdir}/docs/assets/images/lnav-syslog-thumb.png
+ ▌[2] - file://{top_srcdir}/docs/assets/images/lnav-syslog.png
+
+Features
+
+ • Log messages from different files are collated together
+ into a single view
+ • Automatic detection of log format
+ • Automatic decompression of GZip and BZip2 files
+ • Filter log messages based on regular expressions
+ • Use SQL to analyze your logs
+ • And more...
+
+Installation
+
+Download a statically-linked binary for Linux/MacOS from the release
+page[1]
+
+ ▌[1] - https://github.com/tstack/lnav/releases/latest#release-artifacts
+
+Usage
+
+The only file installed is the executable,  lnav . You can execute it
+with no arguments to view the default set of files:
+
+ ▌$ lnav 
+
+You can view all the syslog messages by running:
+
+ ▌$ lnav /var/log/messages* 
+
+Usage with  systemd-journald 
+
+On systems running  systemd-journald , you can use  lnav  as the
+pager:
+
+ ▌$ journalctl | lnav 
+
+or in follow mode:
+
+ ▌$ journalctl -f | lnav 
+
+Since  journalctl 's default output format omits the year, if you are
+viewing logs which span multiple years you will need to change the
+output format to include the year, otherwise  lnav  gets confused:
+
+ ▌$ journalctl -o short-iso | lnav 
+
+It is also possible to use  journalctl 's json output format and  lnav
+will make use of additional fields such as PRIORITY and _SYSTEMD_UNIT:
+
+ ▌$ journalctl -o json | lnav 
+
+In case some MESSAGE fields contain special characters such as ANSI
+color codes which are considered as unprintable by journalctl,
+specifying  journalctl 's  -a  option might be preferable in order to
+output those messages still in a non-binary representation:
+
+ ▌$ journalctl -a -o json | lnav 
+
+If using systemd v236 or newer, the output fields can be limited to
+the ones actually recognized by  lnav  for increased efficiency:
+
+ ▌$ journalctl -o json --output-fields=MESSAGE,PRIORITY,_PID,SYSLOG_IDENTIFIER,_SYSTEMD_UNIT | lnav 
+
+If your system has been running for a long time, for increased
+efficiency you may want to limit the number of log lines fed into  lnav
+, e.g. via  journalctl 's  -n  or  --since=...  options.
+
+In case of a persistent journal, you may want to limit the number of
+log lines fed into  lnav  via  journalctl 's  -b  option.
+
+Support
+
+Please file issues on this repository or use the discussions section.
+The following alternatives are also available:
+
+ • support@lnav.org[1]
+ • Discord[2]
+ • Google Groups[3]
+
+ ▌[1] - mailto:support@lnav.org
+ ▌[2] - https://discord.gg/erBPnKwz7R
+ ▌[3] - https://groups.google.com/g/lnav
+
+Links
+
+ • Main Site[1]
+ • Documentation[2] on Read the Docs
+ • Internal Architecture[3]
+
+ ▌[1] - https://lnav.org
+ ▌[2] - https://docs.lnav.org
+ ▌[3] - file://{top_srcdir}/ARCHITECTURE.md
+
+Contributing
+
+ • Become a Sponsor on GitHub[1]
+
+ ▌[1] - https://github.com/sponsors/tstack
+
+Building From Source
+
+Prerequisites
+
+The following software packages are required to build lnav:
+
+ • gcc/clang - A C++14-compatible compiler.
+ • libpcre2 - The Perl Compatible Regular Expression v2
+ (PCRE2) library.
+ • sqlite - The SQLite database engine. Version 3.9.0
+ or higher is required.
+ • ncurses - The ncurses text UI library.
+ • readline - The readline line editing library.
+ • zlib - The zlib compression library.
+ • bz2 - The bzip2 compression library.
+ • libcurl - The cURL library for downloading files
+ from URLs. Version 7.23.0 or higher is required.
+ • libarchive - The libarchive library for opening archive
+ files, like zip/tgz.
+ • wireshark - The 'tshark' program is used to interpret
+ pcap files.
+
+Build
+
+Lnav follows the usual GNU style for configuring and installing
+software:
+
+Run  ./autogen.sh  if compiling from a cloned repository.
+
+ ▌$ ./configure 
+ ▌$ make 
+ ▌$ sudo make install 
+
+See Also
+
+Angle-grinder[1] is a tool to slice and dice log files on the
+command-line. If you're familiar with the SumoLogic query language,
+you might find this tool more comfortable to work with.
+
+ ▌[1] - https://github.com/rcoh/angle-grinder
+
diff --git a/test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.err b/test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.err
diff --git a/test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.out b/test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.out
new file mode 100644
index 0000000..a7ed740
--- /dev/null
+++ b/test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.out
@@ -0,0 +1,111 @@
+/**
+ * Copyright (c) 2018, Timothy Stack
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of Timothy Stack nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ''AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "log_level.hh"
+
+#include <ctype.h>
+
+#include "config.h"
+
+const char* level_names[LEVEL__MAX + 1] = {
+ "unknown",
+ "trace",
+ "debug5",
+ "debug4",
+ "debug3",
+ "debug2",
+ "debug",
+ "info",
+ "stats",
+ "notice",
+ "warning",
+ "error",
+ "critical",
+ "fatal",
+ "invalid",
+
+ nullptr,
+};
+
+log_level_t
+abbrev2level(const char* levelstr, ssize_t len)
+{
+ if (len == 0 || levelstr[0] == '\0') {
+ return LEVEL_UNKNOWN;
+ }
+
+ switch (toupper(levelstr[0])) {
+ case 'T':
+ return LEVEL_TRACE;
+ case 'D':
+ case 'V':
+ if (len > 1) {
+ switch (levelstr[len - 1]) {
+ case '2':
+ return LEVEL_DEBUG2;
+ case '3':
+ return LEVEL_DEBUG3;
+ case '4':
+ return LEVEL_DEBUG4;
+ case '5':
+ return LEVEL_DEBUG5;
+ }
+ }
+ return LEVEL_DEBUG;
+ case 'I':
+ if (len == 7 && toupper(levelstr[1]) == 'N'
+ && toupper(levelstr[2]) == 'V' && toupper(levelstr[3]) == 'A'
+ && toupper(levelstr[4]) == 'L' && toupper(levelstr[5]) == 'I'
+ && toupper(levelstr[6]) == 'D')
+ {
+ return LEVEL_INVALID;
+ }
+ return LEVEL_INFO;
+ case 'S':
+ return LEVEL_STATS;
+ case 'N':
+ return LEVEL_NOTICE;
+ case 'W':
+ return LEVEL_WARNING;
+ case 'E':
+ return LEVEL_ERROR;
+ case 'C':
+ return LEVEL_CRITICAL;
+ case 'F':
+ return LEVEL_FATAL;
+ default:
+ return LEVEL_UNKNOWN;
+ }
+}
+
+int
+levelcmp(const char* l1, ssize_t l1_len, const char* l2, ssize_t l2_len)
+{
+ return abbrev2level(l1, l1_len) - abbrev2level(l2, l2_len);
+}
diff --git a/test/expected/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.err b/test/expected/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.err
diff --git a/test/expected/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.out b/test/expected/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.out
new file mode 100644
index 0000000..ae06214
--- /dev/null
+++ b/test/expected/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.out
@@ -0,0 +1,111 @@
+/**
+ * Copyright (c) 2018, Timothy Stack
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of Timothy Stack nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ''AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "log_level.hh"
+
+#include <ctype.h>
+
+#include "config.h"
+
+const char* level_names[LEVEL__MAX + 1] = {
+ "unknown",
+ "trace",
+ "debug5",
+ "debug4",
+ "debug3",
+ "debug2",
+ "debug",
+ "info",
+ "stats",
+ "notice",
+ "warning",
+ "error",
+ "critical",
+ "fatal",
+ "invalid",
+
+ nullptr,
+};
+
+log_level_t
+abbrev2level(const char* levelstr, ssize_t len)
+{
+ if (len == 0 || levelstr[0] == '\0') {
+ return LEVEL_UNKNOWN;
+ }
+
+ switch (toupper(levelstr[0])) {
+ case 'T':
+ return LEVEL_TRACE;
+ case 'D':
+ case 'V':
+ if (len > 1) {
+ switch (levelstr[len - 1]) {
+ case '2':
+ return LEVEL_DEBUG2;
+ case '3':
+ return LEVEL_DEBUG3;
+ case '4':
+ return LEVEL_DEBUG4;
+ case '5':
+ return LEVEL_DEBUG5;
+ }
+ }
+ return LEVEL_DEBUG;
+ case 'I':
+ if (len == 7 && toupper(levelstr[1]) == 'N'
+ && toupper(levelstr[2]) == 'V' && toupper(levelstr[3]) == 'A'
+ && toupper(levelstr[4]) == 'L' && toupper(levelstr[5]) == 'I'
+ && toupper(levelstr[6]) == 'D')
+ {
+ return LEVEL_INVALID;
+ }
+ return LEVEL_INFO;
+ case 'S':
+ return LEVEL_STATS;
+ case 'N':
+ return LEVEL_NOTICE;
+ case 'W':
+ return LEVEL_WARNING;
+ case 'E':
+ return LEVEL_ERROR;
+ case 'C':
+ return LEVEL_CRITICAL;
+ case 'F':
+ return LEVEL_FATAL;
+ default:
+ return LEVEL_UNKNOWN;
+ }
+}
+
+int
+levelcmp(const char* l1, ssize_t l1_len, const char* l2, ssize_t l2_len)
+{
+ return abbrev2level(l1, l1_len) - abbrev2level(l2, l2_len);
+}
diff --git a/test/expected/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.err b/test/expected/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.err
diff --git a/test/expected/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.out b/test/expected/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.out
new file mode 100644
index 0000000..c8719bb
--- /dev/null
+++ b/test/expected/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.out
@@ -0,0 +1,2 @@
+ filepath  descriptor  mimetype  content 
+{test_dir}/textfile_0.md net.daringfireball.markdown.frontmatter application/json {␊ "comment": "This is JSON front-matter"␊} 
diff --git a/test/expected/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.err b/test/expected/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.err
diff --git a/test/expected/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.out b/test/expected/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.out
new file mode 100644
index 0000000..5a1b89a
--- /dev/null
+++ b/test/expected/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.out
@@ -0,0 +1,4 @@
+you might find this tool more comfortable to work with.
+
+ ▌[1] - https://github.com/rcoh/angle-grinder
+
diff --git a/test/expected/test_text_file.sh_ac872aadda29b9a824361a2c711d62ec1c75d40f.err b/test/expected/test_text_file.sh_ac872aadda29b9a824361a2c711d62ec1c75d40f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_ac872aadda29b9a824361a2c711d62ec1c75d40f.err
diff --git a/test/expected/test_text_file.sh_ac872aadda29b9a824361a2c711d62ec1c75d40f.out b/test/expected/test_text_file.sh_ac872aadda29b9a824361a2c711d62ec1c75d40f.out
new file mode 100644
index 0000000..6c9b5ae
--- /dev/null
+++ b/test/expected/test_text_file.sh_ac872aadda29b9a824361a2c711d62ec1c75d40f.out
@@ -0,0 +1,74 @@
+✘ error: unable to parse markdown file
+ reason: file has invalid UTF-8 at offset 4461: Expecting bytes in the following ranges: 00..7F C2..F4.
+
+UTF-8 decoder capability and stress test
+----------------------------------------
+
+Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> - 2015-08-28 - CC BY 4.0
+
+This test file can help you examine, how your UTF-8 decoder handles
+various types of correct, malformed, or otherwise interesting UTF-8
+sequences. This file is not meant to be a conformance test. It does
+not prescribe any particular outcome. Therefore, there is no way to
+"pass" or "fail" this test file, even though the text does suggest a
+preferable decoder behaviour at some places. Its aim is, instead, to
+help you think about, and test, the behaviour of your UTF-8 decoder on a
+systematic collection of unusual inputs. Experience so far suggests
+that most first-time authors of UTF-8 decoders find at least one
+serious problem in their decoder using this file.
+
+The test lines below cover boundary conditions, malformed UTF-8
+sequences, as well as correctly encoded UTF-8 sequences of Unicode code
+points that should never occur in a correct UTF-8 file.
+
+According to ISO 10646-1:2000, sections D.7 and 2.3c, a device
+receiving UTF-8 shall interpret a "malformed sequence in the same way
+that it interprets a character that is outside the adopted subset" and
+"characters that are not within the adopted subset shall be indicated
+to the user" by a receiving device. One commonly used approach in
+UTF-8 decoders is to replace any malformed UTF-8 sequence by a
+replacement character (U+FFFD), which looks a bit like an inverted
+question mark, or a similar symbol. It might be a good idea to
+visually distinguish a malformed UTF-8 sequence from a correctly
+encoded Unicode character that is just not available in the current
+font but otherwise fully legal, even though ISO 10646-1 doesn't
+mandate this. In any case, just ignoring malformed sequences or
+unavailable characters does not conform to ISO 10646, will make
+debugging more difficult, and can lead to user confusion.
+
+Please check, whether a malformed UTF-8 sequence is (1) represented at
+all, (2) represented by exactly one single replacement character (or
+equivalent signal), and (3) the following quotation mark after an
+illegal UTF-8 sequence is correctly displayed, i.e. proper
+resynchronization takes place immediately after any malformed
+sequence. This file says "THE END" in the last line, so if you don't
+see that, your decoder crashed somehow before, which should always be
+cause for concern.
+
+All lines in this file are exactly 79 characters long (plus the line
+feed). In addition, all lines end with "|", except for the two test
+lines 2.1.1 and 2.2.1, which contain non-printable ASCII controls
+U+0000 and U+007F. If you display this file with a fixed-width font,
+these "|" characters should all line up in column 79 (right margin).
+This allows you to test quickly, whether your UTF-8 decoder finds the
+correct number of characters in every line, that is whether each
+malformed sequences is replaced by a single replacement character.
+
+Note that, as an alternative to the notion of malformed sequence used
+here, it is also a perfectly acceptable (and in some situations even
+preferable) solution to represent each individual byte of a malformed
+sequence with a replacement character. If you follow this strategy in
+your decoder, then please ignore the "|" column.
+
+
+Here come the tests: |
+ |
+1 Some correct UTF-8 text |
+ |
+You should see the Greek word 'kosme': "κόσμε" |
+ |
+2 Boundary condition test cases |
+ |
+2.1 First possible sequence of a certain length |
+ |
+2.1.1 1 byte (U-00000000): "
diff --git a/test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.err b/test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.err
diff --git a/test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.out b/test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.out
new file mode 100644
index 0000000..59a0aa9
--- /dev/null
+++ b/test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.out
@@ -0,0 +1,159 @@
+Build[1][2] Docs[3][4] Coverage Status[5][6] lnav[7][8]
+
+ ▌[1] - https://github.com/tstack/lnav/workflows/ci-build/badge.svg
+ ▌[2] - https://github.com/tstack/lnav/actions?query=workflow%3Aci-build
+ ▌[3] - https://readthedocs.org/projects/lnav/badge/?version=latest&style=plastic
+ ▌[4] - https://docs.lnav.org
+ ▌[5] - https://coveralls.io/repos/github/tstack/lnav/badge.svg?branch=master
+ ▌[6] - https://coveralls.io/github/tstack/lnav?branch=master
+ ▌[7] - https://snapcraft.io//lnav/badge.svg
+ ▌[8] - https://snapcraft.io/lnav
+
+This is the source repository for lnav, visit https://lnav.org[1] for
+a high level overview.
+
+ ▌[1] - https://lnav.org
+
+LNAV – The Logfile Navigator
+
+The Log File Navigator, lnav for short, is an advanced log file viewer
+for the small-scale. It is a terminal application that can understand
+your log files and make it easy for you to find problems with little
+to no setup.
+
+Screenshot
+
+The following screenshot shows a syslog file. Log lines are displayed
+with highlights. Errors are red and warnings are yellow.
+
+Screenshot[1][2]
+
+ ▌[1] - file://{top_srcdir}/docs/assets/images/lnav-syslog-thumb.png
+ ▌[2] - file://{top_srcdir}/docs/assets/images/lnav-syslog.png
+
+Features
+
+ • Log messages from different files are collated together
+ into a single view
+ • Automatic detection of log format
+ • Automatic decompression of GZip and BZip2 files
+ • Filter log messages based on regular expressions
+ • Use SQL to analyze your logs
+ • And more...
+
+Installation
+
+Download a statically-linked binary for Linux/MacOS from the release
+page[1]
+
+ ▌[1] - https://github.com/tstack/lnav/releases/latest#release-artifacts
+
+Usage
+
+The only file installed is the executable,  lnav . You can execute it
+with no arguments to view the default set of files:
+
+ ▌$ lnav 
+
+You can view all the syslog messages by running:
+
+ ▌$ lnav /var/log/messages* 
+
+Usage with  systemd-journald 
+
+On systems running  systemd-journald , you can use  lnav  as the
+pager:
+
+ ▌$ journalctl | lnav 
+
+or in follow mode:
+
+ ▌$ journalctl -f | lnav 
+
+Since  journalctl 's default output format omits the year, if you are
+viewing logs which span multiple years you will need to change the
+output format to include the year, otherwise  lnav  gets confused:
+
+ ▌$ journalctl -o short-iso | lnav 
+
+It is also possible to use  journalctl 's json output format and  lnav
+will make use of additional fields such as PRIORITY and _SYSTEMD_UNIT:
+
+ ▌$ journalctl -o json | lnav 
+
+In case some MESSAGE fields contain special characters such as ANSI
+color codes which are considered as unprintable by journalctl,
+specifying  journalctl 's  -a  option might be preferable in order to
+output those messages still in a non binary representation:
+
+ ▌$ journalctl -a -o json | lnav 
+
+If using systemd v236 or newer, the output fields can be limited to
+the ones actually recognized by  lnav  for increased efficiency:
+
+ ▌$ journalctl -o json --output-fields=MESSAGE,PRIORITY,_PID,SYSLOG_IDENTIFIER,_SYSTEMD_UNIT | lnav 
+
+If your system has been running for a long time, for increased
+efficiency you may want to limit the number of log lines fed into  lnav
+, e.g. via  journalctl 's  -n  or  --since=...  options.
+
+In case of a persistent journal, you may want to limit the number of
+log lines fed into  lnav  via  journalctl 's  -b  option.
+
+Links
+
+ • Main Site[1]
+ • Documentation[2] on Read the Docs
+ • Internal Architecture[3]
+
+ ▌[1] - https://lnav.org
+ ▌[2] - https://docs.lnav.org
+ ▌[3] - file://{top_srcdir}/ARCHITECTURE.md
+
+Contributing
+
+ • Become a Sponsor on GitHub[1]
+
+ ▌[1] - https://github.com/sponsors/tstack
+
+Building From Source
+
+Prerequisites
+
+The following software packages are required to build lnav:
+
+ • gcc/clang - A C++14-compatible compiler.
+ • libpcre - The Perl Compatible Regular Expression
+ (PCRE) library.
+ • sqlite - The SQLite database engine. Version 3.9.0
+ or higher is required.
+ • ncurses - The ncurses text UI library.
+ • readline - The readline line editing library.
+ • zlib - The zlib compression library.
+ • bz2 - The bzip2 compression library.
+ • libcurl - The cURL library for downloading files
+ from URLs. Version 7.23.0 or higher is required.
+ • libarchive - The libarchive library for opening archive
+ files, like zip/tgz.
+ • wireshark - The 'tshark' program is used to interpret
+ pcap files.
+
+Build
+
+Lnav follows the usual GNU style for configuring and installing
+software:
+
+Run  ./autogen.sh  if compiling from a cloned repository.
+
+ ▌$ ./configure 
+ ▌$ make 
+ ▌$ sudo make install 
+
+See Also
+
+Angle-grinder[1] is a tool to slice and dice log files on the
+command-line. If you're familiar with the SumoLogic query language,
+you might find this tool more comfortable to work with.
+
+ ▌[1] - https://github.com/rcoh/angle-grinder
+
diff --git a/test/expected/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.err b/test/expected/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.err
diff --git a/test/expected/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.out b/test/expected/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.out
new file mode 100644
index 0000000..1efd1ba
--- /dev/null
+++ b/test/expected/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.out
@@ -0,0 +1,58 @@
+[
+ {
+ "top_meta": {
+ "file": "{top_srcdir}/README.md",
+ "anchor": "#support",
+ "breadcrumbs": [
+ {
+ "display_value": "README.md",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "README.md"
+ }
+ ]
+ },
+ {
+ "display_value": "LNAV – The Logfile Navigator",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "LNAV – The Logfile Navigator"
+ }
+ ]
+ },
+ {
+ "display_value": "Support",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "Contributing"
+ },
+ {
+ "display_value": "Features"
+ },
+ {
+ "display_value": "Installation"
+ },
+ {
+ "display_value": "Links"
+ },
+ {
+ "display_value": "Screenshot"
+ },
+ {
+ "display_value": "See Also"
+ },
+ {
+ "display_value": "Support"
+ },
+ {
+ "display_value": "Usage"
+ }
+ ]
+ }
+ ]
+ }
+ }
+]
diff --git a/test/expected/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.err b/test/expected/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.err
diff --git a/test/expected/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.out b/test/expected/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.out
new file mode 100644
index 0000000..accb1c3
--- /dev/null
+++ b/test/expected/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.out
@@ -0,0 +1,149 @@
+Screenshot
+
+The following screenshot shows a syslog file. Log lines are displayed
+with highlights. Errors are red and warnings are yellow.
+
+Screenshot[1][2]
+
+ ▌[1] - file://{top_srcdir}/docs/assets/images/lnav-syslog-thumb.png
+ ▌[2] - file://{top_srcdir}/docs/assets/images/lnav-syslog.png
+
+Features
+
+ • Log messages from different files are collated together
+ into a single view
+ • Automatic detection of log format
+ • Automatic decompression of GZip and BZip2 files
+ • Filter log messages based on regular expressions
+ • Use SQL to analyze your logs
+ • And more...
+
+Installation
+
+Download a statically-linked binary for Linux/MacOS from the release
+page[1]
+
+ ▌[1] - https://github.com/tstack/lnav/releases/latest#release-artifacts
+
+Usage
+
+The only file installed is the executable,  lnav . You can execute it
+with no arguments to view the default set of files:
+
+ ▌$ lnav 
+
+You can view all the syslog messages by running:
+
+ ▌$ lnav /var/log/messages* 
+
+Usage with  systemd-journald 
+
+On systems running  systemd-journald , you can use  lnav  as the
+pager:
+
+ ▌$ journalctl | lnav 
+
+or in follow mode:
+
+ ▌$ journalctl -f | lnav 
+
+Since  journalctl 's default output format omits the year, if you are
+viewing logs which span multiple years you will need to change the
+output format to include the year, otherwise  lnav  gets confused:
+
+ ▌$ journalctl -o short-iso | lnav 
+
+It is also possible to use  journalctl 's json output format and  lnav
+will make use of additional fields such as PRIORITY and _SYSTEMD_UNIT:
+
+ ▌$ journalctl -o json | lnav 
+
+In case some MESSAGE fields contain special characters such as ANSI
+color codes which are considered as unprintable by journalctl,
+specifying  journalctl 's  -a  option might be preferable in order to
+output those messages still in a non-binary representation:
+
+ ▌$ journalctl -a -o json | lnav 
+
+If using systemd v236 or newer, the output fields can be limited to
+the ones actually recognized by  lnav  for increased efficiency:
+
+ ▌$ journalctl -o json --output-fields=MESSAGE,PRIORITY,_PID,SYSLOG_IDENTIFIER,_SYSTEMD_UNIT | lnav 
+
+If your system has been running for a long time, for increased
+efficiency you may want to limit the number of log lines fed into  lnav
+, e.g. via  journalctl 's  -n  or  --since=...  options.
+
+In case of a persistent journal, you may want to limit the number of
+log lines fed into  lnav  via  journalctl 's  -b  option.
+
+Support
+
+Please file issues on this repository or use the discussions section.
+The following alternatives are also available:
+
+ • support@lnav.org[1]
+ • Discord[2]
+ • Google Groups[3]
+
+ ▌[1] - mailto:support@lnav.org
+ ▌[2] - https://discord.gg/erBPnKwz7R
+ ▌[3] - https://groups.google.com/g/lnav
+
+Links
+
+ • Main Site[1]
+ • Documentation[2] on Read the Docs
+ • Internal Architecture[3]
+
+ ▌[1] - https://lnav.org
+ ▌[2] - https://docs.lnav.org
+ ▌[3] - file://{top_srcdir}/ARCHITECTURE.md
+
+Contributing
+
+ • Become a Sponsor on GitHub[1]
+
+ ▌[1] - https://github.com/sponsors/tstack
+
+Building From Source
+
+Prerequisites
+
+The following software packages are required to build lnav:
+
+ • gcc/clang - A C++14-compatible compiler.
+ • libpcre2 - The Perl Compatible Regular Expression v2
+ (PCRE2) library.
+ • sqlite - The SQLite database engine. Version 3.9.0
+ or higher is required.
+ • ncurses - The ncurses text UI library.
+ • readline - The readline line editing library.
+ • zlib - The zlib compression library.
+ • bz2 - The bzip2 compression library.
+ • libcurl - The cURL library for downloading files
+ from URLs. Version 7.23.0 or higher is required.
+ • libarchive - The libarchive library for opening archive
+ files, like zip/tgz.
+ • wireshark - The 'tshark' program is used to interpret
+ pcap files.
+
+Build
+
+Lnav follows the usual GNU style for configuring and installing
+software:
+
+Run  ./autogen.sh  if compiling from a cloned repository.
+
+ ▌$ ./configure 
+ ▌$ make 
+ ▌$ sudo make install 
+
+See Also
+
+Angle-grinder[1] is a tool to slice and dice log files on the
+command-line. If you're familiar with the SumoLogic query language,
+you might find this tool more comfortable to work with.
+
+ ▌[1] - https://github.com/rcoh/angle-grinder
+
diff --git a/test/expected_help.txt b/test/expected_help.txt
new file mode 100644
index 0000000..d741fd2
--- /dev/null
+++ b/test/expected_help.txt
@@ -0,0 +1,4013 @@
+
+lnav
+
+A fancy log file viewer for the terminal.
+
+Overview
+
+The Logfile Navigator, lnav, is an enhanced log file viewer that takes
+advantage of any semantic information that can be gleaned from the
+files being viewed, such as timestamps and log levels. Using this
+extra semantic information, lnav can do things like interleaving
+messages from different files, generate histograms of messages over
+time, and providing hotkeys for navigating through the file. It is
+hoped that these features will allow the user to quickly and
+efficiently zero in on problems.
+
+Opening Paths/URLs
+
+The main arguments to lnav are the files, directories, glob patterns,
+or URLs to be viewed. If no arguments are given, the default syslog
+file for your system will be opened. These arguments will be polled
+periodically so that any new data or files will be automatically
+loaded. If a previously loaded file is removed or replaced, it will be
+closed and the replacement opened.
+
+Note: When opening SFTP URLs, if the password is not provided for the
+host, the SSH agent can be used to do authentication.
+
+Options
+
+Lnav takes a list of files to view and/or you can use the flag
+arguments to load well-known log files, such as the syslog log files.
+The flag arguments are:
+
+ • -a Load all of the most recent log file types.
+ • -r Recursively load files from the given directory
+ hierarchies.
+ • -R Load older rotated log files as well.
+
+When using the flag arguments, lnav will look for the files relative
+to the current directory and its parent directories. In other words,
+if you are working within a directory that has the well-known log
+files, those will be preferred over any others.
+
+If you do not want the default syslog file to be loaded when no files
+are specified, you can pass the -N flag.
+
+Any files given on the command-line are scanned to determine their log
+file format and to create an index for each line in the file. You do
+not have to manually specify the log file format. The currently
+supported formats are: syslog, apache, strace, tcsh history, and
+generic log files with timestamps.
+
+Lnav will also display data piped in on the standard input. The
+following options are available when doing so:
+
+ • -t Prepend timestamps to the lines of data being read
+ in on the standard input.
+ • -w file Write the contents of the standard input to
+ this file.
+
+To automatically execute queries or lnav commands after the files have
+been loaded, you can use the following options:
+
+ • -c cmd A command, query, or file to execute. The
+ first character determines the type of operation: a colon
+ ( : ) is used for the built-in commands; a semi-colon ( ;
+ ) for SQL queries; and a pipe symbol ( | ) for executing
+ a file containing other commands. For example, to open
+ the file "foo.log" and go to the tenth line in the file,
+ you can do:
+
+ ┃lnav -c ':goto 10' foo.log
+
+ This option can be given multiple times to execute
+ multiple operations in sequence.
+ • -f file A file that contains commands, queries, or
+ files to execute. This option is a shortcut for -c '|file'
+ . You can use a dash ( - ) to execute commands from the
+ standard input.
+
+To execute commands/queries without the opening the interactive text
+UI, you can pass the -n option. This combination of options allows
+you to write scripts for processing logs with lnav. For example, to
+get a list of IP addresses that dhclient has bound to in CSV format:
+
+ ┃#! /usr/bin/lnav -nf
+ ┃
+ ┃# Usage: dhcp_ip.lnav /var/log/messages
+ ┃# Only include lines that look like:
+ ┃# Apr 29 00:31:56 example-centos5 dhclient: bound to 10.1.10.103 -- renewal in 9938 seconds.
+ ┃
+ ┃:filter-in dhclient: bound to
+ ┃
+ ┃# The log message parser will extract the IP address
+ ┃# as col_0, so we select that and alias it to "dhcp_ip".
+ ┃;select distinct col_0 as dhcp_ip from logline;
+ ┃
+ ┃# Finally, write the results of the query to stdout.
+ ┃:write-csv-to -
+
+Display
+
+The main part of the display shows the log lines from the files
+interleaved based on time-of-day. New lines are automatically loaded
+as they are appended to the files and, if you are viewing the bottom
+of the files, lnav will scroll down to display the new lines, much
+like tail -f .
+
+On color displays, the lines will be highlighted as follows:
+
+ • Errors will be colored in red;
+ • warnings will be yellow;
+ • boundaries between days will be underlined; and
+ • various color highlights will be applied to: IP
+ addresses, SQL keywords, XML tags, file and line numbers
+ in Java backtraces, and quoted strings.
+
+To give you an idea of where you are spatially, the right side of the
+display has a proportionally sized 'scroll bar' that indicates your
+current position in the files. The scroll bar will also show areas of
+the file where warnings or errors are detected by coloring the bar
+yellow or red, respectively. Tick marks will also be added to the left
+and right hand side of the bar, for search hits and bookmarks.
+
+A bar on the left side is color coded and broken up to indicate which
+messages are from the same file. Pressing the left-arrow or h will
+reveal the source file names for each message and pressing again will
+show the full paths.
+
+Above and below the main body are status lines that display:
+
+ • the current time;
+ • the name of the file the top line was pulled from;
+ • the log format for the top line;
+ • the current view;
+ • the line number for the top line in the display;
+ • the current search hit, the total number of hits, and
+ the search term;
+
+If the view supports filtering, there will be a status line showing
+the following:
+
+ • the number of enabled filters and the total number of
+ filters;
+ • the number of lines not displayed because of filtering.
+
+To edit the filters, you can press TAB to change the focus from the
+main view to the filter editor. The editor allows you to create,
+enable/disable, and delete filters easily.
+
+Finally, the last line on the display is where you can enter search
+patterns and execute internal commands, such as converting a unix-
+timestamp into a human-readable date. The command-line is implemented
+using the readline library, so the usual set of keyboard shortcuts are
+available. Most commands and searches also support tab-completion.
+
+The body of the display is also used to display other content, such
+as: the help file, histograms of the log messages over time, and SQL
+results. The views are organized into a stack so that any time you
+activate a new view with a key press or command, the new view is
+pushed onto the stack. Pressing the same key again will pop the view
+off of the stack and return you to the previous view. Note that you
+can always use q to pop the top view off of the stack.
+
+Default Key Bindings
+
+Views
+
+ Key(s) Action
+═══════════════════════════════════════════════════════════
+ ? View/leave this help message.
+ q Leave the current view or quit the program when in
+ the log file view.
+ Q Similar to q , except it will try to sync the top
+ time between the current and former views. For
+ example, when leaving the spectrogram view with Q
+ , the top time in that view will be matched to the
+ top time in the log view.
+ TAB Toggle focusing on the filter editor or the main
+ view.
+ a/A Restore the view that was previously popped with q
+ / Q . The A hotkey will try to match the top
+ times between the two views.
+ X Close the current text file or log file.
+
+Spatial Navigation
+
+ Key(s) Action
+═══════════════════════════════════════════════════════════════
+ g/Home Move to the top of the file.
+ G/End Move to the end of the file. If the view is
+ already at the end, it will move to the last line.
+ SPACE/PgDn Move down a page.
+ b/PgUp Move up a page.
+ j/↓ Move down a line.
+ k/↑ Move up a line.
+ h/← Move to the left. In the log view, moving left
+ will reveal the source log file names for each
+ line. Pressing again will reveal the full path.
+ l/→ Move to the right.
+ H/Shift ← Move to the left by a smaller increment.
+ L/Shift → Move to the right by a smaller increment.
+ e/E Move to the next/previous error.
+ w/W Move to the next/previous warning.
+ n/N Move to the next/previous search hit. When pressed
+ repeatedly within a short time, the view will move
+ at least a full page at a time instead of moving
+ to the next hit.
+ f/F Move to the next/previous file. In the log view,
+ this moves to the next line from a different file.
+ In the text view, this rotates the view to the
+ next file.
+ >/< Move horizontally to the next/previous search hit.
+ o/O Move forward/backward to the log message with a
+ matching 'operation ID' (opid) field.
+ u/U Move forward/backward through any user bookmarks
+ you have added using the 'm' key. This hotkey will
+ also jump to the start of any log partitions that
+ have been created with the 'partition-name'
+ command.
+ s/S Move to the next/previous "slow down" in the log
+ message rate. A slow down is detected by measuring
+ how quickly the message rate has changed over the
+ previous several messages. For example, if one
+ message is logged every second for five seconds
+ and then the last message arrives five seconds
+ later, the last message will be highlighted as a
+ slow down.
+ {/} Move to the previous/next location in history.
+ Whenever you jump to a new location in the view,
+ the location will be added to the history. The
+ history is not updated when using only the arrow
+ keys.
+
+Chronological Navigation
+
+ Key(s) Action
+══════════════════════════════════════════════════════════════════
+ d/D Move forward/backward 24 hours from the current
+ position in the log file.
+ 1-6/Shift 1-6 Move to the next/previous n'th ten minute of the
+ hour. For example, '4' would move to the first log
+ line in the fortieth minute of the current hour in
+ the log. And, '6' would move to the next hour
+ boundary.
+ 7/8 Move to the previous/next minute.
+ 0/Shift 0 Move to the next/previous day boundary.
+ r/R Move forward/backward based on the relative time
+ that was last used with the 'goto' command. For
+ example, executing ':goto a minute later' will
+ move the log view forward a minute and then
+ pressing 'r' will move it forward a minute again.
+ Pressing 'R' will then move the view in the
+ opposite direction, so backwards a minute.
+
+Bookmarks
+
+ Key(s) Action
+═══════════════════════════════════════════════════════════
+ m Mark/unmark the line at the top of the display.
+ The line will be highlighted with reverse video to
+ indicate that it is a user bookmark. You can use
+ the u hotkey to iterate through marks you have
+ added.
+ M Mark/unmark all the lines between the top of the
+ display and the last line marked/unmarked.
+ J Mark/unmark the next line after the previously
+ marked line.
+ K Like J except it toggles the mark on the
+ previous line.
+ c Copy the marked text to the X11 selection buffer
+ or OS X clipboard.
+ C Clear all marked lines.
+
+Display options
+
+ Key(s) Action
+══════════════════════════════════════════════════════════════════
+ P Switch to/from the pretty-printed view of the log
+ or text files currently displayed. In this view,
+ structured data, such as XML, will be reformatted
+ to make it easier to read.
+ t Switch to/from the text file view. The text file
+ view is for any files that are not recognized as
+ log files.
+ = Pause/unpause loading of new file data.
+ Ctrl-L (Lo-fi mode) Exit screen-mode and write the
+ displayed log lines in plain text to the terminal
+ until a key is pressed. Useful for copying long
+ lines from the terminal without picking up any of
+ the extra decorations.
+ T Toggle the display of the "elapsed time" column
+ that shows the time elapsed since the beginning of
+ the logs or the offset from the previous bookmark.
+ Sharp changes in the message rate are highlighted
+ by coloring the separator between the time column
+ and the log message. A red highlight means the
+ message rate has slowed down and green means it
+ has sped up. You can use the "s/S" hotkeys to scan
+ through the slow downs.
+ i View/leave a histogram of the log messages over
+ time. The histogram counts the number of displayed
+ log lines for each bucket of time. The bars are
+ layed out horizontally with colored segments
+ representing the different log levels. You can use
+ the z hotkey to change the size of the time
+ buckets (e.g. ten minutes, one hour, one day).
+ I Switch between the log and histogram views while
+ keeping the time displayed at the top of each view
+ in sync. For example, if the top line in the log
+ view is "11:40", hitting I will switch to the
+ histogram view and scrolled to display "11:00" at
+ the top (if the zoom level is hours).
+ z/Shift Z Zoom in or out one step in the histogram view.
+ v Switch to/from the SQL result view.
+ V Switch between the log and SQL result views while
+ keeping the top line number in the log view in
+ sync with the log_line column in the SQL view. For
+ example, doing a query that selects for "
+ log_idle_msecs" and "log_line", you can move the
+ top of the SQL view to a line and hit 'V' to
+ switch to the log view and move to the line number
+ that was selected in the "log_line" column. If
+ there is no "log_line" column, lnav will find the
+ first column with a timestamp and move to
+ corresponding time in the log view.
+ TAB/Shift TAB In the SQL result view, cycle through the columns
+ that are graphed. Initially, all number values are
+ displayed in a stacked graph. Pressing TAB will
+ change the display to only graph the first column.
+ Repeatedly pressing TAB will cycle through the
+ columns until they are all graphed again.
+ p In the log view: enable or disable the display of
+ the fields that the log message parser knows about
+ or has discovered. This overlay is temporarily
+ enabled when the semicolon key (;) is pressed so
+ that it is easier to write queries.
+ In the DB view: enable or disable the display of
+ values in columns containing JSON-encoded values
+ in the top row. The overlay will display the JSON-
+ Pointer reference and value for all fields in the
+ JSON data.
+ CTRL-W Toggle word-wrapping.
+ CTRL-P Show/hide the data preview panel that may be
+ opened when entering commands or SQL queries.
+ CTRL-F Toggle the enabled/disabled state of all filters
+ in the current view.
+ x Toggle the hiding of log message fields. The
+ hidden fields will be replaced with three bullets
+ and highlighted in yellow.
+ F2 Toggle mouse support.
+
+Query
+
+ Key(s) Action
+═════════════════════════════════════════════════════════════════════════════
+ /regexp Start a search for the given regular expression.
+ The search is live, so when there is a pause in
+ typing, the currently running search will be
+ canceled and a new one started. The first ten
+ lines that match the search will be displayed in
+ the preview window at the bottom of the view.
+ History is maintained for your searches so you can
+ rerun them easily. Words that are currently
+ displayed are also available for tab-completion,
+ so you can easily search for values without
+ needing to copy-and-paste the string. If there is
+ an error encountered while trying to interpret the
+ expression, the error will be displayed in red on
+ the status line. While the search is active, the '
+ hits' field in the status line will be green, when
+ finished it will turn back to black.
+ :<command> Execute an internal command. The commands are
+ listed below. History is also supported in this
+ context as well as tab-completion for commands and
+ some arguments. The result of the command replaces
+ the command you typed.
+ ;<sql> Execute an SQL query. Most supported log file
+ formats provide a sqlite virtual table backend
+ that can be used in queries. See the SQL section
+ below for more information.
+ |<script> [arg1 .. argN] Execute an lnav script contained in a format
+ directory (e.g. ~/.lnav/formats/default). The
+ script can contain lines starting with : , ; ,
+ or | to execute commands, SQL queries or execute
+ other files in lnav. Any values after the script
+ name are treated as arguments can be referenced in
+ the script using $1 , $2 , and so on, like in a
+ shell script.
+ CTRL+], ESCAPE Abort command-line entry started with / , :
+, ;
+ , or | .
+
+ ┃ Note: The regular expression format used by is PCRE
+ ┃ (Perl-Compatible Regular Expressions). For example,
+ ┃ if you wanted to search for ethernet device names,
+ ┃ regardless of their ID number, you can type:
+ ┃
+ ┃ eth\d+
+ ┃
+ ┃ You can find more information about Perl regular
+ ┃ expressions at:
+ ┃
+ ┃ http://perldoc.perl.org/perlre.html
+ ┃
+ ┃ If the search string is not valid PCRE, a search
+ ┃ is done for the exact string instead of doing a
+ ┃ regex search.
+
+Session
+
+ Key(s) Action
+═══════════════════════════════════════════════════════════
+ CTRL-R Reset the session state. This will save the
+ current session state (filters, highlights) and
+ then reset the state to the factory default.
+
+Filter Editor
+
+The following hotkeys are only available when the focus is on the
+filter editor. You can change the focus by pressing TAB.
+
+ Key(s) Action
+═══════════════════════════════════════════════════════════
+ q Switch the focus back to the main view.
+ j/↓ Select the next filter.
+ k/↑ Select the previous filter.
+ o Create a new "out" filter.
+ i Create a new "in" filter .
+ SPACE Toggle the enabled/disabled state of the currently
+ selected filter.
+ t Toggle the type of filter between "in" and "out".
+ ENTER Edit the selected filter.
+ D Delete the selected filter.
+
+Mouse Support (experimental)
+
+If you are using Xterm, or a compatible terminal, you can use the
+mouse to mark lines of text and move the view by grabbing the
+scrollbar.
+
+NOTE: You need to manually enable this feature by setting the LNAV_EXP
+environment variable to "mouse". F2 toggles mouse support.
+
+SQL Queries (experimental)
+
+Lnav has support for performing SQL queries on log files using the
+Sqlite3 "virtual" table feature. For all supported log file types,
+lnav will create tables that can be queried using the subset of SQL
+that is supported by Sqlite3. For example, to get the top ten URLs
+being accessed in any loaded Apache log files, you can execute:
+
+ ┃;select cs_uri_stem, count(*) as total from access_log
+ ┃ group by cs_uri_stem order by total desc limit 10;
+
+The query result view shows the results and graphs any numeric values
+found in the result, much like the histogram view.
+
+The builtin set of log tables are listed below. Note that only the log
+messages that match a particular format can be queried by a particular
+table. You can find the file format and table name for the top log
+message by looking in the upper right hand corner of the log file
+view.
+
+Some commonly used format tables are:
+
+ Name Description
+════════════════════════════════════════════════════════════════
+ access_log Apache common access log format
+ syslog_log Syslog format
+ strace_log Strace log format
+ generic_log 'Generic' log format. This table contains messages
+ from files that have a very simple format with a
+ leading timestamp followed by the message.
+
+NOTE: You can get a dump of the schema for the internal tables, and
+any attached databases, by running the .schema SQL command.
+
+The columns available for the top log line in the view will
+automatically be displayed after pressing the semicolon ( ; ) key. All
+log tables contain at least the following columns:
+
+ Column Description
+═══════════════════════════════════════════════════════════════════
+ log_line The line number in the file, starting at zero.
+ log_part The name of the partition. You can change this
+ column using an UPDATE SQL statement or with the '
+ partition-name' command. After a value is set,
+ the following log messages will have the same
+ partition name up until another name is set.
+ log_time The time of the log entry.
+ log_idle_msecs The amount of time, in milliseconds, between the
+ current log message and the previous one.
+ log_level The log level (e.g. info, error, etc...).
+ log_mark The bookmark status for the line. This column can
+ be written to using an UPDATE query.
+ log_path The full path to the file.
+ log_text The raw line of text. Note that this column is
+ not included in the result of a 'select *', but it
+ does exist.
+
+The following tables include the basic columns as listed above and
+include a few more columns since the log file format is more
+structured.
+
+ • syslog_log
+
+ Column Description
+ ═════════════════════════════════════════════════════════════════
+ log_hostname The hostname the message was received from.
+ log_procname The name of the process that sent the message.
+ log_pid The process ID of the process that sent the
+ message.
+ • access_log (The column names are the same as those in
+ the Microsoft LogParser tool.)
+
+ Column Description
+ ══════════════════════════════════════════════════════════
+ c_ip The client IP address.
+ cs_username The client user name.
+ cs_method The HTTP method.
+ cs_uri_stem The stem portion of the URI.
+ cs_uri_query The query portion of the URI.
+ cs_version The HTTP version string.
+ sc_status The status number returned to the client.
+ sc_bytes The number of bytes sent to the client.
+ cs_referrer The URL of the referring page.
+ cs_user_agent The user agent string.
+ • strace_log (Currently, you need to run strace with
+ the -tt -T options so there are timestamps for each
+ function call.)
+
+ Column Description
+ ═══════════════════════════════════════════════════════
+ funcname The name of the syscall.
+ result The result code.
+ duration The amount of time spent in the syscall.
+ arg0 - arg9 The arguments passed to the syscall.
+
+These tables are created dynamically and not stored in memory or on
+disk. If you would like to persist some information from the tables,
+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:
+
+ ┃;attach database "/tmp/topten.db" as topten;
+ ┃;create table topten.foo as select cs_uri_stem, count(*) as total
+ ┃ from access_log group by cs_uri_stem order by total desc
+ ┃ limit 10;
+
+Dynamic logline Table (experimental)
+
+(NOTE: This feature is still very new and not completely reliable yet,
+use with care.)
+
+For log formats that lack message structure, lnav can parse the log
+message and attempt to extract any data fields that it finds. This
+feature is available through the logline log table. This table is
+dynamically created and defined based on the message at the top of the
+log view. For example, given the following log message from "sudo",
+lnav will create the "logline" table with columns for "TTY", "PWD", "
+USER", and "COMMAND":
+
+ ┃May 24 06:48:38 Tim-Stacks-iMac.local sudo[76387]: stack : TTY=ttys003 ; PWD=/Users/stack/github/lbuild ; USER=root ; COMMAND=/bin/echo Hello, World!
+
+Queries executed against this table will then only return results for
+other log messages that have the same format. So, if you were to
+execute the following query while viewing the above line, you might
+get the following results:
+
+ ┃;select USER,COMMAND from logline;
+
+ USER COMMAND
+═════════════════════════════════
+ root /bin/echo Hello, World!
+ mal /bin/echo Goodbye, World!
+
+The log parser works by examining each message for key/value pairs
+separated by an equal sign (=) or a colon (:). For example, in the
+previous example of a "sudo" message, the parser sees the "USER=root"
+string as a pair where the key is "USER" and the value is "root". If
+no pairs can be found, then anything that looks like a value is
+extracted and assigned a numbered column. For example, the following
+line is from "dhcpd":
+
+ ┃Sep 16 22:35:57 drill dhcpd: DHCPDISCOVER from 00:16:ce:54:4e:f3 via hme3
+
+In this case, the lnav parser recognizes that "DHCPDISCOVER", the MAC
+address and the "hme3" device name are values and not normal words.
+So, it builds a table with three columns for each of these values. The
+regular words in the message, like "from" and "via", are then used to
+find other messages with a similar format.
+
+If you would like to execute queries against log messages of different
+formats at the same time, you can use the 'create-logline-table'
+command to permanently create a table using the top line of the log
+view as a template.
+
+Other SQL Features
+
+Environment variables can be used in SQL statements by prefixing the
+variable name with a dollar-sign ($). For example, to read the value
+of the HOME variable, you can do:
+
+ ┃;SELECT $HOME;
+
+To select the syslog messages that have a hostname field that is equal
+to the HOSTNAME variable:
+
+ ┃;SELECT * FROM syslog_log WHERE log_hostname = $HOSTNAME;
+
+NOTE: Variable substitution is done for fields in the query and is not
+a plain text substitution. For example, the following statement WILL
+NOT WORK:
+
+ ┃;SELECT * FROM $TABLE_NAME; -- Syntax error
+
+Access to lnav's environment variables is also available via the "
+environ" table. The table has two columns (name, value) and can be
+read and written to using SQL SELECT, INSERT, UPDATE, and DELETE
+statements. For example, to set the "FOO" variable to the value "BAR":
+
+ ┃;INSERT INTO environ SELECT 'FOO', 'BAR';
+
+As a more complex example, you can set the variable "LAST" to the last
+syslog line number by doing:
+
+ ┃;INSERT INTO environ SELECT 'LAST', (SELECT max(log_line) FROM syslog_log);
+
+A delete will unset the environment variable:
+
+ ┃;DELETE FROM environ WHERE name='LAST';
+
+The table allows you to easily use the results of a SQL query in lnav
+commands, which is especially useful when scripting lnav.
+
+Contact
+
+For more information, visit the lnav website at:
+
+http://lnav.org[1]
+
+ ┃[1] - http://lnav.org
+
+For support questions, email:
+
+lnav@googlegroups.com[1] support@lnav.org[2]
+
+ ┃[1] - mailto:lnav@googlegroups.com
+ ┃[2] - mailto:support@lnav.org
+
+Command Reference
+
+:adjust-log-time timestamp
+══════════════════════════════════════════════════════════════════════
+ Change the timestamps of the top file to be relative to the given
+ date
+Parameter
+ timestamp The new timestamp for the top line in the view
+
+Examples
+#1 To set the top timestamp to a given date:
+ :adjust-log-time 2017-01-02T05:33:00
+
+
+#2 To set the top timestamp back an hour:
+ :adjust-log-time -1h
+
+
+
+:alt-msg msg
+══════════════════════════════════════════════════════════════════════
+ Display a message in the alternate command position
+Parameter
+ msg The message to display
+See Also
+ :echo, :eval, :redirect-to, :write-csv-to, :write-json-to,
+ :write-jsonlines-to, :write-raw-to, :write-screen-to, :write-table-to,
+ :write-to, :write-view-to
+Example
+#1 To display 'Press t to switch to the text view' on the bottom right:
+ :alt-msg Press t to switch to the text view
+
+
+
+:append-to path
+══════════════════════════════════════════════════════════════════════
+ Append marked lines in the current view to the given file
+Parameter
+ path The path to the file to append to
+See Also
+ :echo, :pipe-line-to, :pipe-to, :redirect-to, :write-csv-to,
+ :write-json-to, :write-jsonlines-to, :write-raw-to, :write-screen-to,
+ :write-table-to, :write-to, :write-view-to
+Example
+#1 To append marked lines to the file /tmp/interesting-lines.txt:
+ :append-to /tmp/interesting-lines.txt
+
+
+
+:clear-comment
+══════════════════════════════════════════════════════════════════════
+ Clear the comment attached to the top log line
+See Also
+ :comment, :tag
+
+:clear-filter-expr
+══════════════════════════════════════════════════════════════════════
+ Clear the filter expression
+See Also
+ :filter-expr, :filter-in, :filter-out, :hide-lines-after,
+ :hide-lines-before, :hide-unmarked-lines, :toggle-filtering
+
+:clear-highlight pattern
+══════════════════════════════════════════════════════════════════════
+ Remove a previously set highlight regular expression
+Parameter
+ pattern The regular expression previously used with :highlight
+See Also
+ :enable-word-wrap, :hide-fields, :highlight
+Example
+#1 To clear the highlight with the pattern 'foobar':
+ :clear-highlight foobar
+
+
+
+:clear-mark-expr
+══════════════════════════════════════════════════════════════════════
+ Clear the mark expression
+See Also
+ :hide-unmarked-lines, :mark, :mark-expr, :next-mark, :prev-mark
+
+:clear-partition
+══════════════════════════════════════════════════════════════════════
+ Clear the partition the top line is a part of
+
+
+:close
+══════════════════════════════════════════════════════════════════════
+ Close the top file in the view
+
+
+:comment text
+══════════════════════════════════════════════════════════════════════
+ Attach a comment to the top log line
+Parameter
+ text The comment text
+See Also
+ :clear-comment, :tag
+Example
+#1 To add the comment 'This is where it all went wrong' to the top line:
+ :comment This is where it all went wrong
+
+
+
+:config option [value]
+══════════════════════════════════════════════════════════════════════
+ Read or write a configuration option
+Parameters
+ option The path to the option to read or write
+ value The value to write. If not given, the current value is
+ returned
+See Also
+ :reset-config
+Examples
+#1 To read the configuration of the '/ui/clock-format' option:
+ :config /ui/clock-format
+
+
+#2 To set the '/ui/dim-text' option to 'false':
+ :config /ui/dim-text false
+
+
+
+:create-logline-table table-name
+══════════════════════════════════════════════════════════════════════
+ Create an SQL table using the top line of the log view as a template
+
+Parameter
+ table-name The name for the new table
+See Also
+ :create-search-table, :create-search-table, :write-csv-to,
+ :write-json-to, :write-jsonlines-to, :write-raw-to, :write-screen-to,
+ :write-table-to, :write-view-to
+Example
+#1 To create a logline-style table named 'task_durations':
+ :create-logline-table task_durations
+
+
+
+:create-search-table table-name [pattern]
+══════════════════════════════════════════════════════════════════════
+ Create an SQL table based on a regex search
+Parameters
+ table-name The name of the table to create
+ pattern The regular expression used to capture the table
+ columns. If not given, the current search pattern is
+ used.
+See Also
+ :create-logline-table, :create-logline-table, :delete-search-table,
+ :delete-search-table, :write-csv-to, :write-json-to,
+ :write-jsonlines-to, :write-raw-to, :write-screen-to, :write-table-to,
+ :write-view-to
+Example
+#1 To create a table named 'task_durations' that matches log messages with the pattern '
+ duration=(?<duration>\d+)':
+ :create-search-table task_durations duration=(?<duration>\d+)
+
+
+
+:current-time
+══════════════════════════════════════════════════════════════════════
+ Print the current time in human-readable form and seconds since the
+ epoch
+
+
+:delete-filter pattern
+══════════════════════════════════════════════════════════════════════
+ Delete the filter created with :filter-in or :filter-out
+Parameter
+ pattern The regular expression to match
+See Also
+ :filter-in, :filter-out, :hide-lines-after, :hide-lines-before,
+ :hide-unmarked-lines, :toggle-filtering
+Example
+#1 To delete the filter with the pattern 'last message repeated':
+ :delete-filter last message repeated
+
+
+
+:delete-logline-table table-name
+══════════════════════════════════════════════════════════════════════
+ Delete a table created with create-logline-table
+Parameter
+ table-name The name of the table to delete
+See Also
+ :create-logline-table, :create-logline-table, :create-search-table,
+ :create-search-table, :write-csv-to, :write-json-to,
+ :write-jsonlines-to, :write-raw-to, :write-screen-to, :write-table-to,
+ :write-view-to
+Example
+#1 To delete the logline-style table named 'task_durations':
+ :delete-logline-table task_durations
+
+
+
+:delete-search-table table-name
+══════════════════════════════════════════════════════════════════════
+ Create an SQL table based on a regex search
+Parameter
+ table-name The name of the table to create
+See Also
+ :create-logline-table, :create-logline-table, :create-search-table,
+ :create-search-table, :write-csv-to, :write-json-to,
+ :write-jsonlines-to, :write-raw-to, :write-screen-to, :write-table-to,
+ :write-view-to
+Example
+#1 To delete the search table named 'task_durations':
+ :delete-search-table task_durations
+
+
+
+:delete-tags tag1 [... tagN]
+══════════════════════════════════════════════════════════════════════
+ Remove the given tags from all log lines
+Parameter
+ tag The tags to delete
+See Also
+ :comment, :tag
+Example
+#1 To remove the tags '#BUG123' and '#needs-review' from all log lines:
+ :delete-tags #BUG123 #needs-review
+
+
+
+:disable-filter pattern
+══════════════════════════════════════════════════════════════════════
+ Disable a filter created with filter-in/filter-out
+Parameter
+ pattern The regular expression used in the filter command
+See Also
+ :enable-filter, :filter-in, :filter-out, :hide-lines-after,
+ :hide-lines-before, :hide-unmarked-lines, :toggle-filtering
+Example
+#1 To disable the filter with the pattern 'last message repeated':
+ :disable-filter last message repeated
+
+
+
+:disable-word-wrap
+══════════════════════════════════════════════════════════════════════
+ Disable word-wrapping for the current view
+See Also
+ :enable-word-wrap, :hide-fields, :highlight
+
+:echo msg
+══════════════════════════════════════════════════════════════════════
+ Echo the given message to the screen or, if :redirect-to has been
+ called, to output file specified in the redirect. Variable
+ substitution is performed on the message. Use a backslash to escape
+ any special characters, like '$'
+Parameter
+ msg The message to display
+See Also
+ :alt-msg, :append-to, :eval, :pipe-line-to, :pipe-to, :redirect-to,
+ :redirect-to, :write-csv-to, :write-csv-to, :write-json-to,
+ :write-json-to, :write-jsonlines-to, :write-jsonlines-to,
+ :write-raw-to, :write-raw-to, :write-screen-to, :write-screen-to,
+ :write-table-to, :write-table-to, :write-to, :write-to, :write-view-to,
+ :write-view-to
+Example
+#1 To output 'Hello, World!':
+ :echo Hello, World!
+
+
+
+:enable-filter pattern
+══════════════════════════════════════════════════════════════════════
+ Enable a previously created and disabled filter
+Parameter
+ pattern The regular expression used in the filter command
+See Also
+ :filter-in, :filter-out, :hide-lines-after, :hide-lines-before,
+ :hide-unmarked-lines, :toggle-filtering
+Example
+#1 To enable the disabled filter with the pattern 'last message repeated':
+ :enable-filter last message repeated
+
+
+
+:enable-word-wrap
+══════════════════════════════════════════════════════════════════════
+ Enable word-wrapping for the current view
+See Also
+ :disable-word-wrap, :hide-fields, :highlight
+
+:eval command
+══════════════════════════════════════════════════════════════════════
+ Evaluate the given command/query after doing environment variable
+ substitution
+Parameter
+ command The command or query to perform substitution on.
+See Also
+ :alt-msg, :echo, :redirect-to, :write-csv-to, :write-json-to,
+ :write-jsonlines-to, :write-raw-to, :write-screen-to, :write-table-to,
+ :write-to, :write-view-to
+Example
+#1 To substitute the table name from a variable:
+ :eval ;SELECT * FROM ${table}
+
+
+
+:filter-expr expr
+══════════════════════════════════════════════════════════════════════
+ Set the filter expression
+Parameter
+ expr The SQL expression to evaluate for each log message. The
+ message values can be accessed using column names prefixed
+ with a colon
+See Also
+ :clear-filter-expr, :filter-in, :filter-out, :hide-lines-after,
+ :hide-lines-before, :hide-unmarked-lines, :toggle-filtering
+Examples
+#1 To set a filter expression that matched syslog messages from 'syslogd':
+ :filter-expr :log_procname = 'syslogd'
+
+
+#2 To set a filter expression that matches log messages where 'id' is followed by a number
+ and contains the string 'foo':
+ :filter-expr :log_body REGEXP 'id\d+' AND :log_body REGEXP 'foo'
+
+
+
+:filter-in pattern
+══════════════════════════════════════════════════════════════════════
+ Only show lines that match the given regular expression in the
+ current view
+Parameter
+ pattern The regular expression to match
+See Also
+ :delete-filter, :disable-filter, :filter-out, :hide-lines-after,
+ :hide-lines-before, :hide-unmarked-lines, :toggle-filtering
+Example
+#1 To filter out log messages that do not have the string 'dhclient':
+ :filter-in dhclient
+
+
+
+:filter-out pattern
+══════════════════════════════════════════════════════════════════════
+ Remove lines that match the given regular expression in the current
+ view
+Parameter
+ pattern The regular expression to match
+See Also
+ :delete-filter, :disable-filter, :filter-in, :hide-lines-after,
+ :hide-lines-before, :hide-unmarked-lines, :toggle-filtering
+Example
+#1 To filter out log messages that contain the string 'last message repeated':
+ :filter-out last message repeated
+
+
+
+:goto line#|N%|date
+══════════════════════════════════════════════════════════════════════
+ Go to the given location in the top view
+Parameter
+ line#|N%|date A line number, percent into the file, or a timestamp
+
+See Also
+ :next-location, :next-mark, :prev-location, :prev-mark, :relative-goto
+Examples
+#1 To go to line 22:
+ :goto 22
+
+
+#2 To go to the line 75% of the way into the view:
+ :goto 75%
+
+
+#3 To go to the first message on the first day of 2017:
+ :goto 2017-01-01
+
+
+
+:help
+══════════════════════════════════════════════════════════════════════
+ Open the help text view
+
+
+:hide-fields field-name1 [... field-nameN]
+══════════════════════════════════════════════════════════════════════
+ Hide log message fields by replacing them with an ellipsis
+Parameter
+ field-name The name of the field to hide in the format for the top
+ log line. A qualified name can be used where the field
+ name is prefixed by the format name and a dot to hide
+ any field.
+See Also
+ :enable-word-wrap, :highlight, :show-fields
+Examples
+#1 To hide the log_procname fields in all formats:
+ :hide-fields log_procname
+
+
+#2 To hide only the log_procname field in the syslog format:
+ :hide-fields syslog_log.log_procname
+
+
+
+:hide-file path
+══════════════════════════════════════════════════════════════════════
+ Hide the given file(s) and skip indexing until it is shown again.
+ If no path is given, the current file in the view is hidden
+Parameter
+ path A path or glob pattern that specifies the files to hide
+
+
+:hide-lines-after date
+══════════════════════════════════════════════════════════════════════
+ Hide lines that come after the given date
+Parameter
+ date An absolute or relative date
+See Also
+ :filter-in, :filter-out, :hide-lines-before, :hide-unmarked-lines,
+ :show-lines-before-and-after, :toggle-filtering
+Examples
+#1 To hide the lines after the top line in the view:
+ :hide-lines-after here
+
+
+#2 To hide the lines after 6 AM today:
+ :hide-lines-after 6am
+
+
+
+:hide-lines-before date
+══════════════════════════════════════════════════════════════════════
+ Hide lines that come before the given date
+Parameter
+ date An absolute or relative date
+See Also
+ :filter-in, :filter-out, :hide-lines-after, :hide-unmarked-lines,
+ :show-lines-before-and-after, :toggle-filtering
+Examples
+#1 To hide the lines before the top line in the view:
+ :hide-lines-before here
+
+
+#2 To hide the log messages before 6 AM today:
+ :hide-lines-before 6am
+
+
+
+:hide-unmarked-lines
+══════════════════════════════════════════════════════════════════════
+ Hide lines that have not been bookmarked
+See Also
+ :filter-in, :filter-out, :hide-lines-after, :hide-lines-before, :mark,
+ :next-mark, :prev-mark, :toggle-filtering
+
+:highlight pattern
+══════════════════════════════════════════════════════════════════════
+ Add coloring to log messages fragments that match the given regular
+ expression
+Parameter
+ pattern The regular expression to match
+See Also
+ :clear-highlight, :enable-word-wrap, :hide-fields
+Example
+#1 To highlight numbers with three or more digits:
+ :highlight \d{3,}
+
+
+
+:load-session
+══════════════════════════════════════════════════════════════════════
+ Load the latest session state
+
+
+:mark
+══════════════════════════════════════════════════════════════════════
+ Toggle the bookmark state for the top line in the current view
+See Also
+ :hide-unmarked-lines, :next-mark, :prev-mark
+
+:mark-expr expr
+══════════════════════════════════════════════════════════════════════
+ Set the bookmark expression
+Parameter
+ expr The SQL expression to evaluate for each log message. The
+ message values can be accessed using column names prefixed
+ with a colon
+See Also
+ :clear-mark-expr, :hide-unmarked-lines, :mark, :next-mark, :prev-mark
+Example
+#1 To mark lines from 'dhclient' that mention 'eth0':
+ :mark-expr :log_procname = 'dhclient' AND :log_body LIKE '%eth0%'
+
+
+
+:next-location
+══════════════════════════════════════════════════════════════════════
+ Move to the next position in the location history
+See Also
+ :goto, :next-mark, :prev-location, :prev-mark, :relative-goto
+
+:next-mark type1 [... typeN]
+══════════════════════════════════════════════════════════════════════
+ Move to the next bookmark of the given type in the current view
+Parameter
+ type The type of bookmark -- error, warning, search, user, file,
+ meta
+See Also
+ :goto, :hide-unmarked-lines, :mark, :next-location, :prev-location,
+ :prev-mark, :prev-mark, :relative-goto
+Example
+#1 To go to the next error:
+ :next-mark error
+
+
+
+:open path1 [... pathN]
+══════════════════════════════════════════════════════════════════════
+ Open the given file(s) in lnav. Opening files on machines
+ accessible via SSH can be done using the syntax: [user@]host:/path/
+ to/logs
+Parameter
+ path The path to the file to open
+
+Examples
+#1 To open the file '/path/to/file':
+ :open /path/to/file
+
+
+#2 To open the remote file '/var/log/syslog.log':
+ :open dean@host1.example.com:/var/log/syslog.log
+
+
+
+:partition-name name
+══════════════════════════════════════════════════════════════════════
+ Mark the top line in the log view as the start of a new partition
+ with the given name
+Parameter
+ name The name for the new partition
+
+Example
+#1 To mark the top line as the start of the partition named 'boot #1':
+ :partition-name boot #1
+
+
+
+:pipe-line-to shell-cmd
+══════════════════════════════════════════════════════════════════════
+ Pipe the top line to the given shell command
+Parameter
+ shell-cmd The shell command-line to execute
+See Also
+ :append-to, :echo, :pipe-to, :redirect-to, :write-csv-to,
+ :write-json-to, :write-jsonlines-to, :write-raw-to, :write-screen-to,
+ :write-table-to, :write-to, :write-view-to
+Example
+#1 To write the top line to 'sed' for processing:
+ :pipe-line-to sed -e 's/foo/bar/g'
+
+
+
+:pipe-to shell-cmd
+══════════════════════════════════════════════════════════════════════
+ Pipe the marked lines to the given shell command
+Parameter
+ shell-cmd The shell command-line to execute
+See Also
+ :append-to, :echo, :pipe-line-to, :redirect-to, :write-csv-to,
+ :write-json-to, :write-jsonlines-to, :write-raw-to, :write-screen-to,
+ :write-table-to, :write-to, :write-view-to
+Example
+#1 To write marked lines to 'sed' for processing:
+ :pipe-to sed -e s/foo/bar/g
+
+
+
+:prev-location
+══════════════════════════════════════════════════════════════════════
+ Move to the previous position in the location history
+See Also
+ :goto, :next-location, :next-mark, :prev-mark, :relative-goto
+
+:prev-mark type1 [... typeN]
+══════════════════════════════════════════════════════════════════════
+ Move to the previous bookmark of the given type in the current view
+Parameter
+ type The type of bookmark -- error, warning, search, user, file,
+ meta
+See Also
+ :goto, :hide-unmarked-lines, :mark, :next-location, :next-mark,
+ :next-mark, :prev-location, :relative-goto
+Example
+#1 To go to the previous error:
+ :prev-mark error
+
+
+
+:prompt type [--alt] [prompt] [initial-value]
+══════════════════════════════════════════════════════════════════════
+ Open the given prompt
+Parameters
+ type The type of prompt -- command, script, search, sql,
+ user
+ --alt Perform the alternate action for this prompt by
+ default
+ prompt The prompt to display
+ initial-value The initial value to fill in for the prompt
+
+Examples
+#1 To open the command prompt with 'filter-in' already filled in:
+ :prompt command : 'filter-in '
+
+
+#2 To ask the user a question:
+ :prompt user 'Are you sure? '
+
+
+
+:quit
+══════════════════════════════════════════════════════════════════════
+ Quit lnav
+
+
+:quit
+══════════════════════════════════════════════════════════════════════
+ Quit lnav
+
+
+:quit
+══════════════════════════════════════════════════════════════════════
+ Quit lnav
+
+
+:redirect-to [path]
+══════════════════════════════════════════════════════════════════════
+ Redirect the output of commands that write to stdout to the given
+ file
+Parameter
+ path The path to the file to write. If not specified, the current
+ redirect will be cleared
+See Also
+ :alt-msg, :append-to, :echo, :echo, :eval, :pipe-line-to, :pipe-to,
+ :write-csv-to, :write-csv-to, :write-json-to, :write-json-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
+ :write-screen-to, :write-screen-to, :write-table-to, :write-table-to,
+ :write-to, :write-to, :write-view-to, :write-view-to
+Example
+#1 To write the output of lnav commands to the file /tmp/script-output.txt:
+ :redirect-to /tmp/script-output.txt
+
+
+
+:redraw
+══════════════════════════════════════════════════════════════════════
+ Do a full redraw of the screen
+
+
+:relative-goto line-count|N%
+══════════════════════════════════════════════════════════════════════
+ Move the current view up or down by the given amount
+Parameter
+ line-count|N% The amount to move the view by.
+See Also
+ :goto, :next-location, :next-mark, :prev-location, :prev-mark
+Examples
+#1 To move 22 lines down in the view:
+ :relative-goto +22
+
+
+#2 To move 10 percent back in the view:
+ :relative-goto -10%
+
+
+
+:reset-config option
+══════════════════════════════════════════════════════════════════════
+ Reset the configuration option to its default value
+Parameter
+ option The path to the option to reset
+See Also
+ :config
+Example
+#1 To reset the '/ui/clock-format' option back to the builtin default:
+ :reset-config /ui/clock-format
+
+
+
+:reset-session
+══════════════════════════════════════════════════════════════════════
+ Reset the session state, clearing all filters, highlights, and
+ bookmarks
+
+
+:save-session
+══════════════════════════════════════════════════════════════════════
+ Save the current state as a session
+
+
+:session lnav-command
+══════════════════════════════════════════════════════════════════════
+ Add the given command to the session file (~/.lnav/session)
+Parameter
+ lnav-command The lnav command to save.
+
+Example
+#1 To add the command ':highlight foobar' to the session file:
+ :session :highlight foobar
+
+
+
+:set-min-log-level log-level
+══════════════════════════════════════════════════════════════════════
+ Set the minimum log level to display in the log view
+Parameter
+ log-level The new minimum log level
+
+Example
+#1 To set the minimum log level displayed to error:
+ :set-min-log-level error
+
+
+
+:show-fields field-name1 [... field-nameN]
+══════════════════════════════════════════════════════════════════════
+ Show log message fields that were previously hidden
+Parameter
+ field-name The name of the field to show
+See Also
+ :enable-word-wrap, :hide-fields, :highlight
+Example
+#1 To show all the log_procname fields in all formats:
+ :show-fields log_procname
+
+
+
+:show-file path
+══════════════════════════════════════════════════════════════════════
+ Show the given file(s) and resume indexing.
+Parameter
+ path The path or glob pattern that specifies the files to show
+
+
+:show-lines-before-and-after
+══════════════════════════════════════════════════════════════════════
+ Show lines that were hidden by the 'hide-lines' commands
+See Also
+ :filter-in, :filter-out, :hide-lines-after, :hide-lines-before,
+ :hide-unmarked-lines, :toggle-filtering
+
+:show-only-this-file
+══════════════════════════════════════════════════════════════════════
+ Show only the file for the top line in the view
+
+
+:show-unmarked-lines
+══════════════════════════════════════════════════════════════════════
+ Show lines that have not been bookmarked
+See Also
+ :filter-in, :filter-out, :hide-lines-after, :hide-lines-before,
+ :hide-unmarked-lines, :hide-unmarked-lines, :mark, :next-mark,
+ :prev-mark, :toggle-filtering
+
+:spectrogram field-name
+══════════════════════════════════════════════════════════════════════
+ Visualize the given message field using a spectrogram
+Parameter
+ field-name The name of the numeric field to visualize.
+
+Example
+#1 To visualize the sc_bytes field in the access_log format:
+ :spectrogram sc_bytes
+
+
+
+:summarize column-name
+══════════════════════════════════════════════════════════════════════
+ Execute a SQL query that computes the characteristics of the values
+ in the given column
+Parameter
+ column-name The name of the column to analyze.
+
+Example
+#1 To get a summary of the sc_bytes column in the access_log table:
+ :summarize sc_bytes
+
+
+
+:switch-to-view view-name
+══════════════════════════════════════════════════════════════════════
+ Switch to the given view
+Parameter
+ view-name The name of the view to switch to.
+
+Example
+#1 To switch to the 'schema' view:
+ :switch-to-view schema
+
+
+
+:tag tag1 [... tagN]
+══════════════════════════════════════════════════════════════════════
+ Attach tags to the top log line
+Parameter
+ tag The tags to attach
+See Also
+ :comment, :delete-tags, :untag
+Example
+#1 To add the tags '#BUG123' and '#needs-review' to the top line:
+ :tag #BUG123 #needs-review
+
+
+
+:toggle-filtering
+══════════════════════════════════════════════════════════════════════
+ Toggle the filtering flag for the current view
+See Also
+ :filter-in, :filter-out, :hide-lines-after, :hide-lines-before,
+ :hide-unmarked-lines
+
+:toggle-view view-name
+══════════════════════════════════════════════════════════════════════
+ Switch to the given view or, if it is already displayed, switch to
+ the previous view
+Parameter
+ view-name The name of the view to toggle the display of.
+
+Example
+#1 To switch to the 'schema' view if it is not displayed or switch back to the previous
+ view:
+ :toggle-view schema
+
+
+
+:unix-time seconds
+══════════════════════════════════════════════════════════════════════
+ Convert epoch time to a human-readable form
+Parameter
+ seconds The epoch timestamp to convert
+
+Example
+#1 To convert the epoch time 1490191111:
+ :unix-time 1490191111
+
+
+
+:untag tag1 [... tagN]
+══════════════════════════════════════════════════════════════════════
+ Detach tags from the top log line
+Parameter
+ tag The tags to detach
+See Also
+ :comment, :tag
+Example
+#1 To remove the tags '#BUG123' and '#needs-review' from the top line:
+ :untag #BUG123 #needs-review
+
+
+
+:write-table-to path
+══════════════════════════════════════════════════════════════════════
+ Write SQL results to the given file in a tabular format
+Parameter
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :pipe-line-to, :pipe-to, :redirect-to,
+ :redirect-to, :write-csv-to, :write-csv-to, :write-csv-to,
+ :write-json-to, :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
+ :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
+ :write-to, :write-to, :write-view-to, :write-view-to, :write-view-to
+Example
+#1 To write SQL results as text to /tmp/table.txt:
+ :write-table-to /tmp/table.txt
+
+
+
+:write-csv-to path
+══════════════════════════════════════════════════════════════════════
+ Write SQL results to the given file in CSV format
+Parameter
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :pipe-line-to, :pipe-to, :redirect-to,
+ :redirect-to, :write-json-to, :write-json-to, :write-json-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-jsonlines-to,
+ :write-raw-to, :write-raw-to, :write-raw-to, :write-screen-to,
+ :write-screen-to, :write-screen-to, :write-table-to, :write-table-to,
+ :write-table-to, :write-to, :write-to, :write-view-to, :write-view-to,
+ :write-view-to
+Example
+#1 To write SQL results as CSV to /tmp/table.csv:
+ :write-csv-to /tmp/table.csv
+
+
+
+:write-json-to path
+══════════════════════════════════════════════════════════════════════
+ Write SQL results to the given file in JSON format
+Parameter
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :pipe-line-to, :pipe-to, :redirect-to,
+ :redirect-to, :write-csv-to, :write-csv-to, :write-csv-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-jsonlines-to,
+ :write-raw-to, :write-raw-to, :write-raw-to, :write-screen-to,
+ :write-screen-to, :write-screen-to, :write-table-to, :write-table-to,
+ :write-table-to, :write-to, :write-to, :write-view-to, :write-view-to,
+ :write-view-to
+Example
+#1 To write SQL results as JSON to /tmp/table.json:
+ :write-json-to /tmp/table.json
+
+
+
+:write-jsonlines-to path
+══════════════════════════════════════════════════════════════════════
+ Write SQL results to the given file in JSON Lines format
+Parameter
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :pipe-line-to, :pipe-to, :redirect-to,
+ :redirect-to, :write-csv-to, :write-csv-to, :write-csv-to,
+ :write-json-to, :write-json-to, :write-json-to, :write-raw-to,
+ :write-raw-to, :write-raw-to, :write-screen-to, :write-screen-to,
+ :write-screen-to, :write-table-to, :write-table-to, :write-table-to,
+ :write-to, :write-to, :write-view-to, :write-view-to, :write-view-to
+Example
+#1 To write SQL results as JSON Lines to /tmp/table.json:
+ :write-jsonlines-to /tmp/table.json
+
+
+
+:write-raw-to [--view={log,db}] path
+══════════════════════════════════════════════════════════════════════
+ In the log view, write the original log file content of the marked
+ messages to the file. In the DB view, the contents of the cells are
+ written to the output file.
+Parameters
+ --view={log,db} The view to use as the source of data
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :pipe-line-to, :pipe-to, :redirect-to,
+ :redirect-to, :write-csv-to, :write-csv-to, :write-csv-to,
+ :write-json-to, :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-screen-to,
+ :write-screen-to, :write-screen-to, :write-table-to, :write-table-to,
+ :write-table-to, :write-to, :write-to, :write-view-to, :write-view-to,
+ :write-view-to
+Example
+#1 To write the marked lines in the log view to /tmp/table.txt:
+ :write-raw-to /tmp/table.txt
+
+
+
+:write-screen-to path
+══════════════════════════════════════════════════════════════════════
+ Write the displayed text or SQL results to the given file without
+ any formatting
+Parameter
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :pipe-line-to, :pipe-to, :redirect-to,
+ :redirect-to, :write-csv-to, :write-csv-to, :write-csv-to,
+ :write-json-to, :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
+ :write-raw-to, :write-table-to, :write-table-to, :write-table-to,
+ :write-to, :write-to, :write-view-to, :write-view-to, :write-view-to
+Example
+#1 To write only the displayed text to /tmp/table.txt:
+ :write-screen-to /tmp/table.txt
+
+
+
+:write-table-to path
+══════════════════════════════════════════════════════════════════════
+ Write SQL results to the given file in a tabular format
+Parameter
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :pipe-line-to, :pipe-to, :redirect-to,
+ :redirect-to, :write-csv-to, :write-csv-to, :write-csv-to,
+ :write-json-to, :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
+ :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
+ :write-to, :write-to, :write-view-to, :write-view-to, :write-view-to
+Example
+#1 To write SQL results as text to /tmp/table.txt:
+ :write-table-to /tmp/table.txt
+
+
+
+:write-to path
+══════════════════════════════════════════════════════════════════════
+ Overwrite the given file with any marked lines in the current view
+Parameter
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :echo, :echo, :eval, :pipe-line-to, :pipe-to,
+ :redirect-to, :redirect-to, :write-csv-to, :write-csv-to,
+ :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-screen-to,
+ :write-screen-to, :write-table-to, :write-table-to, :write-view-to,
+ :write-view-to
+Example
+#1 To write marked lines to the file /tmp/interesting-lines.txt:
+ :write-to /tmp/interesting-lines.txt
+
+
+
+:write-view-to path
+══════════════════════════════════════════════════════════════════════
+ Write the text in the top view to the given file without any
+ formatting
+Parameter
+ path The path to the file to write
+See Also
+ :alt-msg, :append-to, :create-logline-table, :create-search-table,
+ :echo, :echo, :eval, :pipe-line-to, :pipe-to, :redirect-to,
+ :redirect-to, :write-csv-to, :write-csv-to, :write-csv-to,
+ :write-json-to, :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
+ :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
+ :write-table-to, :write-table-to, :write-table-to, :write-to,
+ :write-to
+Example
+#1 To write the top view to /tmp/table.txt:
+ :write-view-to /tmp/table.txt
+
+
+
+:zoom-to zoom-level
+══════════════════════════════════════════════════════════════════════
+ Zoom the histogram view to the given level
+Parameter
+ zoom-level The zoom level
+
+Example
+#1 To set the zoom level to '1-week':
+ :zoom-to 1-week
+
+
+SQL Reference
+
+CAST(expr AS type-name)
+══════════════════════════════════════════════════════════════════════
+ Convert the value of the given expression to a different storage
+ class specified by type-name.
+Parameters
+ expr The value to convert.
+ type-name The name of the type to convert to.
+
+Example
+#1 To cast the value 1.23 as an integer:
+ ;SELECT CAST(1.23 AS INTEGER)
+
+
+
+OVER([base-window-name] PARTITION BY expr, ... ORDER BY expr, ...,
+ [frame-spec])
+══════════════════════════════════════════════════════════════════════
+ Executes the preceding function over a window
+Parameters
+ base-window-name The name of the window definition
+ expr The values to use for partitioning
+ expr The values used to order the rows in the window
+ frame-spec Determines which output rows are read by an
+ aggregate window function
+
+
+abs(x)
+══════════════════════════════════════════════════════════════════════
+ Return the absolute value of the argument
+Parameter
+ x The number to convert
+See Also
+ acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the absolute value of -1:
+ ;SELECT abs(-1)
+
+
+
+acos(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the arccosine of a number, in radians
+Parameter
+ num A cosine value that is between -1 and 1
+See Also
+ abs(), acosh(), asin(), asinh(), atan(), atan2(), atanh(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the arccosine of 0.2:
+ ;SELECT acos(0.2)
+
+
+
+acosh(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the hyperbolic arccosine of a number
+Parameter
+ num A number that is one or more
+See Also
+ abs(), acos(), asin(), asinh(), atan(), atan2(), atanh(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the hyperbolic arccosine of 1.2:
+ ;SELECT acosh(1.2)
+
+
+
+asin(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the arcsine of a number, in radians
+Parameter
+ num A sine value that is between -1 and 1
+See Also
+ abs(), acos(), acosh(), asinh(), atan(), atan2(), atanh(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the arcsine of 0.2:
+ ;SELECT asin(0.2)
+
+
+
+asinh(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the hyperbolic arcsine of a number
+Parameter
+ num The number
+See Also
+ abs(), acos(), acosh(), asin(), atan(), atan2(), atanh(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the hyperbolic arcsine of 0.2:
+ ;SELECT asinh(0.2)
+
+
+
+atan(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the arctangent of a number, in radians
+Parameter
+ num The number
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan2(), atanh(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the arctangent of 0.2:
+ ;SELECT atan(0.2)
+
+
+
+atan2(y, x)
+══════════════════════════════════════════════════════════════════════
+ Returns the angle in the plane between the positive X axis and the
+ ray from (0, 0) to the point (x, y)
+Parameters
+ y The y coordinate of the point
+ x The x coordinate of the point
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atanh(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the angle, in degrees, for the point at (5, 5):
+ ;SELECT degrees(atan2(5, 5))
+
+
+
+atanh(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the hyperbolic arctangent of a number
+Parameter
+ num The number
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atn2(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the hyperbolic arctangent of 0.2:
+ ;SELECT atanh(0.2)
+
+
+
+atn2(y, x)
+══════════════════════════════════════════════════════════════════════
+ Returns the angle in the plane between the positive X axis and the
+ ray from (0, 0) to the point (x, y)
+Parameters
+ y The y coordinate of the point
+ x The x coordinate of the point
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ avg(), ceil(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the angle, in degrees, for the point at (5, 5):
+ ;SELECT degrees(atn2(5, 5))
+
+
+
+avg(X)
+══════════════════════════════════════════════════════════════════════
+ Returns the average value of all non-NULL numbers within a group.
+Parameter
+ X The value to compute the average of.
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), ceil(), degrees(), exp(), floor(), log(), log10(), max(),
+ min(), pi(), power(), radians(), round(), sign(), square(), sum(),
+ total()
+Examples
+#1 To get the average of the column 'ex_duration' from the table 'lnav_example_log':
+ ;SELECT avg(ex_duration) FROM lnav_example_log
+
+
+#2 To get the average of the column 'ex_duration' from the table 'lnav_example_log' when
+ grouped by 'ex_procname':
+ ;SELECT ex_procname, avg(ex_duration) FROM lnav_example_log GROUP BY ex_procname
+
+
+
+basename(path)
+══════════════════════════════════════════════════════════════════════
+ Extract the base portion of a pathname.
+Parameter
+ path The path
+See Also
+ dirname(), joinpath(), readlink(), realpath()
+Examples
+#1 To get the base of a plain file name:
+ ;SELECT basename('foobar')
+
+
+#2 To get the base of a path:
+ ;SELECT basename('foo/bar')
+
+
+#3 To get the base of a directory:
+ ;SELECT basename('foo/bar/')
+
+
+#4 To get the base of an empty string:
+ ;SELECT basename('')
+
+
+#5 To get the base of a Windows path:
+ ;SELECT basename('foo\bar')
+
+
+#6 To get the base of the root directory:
+ ;SELECT basename('/')
+
+
+
+ceil(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the smallest integer that is not less than the argument
+Parameter
+ num The number to raise to the ceiling
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), degrees(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the ceiling of 1.23:
+ ;SELECT ceil(1.23)
+
+
+
+changes()
+══════════════════════════════════════════════════════════════════════
+ The number of database rows that were changed, inserted, or deleted
+ by the most recent statement.
+
+
+char(X, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns a string composed of characters having the given unicode
+ code point values
+Parameter
+ X The unicode code point values
+See Also
+ charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
+ substr(), trim(), unicode(), upper(), xpath()
+Example
+#1 To get a string with the code points 0x48 and 0x49:
+ ;SELECT char(0x48, 0x49)
+
+
+
+charindex(needle, haystack, [start])
+══════════════════════════════════════════════════════════════════════
+ Finds the first occurrence of the needle within the haystack and
+ returns the number of prior characters plus 1, or 0 if Y is nowhere
+ found within X
+Parameters
+ needle The string to look for in the haystack
+ haystack The string to search within
+ start The one-based index within the haystack to start the
+ search
+See Also
+ char(), endswith(), extract(), group_concat(), group_spooky_hash(),
+ gunzip(), gzip(), humanize_file_size(), instr(), leftstr(), length(),
+ logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), printf(),
+ proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Examples
+#1 To search for the string 'abc' within 'abcabc' and starting at position 2:
+ ;SELECT charindex('abc', 'abcabc', 2)
+
+
+#2 To search for the string 'abc' within 'abcdef' and starting at position 2:
+ ;SELECT charindex('abc', 'abcdef', 2)
+
+
+
+coalesce(X, Y, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns a copy of its first non-NULL argument, or NULL if all
+ arguments are NULL
+Parameters
+ X A value to check for NULL-ness
+ Y A value to check for NULL-ness
+
+Example
+#1 To get the first non-null value from three parameters:
+ ;SELECT coalesce(null, 0, null)
+
+
+
+count(X)
+══════════════════════════════════════════════════════════════════════
+ If the argument is '*', the total number of rows in the group is
+ returned. Otherwise, the number of times the argument is non-NULL.
+Parameter
+ X The value to count.
+
+Examples
+#1 To get the count of the non-NULL rows of 'lnav_example_log':
+ ;SELECT count(*) FROM lnav_example_log
+
+
+#2 To get the count of the non-NULL values of 'log_part' from 'lnav_example_log':
+ ;SELECT count(log_part) FROM lnav_example_log
+
+
+
+cume_dist()
+══════════════════════════════════════════════════════════════════════
+ Returns the cumulative distribution
+See Also
+ dense_rank(), first_value(), lag(), last_value(), lead(), nth_value(),
+ ntile(), percent_rank(), rank(), row_number()
+
+date(timestring, modifier, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the date in this format: YYYY-MM-DD.
+Parameters
+ timestring The string to convert to a date.
+ modifier A transformation that is applied to the value to the
+ left.
+See Also
+ datetime(), julianday(), strftime(), time(), timediff(), timeslice()
+Examples
+#1 To get the date portion of the timestamp '2017-01-02T03:04:05':
+ ;SELECT date('2017-01-02T03:04:05')
+
+
+#2 To get the date portion of the timestamp '2017-01-02T03:04:05' plus one day:
+ ;SELECT date('2017-01-02T03:04:05', '+1 day')
+
+
+#3 To get the date portion of the epoch timestamp 1491341842:
+ ;SELECT date(1491341842, 'unixepoch')
+
+
+
+datetime(timestring, modifier, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the date and time in this format: YYYY-MM-DD HH:MM:SS.
+Parameters
+ timestring The string to convert to a date with time.
+ modifier A transformation that is applied to the value to the
+ left.
+See Also
+ date(), julianday(), strftime(), time(), timediff(), timeslice()
+Examples
+#1 To get the date and time portion of the timestamp '2017-01-02T03:04:05':
+ ;SELECT datetime('2017-01-02T03:04:05')
+
+
+#2 To get the date and time portion of the timestamp '2017-01-02T03:04:05' plus one minute
+ :
+ ;SELECT datetime('2017-01-02T03:04:05', '+1 minute')
+
+
+#3 To get the date and time portion of the epoch timestamp 1491341842:
+ ;SELECT datetime(1491341842, 'unixepoch')
+
+
+
+degrees(radians)
+══════════════════════════════════════════════════════════════════════
+ Converts radians to degrees
+Parameter
+ radians The radians value to convert to degrees
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), exp(), floor(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To convert PI to degrees:
+ ;SELECT degrees(pi())
+
+
+
+dense_rank()
+══════════════════════════════════════════════════════════════════════
+ Returns the row_number() of the first peer in each group without
+ gaps
+See Also
+ cume_dist(), first_value(), lag(), last_value(), lead(), nth_value(),
+ ntile(), percent_rank(), rank(), row_number()
+
+dirname(path)
+══════════════════════════════════════════════════════════════════════
+ Extract the directory portion of a pathname.
+Parameter
+ path The path
+See Also
+ basename(), joinpath(), readlink(), realpath()
+Examples
+#1 To get the directory of a relative file path:
+ ;SELECT dirname('foo/bar')
+
+
+#2 To get the directory of an absolute file path:
+ ;SELECT dirname('/foo/bar')
+
+
+#3 To get the directory of a file in the root directory:
+ ;SELECT dirname('/bar')
+
+
+#4 To get the directory of a Windows path:
+ ;SELECT dirname('foo\bar')
+
+
+#5 To get the directory of an empty path:
+ ;SELECT dirname('')
+
+
+
+endswith(str, suffix)
+══════════════════════════════════════════════════════════════════════
+ Test if a string ends with the given suffix
+Parameters
+ str The string to test
+ suffix The suffix to check in the string
+See Also
+ char(), charindex(), extract(), group_concat(), group_spooky_hash(),
+ gunzip(), gzip(), humanize_file_size(), instr(), leftstr(), length(),
+ logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), printf(),
+ proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Examples
+#1 To test if the string 'notbad.jpg' ends with '.jpg':
+ ;SELECT endswith('notbad.jpg', '.jpg')
+
+
+#2 To test if the string 'notbad.png' starts with '.jpg':
+ ;SELECT endswith('notbad.png', '.jpg')
+
+
+
+exp(x)
+══════════════════════════════════════════════════════════════════════
+ Returns the value of e raised to the power of x
+Parameter
+ x The exponent
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), floor(), log(), log10(), max(),
+ min(), pi(), power(), radians(), round(), sign(), square(), sum(),
+ total()
+Example
+#1 To raise e to 2:
+ ;SELECT exp(2)
+
+
+
+extract(str)
+══════════════════════════════════════════════════════════════════════
+ Automatically Parse and extract data from a string
+Parameter
+ str The string to parse
+See Also
+ char(), charindex(), endswith(), group_concat(), group_spooky_hash(),
+ gunzip(), gzip(), humanize_file_size(), instr(), leftstr(), length(),
+ logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), printf(),
+ proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Examples
+#1 To extract key/value pairs from a string:
+ ;SELECT extract('foo=1 bar=2 name="Rolo Tomassi"')
+
+
+#2 To extract columnar data from a string:
+ ;SELECT extract('1.0 abc 2.0')
+
+
+
+first_value(expr)
+══════════════════════════════════════════════════════════════════════
+ Returns the result of evaluating the expression against the first
+ row in the window frame.
+Parameter
+ expr The expression to execute over the first row
+See Also
+ cume_dist(), dense_rank(), lag(), last_value(), lead(), nth_value(),
+ ntile(), percent_rank(), rank(), row_number()
+
+floor(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the largest integer that is not greater than the argument
+Parameter
+ num The number to lower to the floor
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), log(), log10(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the floor of 1.23:
+ ;SELECT floor(1.23)
+
+
+
+generate_series(start, stop, [step])
+══════════════════════════════════════════════════════════════════════
+ A table-valued-function that returns the whole numbers between a
+ lower and upper bound, inclusive
+Parameters
+ start The starting point of the series
+ stop The stopping point of the series
+ step The increment between each value
+Result
+ value The number in the series
+
+Examples
+#1 To generate the numbers in the range [10, 14]:
+ ;SELECT value FROM generate_series(10, 14)
+
+
+#2 To generate every other number in the range [10, 14]:
+ ;SELECT value FROM generate_series(10, 14, 2)
+
+
+#3 To count down from five to 1:
+ ;SELECT value FROM generate_series(1, 5, -1)
+
+
+
+gethostbyaddr(hostname)
+══════════════════════════════════════════════════════════════════════
+ Get the hostname for the given IP address
+Parameter
+ hostname The IP address to lookup.
+See Also
+ gethostbyname()
+Example
+#1 To get the hostname for the IP '127.0.0.1':
+ ;SELECT gethostbyaddr('127.0.0.1')
+
+
+
+gethostbyname(hostname)
+══════════════════════════════════════════════════════════════════════
+ Get the IP address for the given hostname
+Parameter
+ hostname The DNS hostname to lookup.
+See Also
+ gethostbyaddr()
+Example
+#1 To get the IP address for 'localhost':
+ ;SELECT gethostbyname('localhost')
+
+
+
+glob(pattern, str)
+══════════════════════════════════════════════════════════════════════
+ Match a string against Unix glob pattern
+Parameters
+ pattern The glob pattern
+ str The string to match
+
+Example
+#1 To test if the string 'abc' matches the glob 'a*':
+ ;SELECT glob('a*', 'abc')
+
+
+
+group_concat(X, [sep])
+══════════════════════════════════════════════════════════════════════
+ Returns a string which is the concatenation of all non-NULL values
+ of X separated by a comma or the given separator.
+Parameters
+ X The value to concatenate.
+ sep The separator to place between the values.
+See Also
+ char(), charindex(), endswith(), extract(), group_spooky_hash(),
+ gunzip(), gzip(), humanize_file_size(), instr(), leftstr(), length(),
+ logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), printf(),
+ proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Examples
+#1 To concatenate the values of the column 'ex_procname' from the table 'lnav_example_log'
+ :
+ ;SELECT group_concat(ex_procname) FROM lnav_example_log
+
+
+#2 To join the values of the column 'ex_procname' using the string ', ':
+ ;SELECT group_concat(ex_procname, ', ') FROM lnav_example_log
+
+
+#3 To concatenate the distinct values of the column 'ex_procname' from the table '
+ lnav_example_log':
+ ;SELECT group_concat(DISTINCT ex_procname) FROM lnav_example_log
+
+
+
+group_spooky_hash(str, ...)
+══════════════════════════════════════════════════════════════════════
+ Compute the hash value for the given arguments
+Parameter
+ str The string to hash
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(), gunzip(),
+ gzip(), humanize_file_size(), instr(), leftstr(), length(),
+ logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), printf(),
+ proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Example
+#1 To produce a hash of all of the values of 'column1':
+ ;SELECT group_spooky_hash(column1) FROM (VALUES ('abc'), ('123'))
+
+
+
+gunzip(b, ...)
+══════════════════════════════════════════════════════════════════════
+ Decompress a gzip file
+Parameter
+ b The blob to decompress
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gzip(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ printf(), proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+
+gzip(value, ...)
+══════════════════════════════════════════════════════════════════════
+ Compress a string into a gzip file
+Parameter
+ value The value to compress
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
+ substr(), trim(), unicode(), upper(), xpath()
+
+hex(X)
+══════════════════════════════════════════════════════════════════════
+ Returns a string which is the upper-case hexadecimal rendering of
+ the content of its argument.
+Parameter
+ X The blob to convert to hexadecimal
+
+Example
+#1 To get the hexadecimal rendering of the string 'abc':
+ ;SELECT hex('abc')
+
+
+
+humanize_file_size(value)
+══════════════════════════════════════════════════════════════════════
+ Format the given file size as a human-friendly string
+Parameter
+ value The file size to format
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), instr(), leftstr(), length(),
+ logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), printf(),
+ proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Example
+#1 To format an amount:
+ ;SELECT humanize_file_size(10 * 1024 * 1024)
+
+
+
+ifnull(X, Y)
+══════════════════════════════════════════════════════════════════════
+ Returns a copy of its first non-NULL argument, or NULL if both
+ arguments are NULL
+Parameters
+ X A value to check for NULL-ness
+ Y A value to check for NULL-ness
+
+Example
+#1 To get the first non-null value between null and zero:
+ ;SELECT ifnull(null, 0)
+
+
+
+instr(haystack, needle)
+══════════════════════════════════════════════════════════════════════
+ Finds the first occurrence of the needle within the haystack and
+ returns the number of prior characters plus 1, or 0 if the needle
+ was not found
+Parameters
+ haystack The string to search within
+ needle The string to look for in the haystack
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ printf(), proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Example
+#1 To test get the position of 'b' in the string 'abc':
+ ;SELECT instr('abc', 'b')
+
+
+
+jget(json, ptr, [default])
+══════════════════════════════════════════════════════════════════════
+ Get the value from a JSON object using a JSON-Pointer.
+Parameters
+ json The JSON object to query.
+ ptr The JSON-Pointer to lookup in the object.
+ default The default value if the value was not found
+See Also
+ json_concat(), json_contains(), json_group_array(),
+ json_group_object()
+Examples
+#1 To get the root of a JSON value:
+ ;SELECT jget('1', '')
+
+
+#2 To get the property named 'b' in a JSON object:
+ ;SELECT jget('{ "a": 1, "b": 2 }', '/b')
+
+
+#3 To get the 'msg' property and return a default if it does not exist:
+ ;SELECT jget(null, '/msg', 'Hello')
+
+
+
+joinpath(path, ...)
+══════════════════════════════════════════════════════════════════════
+ Join components of a path together.
+Parameter
+ path One or more path components to join together. If an argument
+ starts with a forward or backward slash, it will be
+ considered an absolute path and any preceding elements will
+ be ignored.
+See Also
+ basename(), dirname(), readlink(), realpath()
+Examples
+#1 To join a directory and file name into a relative path:
+ ;SELECT joinpath('foo', 'bar')
+
+
+#2 To join an empty component with other names into a relative path:
+ ;SELECT joinpath('', 'foo', 'bar')
+
+
+#3 To create an absolute path with two path components:
+ ;SELECT joinpath('/', 'foo', 'bar')
+
+
+#4 To create an absolute path from a path component that starts with a forward slash:
+ ;SELECT joinpath('/', 'foo', '/bar')
+
+
+
+json_concat(json, value, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns an array with the given values concatenated onto the end.
+ If the initial value is null, the result will be an array with the
+ given elements. If the initial value is an array, the result will
+ be an array with the given values at the end. If the initial value
+ is not null or an array, the result will be an array with two
+ elements: the initial value and the given value.
+Parameters
+ json The initial JSON value.
+ value The value(s) to add to the end of the array.
+See Also
+ jget(), json_contains(), json_group_array(), json_group_object()
+Examples
+#1 To append the number 4 to null:
+ ;SELECT json_concat(NULL, 4)
+
+
+#2 To append 4 and 5 to the array [1, 2, 3]:
+ ;SELECT json_concat('[1, 2, 3]', 4, 5)
+
+
+#3 To concatenate two arrays together:
+ ;SELECT json_concat('[1, 2, 3]', json('[4, 5]'))
+
+
+
+json_contains(json, value)
+══════════════════════════════════════════════════════════════════════
+ Check if a JSON value contains the given element.
+Parameters
+ json The JSON value to query.
+ value The value to look for in the first argument
+See Also
+ jget(), json_concat(), json_group_array(), json_group_object()
+Examples
+#1 To test if a JSON array contains the number 4:
+ ;SELECT json_contains('[1, 2, 3]', 4)
+
+
+#2 To test if a JSON array contains the string 'def':
+ ;SELECT json_contains('["abc", "def"]', 'def')
+
+
+
+json_group_array(value, ...)
+══════════════════════════════════════════════════════════════════════
+ Collect the given values from a query into a JSON array
+Parameter
+ value The values to append to the array
+See Also
+ jget(), json_concat(), json_contains(), json_group_object()
+Examples
+#1 To create an array from arguments:
+ ;SELECT json_group_array('one', 2, 3.4)
+
+
+#2 To create an array from a column of values:
+ ;SELECT json_group_array(column1) FROM (VALUES (1), (2), (3))
+
+
+
+json_group_object(name, value, ...)
+══════════════════════════════════════════════════════════════════════
+ Collect the given values from a query into a JSON object
+Parameters
+ name The property name for the value
+ value The value to add to the object
+See Also
+ jget(), json_concat(), json_contains(), json_group_array()
+Examples
+#1 To create an object from arguments:
+ ;SELECT json_group_object('a', 1, 'b', 2)
+
+
+#2 To create an object from a pair of columns:
+ ;SELECT json_group_object(column1, column2) FROM (VALUES ('a', 1), ('b', 2))
+
+
+
+julianday(timestring, modifier, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the number of days since noon in Greenwich on November 24,
+ 4714 B.C.
+Parameters
+ timestring The string to convert to a date with time.
+ modifier A transformation that is applied to the value to the
+ left.
+See Also
+ date(), datetime(), strftime(), time(), timediff(), timeslice()
+Examples
+#1 To get the julian day from the timestamp '2017-01-02T03:04:05':
+ ;SELECT julianday('2017-01-02T03:04:05')
+
+
+#2 To get the julian day from the timestamp '2017-01-02T03:04:05' plus one minute:
+ ;SELECT julianday('2017-01-02T03:04:05', '+1 minute')
+
+
+#3 To get the julian day from the timestamp 1491341842:
+ ;SELECT julianday(1491341842, 'unixepoch')
+
+
+
+lag(expr, [offset], [default])
+══════════════════════════════════════════════════════════════════════
+ Returns the result of evaluating the expression against the previous
+ row in the partition.
+Parameters
+ expr The expression to execute over the previous row
+ offset The offset from the current row in the partition
+ default The default value if the previous row does not exist
+ instead of NULL
+See Also
+ cume_dist(), dense_rank(), first_value(), last_value(), lead(),
+ nth_value(), ntile(), percent_rank(), rank(), row_number()
+
+last_insert_rowid()
+══════════════════════════════════════════════════════════════════════
+ Returns the ROWID of the last row insert from the database
+ connection which invoked the function
+
+
+last_value(expr)
+══════════════════════════════════════════════════════════════════════
+ Returns the result of evaluating the expression against the last row
+ in the window frame.
+Parameter
+ expr The expression to execute over the last row
+See Also
+ cume_dist(), dense_rank(), first_value(), lag(), lead(), nth_value(),
+ ntile(), percent_rank(), rank(), row_number()
+
+lead(expr, [offset], [default])
+══════════════════════════════════════════════════════════════════════
+ Returns the result of evaluating the expression against the next row
+ in the partition.
+Parameters
+ expr The expression to execute over the next row
+ offset The offset from the current row in the partition
+ default The default value if the next row does not exist instead
+ of NULL
+See Also
+ cume_dist(), dense_rank(), first_value(), lag(), last_value(),
+ nth_value(), ntile(), percent_rank(), rank(), row_number()
+
+leftstr(str, N)
+══════════════════════════════════════════════════════════════════════
+ Returns the N leftmost (UTF-8) characters in the given string.
+Parameters
+ str The string to return subset.
+ N The number of characters from the left side of the string to
+ return.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ printf(), proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Examples
+#1 To get the first character of the string 'abc':
+ ;SELECT leftstr('abc', 1)
+
+
+#2 To get the first ten characters of a string, regardless of size:
+ ;SELECT leftstr('abc', 10)
+
+
+
+length(str)
+══════════════════════════════════════════════════════════════════════
+ Returns the number of characters (not bytes) in the given string
+ prior to the first NUL character
+Parameter
+ str The string to determine the length of
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ printf(), proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Example
+#1 To get the length of the string 'abc':
+ ;SELECT length('abc')
+
+
+
+like(pattern, str, [escape])
+══════════════════════════════════════════════════════════════════════
+ Match a string against a pattern
+Parameters
+ pattern The pattern to match. A percent symbol (%) will match
+ zero or more characters and an underscore (_) will match a
+ single character.
+ str The string to match
+ escape The escape character that can be used to prefix a literal
+ percent or underscore in the pattern.
+
+Examples
+#1 To test if the string 'aabcc' contains the letter 'b':
+ ;SELECT like('%b%', 'aabcc')
+
+
+#2 To test if the string 'aab%' ends with 'b%':
+ ;SELECT like('%b:%', 'aab%', ':')
+
+
+
+likelihood(value, probability)
+══════════════════════════════════════════════════════════════════════
+ Provides a hint to the query planner that the first argument is a
+ boolean that is true with the given probability
+Parameters
+ value The boolean value to return
+ probability A floating point constant between 0.0 and 1.0
+
+
+likely(value)
+══════════════════════════════════════════════════════════════════════
+ Short-hand for likelihood(X,0.9375)
+Parameter
+ value The boolean value to return
+
+
+lnav_top_file()
+══════════════════════════════════════════════════════════════════════
+ Return the name of the file that the top line in the current view
+ came from.
+
+
+lnav_version()
+══════════════════════════════════════════════════════════════════════
+ Return the current version of lnav
+
+
+load_extension(path, [entry-point])
+══════════════════════════════════════════════════════════════════════
+ Loads SQLite extensions out of the given shared library file using
+ the given entry point.
+Parameters
+ path The path to the shared library containing the
+ extension.
+ entry-point
+
+
+log(x)
+══════════════════════════════════════════════════════════════════════
+ Returns the natural logarithm of x
+Parameter
+ x The number
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log10(), max(),
+ min(), pi(), power(), radians(), round(), sign(), square(), sum(),
+ total()
+Example
+#1 To get the natual logarithm of 8:
+ ;SELECT log(8)
+
+
+
+log10(x)
+══════════════════════════════════════════════════════════════════════
+ Returns the base-10 logarithm of X
+Parameter
+ x The number
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), max(), min(),
+ pi(), power(), radians(), round(), sign(), square(), sum(), total()
+Example
+#1 To get the logarithm of 100:
+ ;SELECT log10(100)
+
+
+
+log_top_datetime()
+══════════════════════════════════════════════════════════════════════
+ Return the timestamp of the line at the top of the log view.
+
+
+log_top_line()
+══════════════════════════════════════════════════════════════════════
+ Return the line number at the top of the log view.
+
+
+logfmt2json(str)
+══════════════════════════════════════════════════════════════════════
+ Convert a logfmt-encoded string into JSON
+Parameter
+ str The logfmt message to parse
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), lower(), ltrim(), padc(), padl(), padr(),
+ printf(), proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Example
+#1 To extract key/value pairs from a log message:
+ ;SELECT logfmt2json('foo=1 bar=2 name="Rolo Tomassi"')
+
+
+
+lower(str)
+══════════════════════════════════════════════════════════════════════
+ Returns a copy of the given string with all ASCII characters
+ converted to lower case.
+Parameter
+ str The string to convert.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), ltrim(), padc(), padl(), padr(),
+ printf(), proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Example
+#1 To lowercase the string 'AbC':
+ ;SELECT lower('AbC')
+
+
+
+ltrim(str, [chars])
+══════════════════════════════════════════════════════════════════════
+ Returns a string formed by removing any and all characters that
+ appear in the second argument from the left side of the first.
+Parameters
+ str The string to trim characters from the left side
+ chars The characters to trim. Defaults to spaces.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), padc(), padl(), padr(),
+ printf(), proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Examples
+#1 To trim the leading whitespace from the string ' abc':
+ ;SELECT ltrim(' abc')
+
+
+#2 To trim the characters 'a' or 'b' from the left side of the string 'aaaabbbc':
+ ;SELECT ltrim('aaaabbbc', 'ab')
+
+
+
+max(X, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the argument with the maximum value, or return NULL if any
+ argument is NULL.
+Parameter
+ X The numbers to find the maximum of. If only one argument is
+ given, this function operates as an aggregate.
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ min(), pi(), power(), radians(), round(), sign(), square(), sum(),
+ total()
+Examples
+#1 To get the largest value from the parameters:
+ ;SELECT max(2, 1, 3)
+
+
+#2 To get the largest value from an aggregate:
+ ;SELECT max(status) FROM http_status_codes
+
+
+
+min(X, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the argument with the minimum value, or return NULL if any
+ argument is NULL.
+Parameter
+ X The numbers to find the minimum of. If only one argument is
+ given, this function operates as an aggregate.
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), pi(), power(), radians(), round(), sign(), square(), sum(),
+ total()
+Examples
+#1 To get the smallest value from the parameters:
+ ;SELECT min(2, 1, 3)
+
+
+#2 To get the smallest value from an aggregate:
+ ;SELECT min(status) FROM http_status_codes
+
+
+
+nth_value(expr, N)
+══════════════════════════════════════════════════════════════════════
+ Returns the result of evaluating the expression against the nth row
+ in the window frame.
+Parameters
+ expr The expression to execute over the nth row
+ N The row number
+See Also
+ cume_dist(), dense_rank(), first_value(), lag(), last_value(), lead(),
+ ntile(), percent_rank(), rank(), row_number()
+
+ntile(groups)
+══════════════════════════════════════════════════════════════════════
+ Returns the number of the group that the current row is a part of
+Parameter
+ groups The number of groups
+See Also
+ cume_dist(), dense_rank(), first_value(), lag(), last_value(), lead(),
+ nth_value(), percent_rank(), rank(), row_number()
+
+nullif(X, Y)
+══════════════════════════════════════════════════════════════════════
+ Returns its first argument if the arguments are different and NULL
+ if the arguments are the same.
+Parameters
+ X The first argument to compare.
+ Y The argument to compare against the first.
+
+Examples
+#1 To test if 1 is different from 1:
+ ;SELECT nullif(1, 1)
+
+
+#2 To test if 1 is different from 2:
+ ;SELECT nullif(1, 2)
+
+
+
+padc(str, len)
+══════════════════════════════════════════════════════════════════════
+ Pad the given string with enough spaces to make it centered within
+ the given length
+Parameters
+ str The string to pad
+ len The minimum desired length of the output string
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padl(), padr(),
+ printf(), proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Examples
+#1 To pad the string 'abc' to a length of six characters:
+ ;SELECT padc('abc', 6) || 'def'
+
+
+#2 To pad the string 'abcdef' to a length of eight characters:
+ ;SELECT padc('abcdef', 8) || 'ghi'
+
+
+
+padl(str, len)
+══════════════════════════════════════════════════════════════════════
+ Pad the given string with leading spaces until it reaches the
+ desired length
+Parameters
+ str The string to pad
+ len The minimum desired length of the output string
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padr(),
+ printf(), proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Examples
+#1 To pad the string 'abc' to a length of six characters:
+ ;SELECT padl('abc', 6)
+
+
+#2 To pad the string 'abcdef' to a length of four characters:
+ ;SELECT padl('abcdef', 4)
+
+
+
+padr(str, len)
+══════════════════════════════════════════════════════════════════════
+ Pad the given string with trailing spaces until it reaches the
+ desired length
+Parameters
+ str The string to pad
+ len The minimum desired length of the output string
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ printf(), proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Examples
+#1 To pad the string 'abc' to a length of six characters:
+ ;SELECT padr('abc', 6) || 'def'
+
+
+#2 To pad the string 'abcdef' to a length of four characters:
+ ;SELECT padr('abcdef', 4) || 'ghi'
+
+
+
+percent_rank()
+══════════════════════════════════════════════════════════════════════
+ Returns (rank - 1) / (partition-rows - 1)
+See Also
+ cume_dist(), dense_rank(), first_value(), lag(), last_value(), lead(),
+ nth_value(), ntile(), rank(), row_number()
+
+pi()
+══════════════════════════════════════════════════════════════════════
+ Returns the value of PI
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), power(), radians(), round(), sign(), square(), sum(),
+ total()
+Example
+#1 To get the value of PI:
+ ;SELECT pi()
+
+
+
+power(base, exp)
+══════════════════════════════════════════════════════════════════════
+ Returns the base to the given exponent
+Parameters
+ base The base number
+ exp The exponent
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), pi(), radians(), round(), sign(), square(), sum(),
+ total()
+Example
+#1 To raise two to the power of three:
+ ;SELECT power(2, 3)
+
+
+
+printf(format, X)
+══════════════════════════════════════════════════════════════════════
+ Returns a string with this functions arguments substituted into the
+ given format. Substitution points are specified using percent (%)
+ options, much like the standard C printf() function.
+Parameters
+ format The format of the string to return.
+ X The argument to substitute at a given position in the
+ format.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), proper(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Examples
+#1 To substitute 'World' into the string 'Hello, %s!':
+ ;SELECT printf('Hello, %s!', 'World')
+
+
+#2 To right-align 'small' in the string 'align:' with a column width of 10:
+ ;SELECT printf('align: % 10s', 'small')
+
+
+#3 To format 11 with a width of five characters and leading zeroes:
+ ;SELECT printf('value: %05d', 11)
+
+
+
+proper(str)
+══════════════════════════════════════════════════════════════════════
+ Capitalize the first character of words in the given string
+Parameter
+ str The string to capitalize.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), regexp_capture(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Example
+#1 To capitalize the words in the string 'hello, world!':
+ ;SELECT proper('hello, world!')
+
+
+
+quote(X)
+══════════════════════════════════════════════════════════════════════
+ Returns the text of an SQL literal which is the value of its
+ argument suitable for inclusion into an SQL statement.
+Parameter
+ X The string to quote.
+
+Examples
+#1 To quote the string 'abc':
+ ;SELECT quote('abc')
+
+
+#2 To quote the string 'abc'123':
+ ;SELECT quote('abc''123')
+
+
+
+radians(degrees)
+══════════════════════════════════════════════════════════════════════
+ Converts degrees to radians
+Parameter
+ degrees The degrees value to convert to radians
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), pi(), power(), round(), sign(), square(), sum(), total()
+Example
+#1 To convert 180 degrees to radians:
+ ;SELECT radians(180)
+
+
+
+raise_error(msg)
+══════════════════════════════════════════════════════════════════════
+ Raises an error with the given message when executed
+Parameter
+ msg The error message
+
+
+random()
+══════════════════════════════════════════════════════════════════════
+ Returns a pseudo-random integer between -9223372036854775808 and +
+ 9223372036854775807.
+
+
+randomblob(N)
+══════════════════════════════════════════════════════════════════════
+ Return an N-byte blob containing pseudo-random bytes.
+Parameter
+ N The size of the blob in bytes.
+
+
+rank()
+══════════════════════════════════════════════════════════════════════
+ Returns the row_number() of the first peer in each group with gaps
+See Also
+ cume_dist(), dense_rank(), first_value(), lag(), last_value(), lead(),
+ nth_value(), ntile(), percent_rank(), row_number()
+
+readlink(path)
+══════════════════════════════════════════════════════════════════════
+ Read the target of a symbolic link.
+Parameter
+ path The path to the symbolic link.
+See Also
+ basename(), dirname(), joinpath(), realpath()
+
+realpath(path)
+══════════════════════════════════════════════════════════════════════
+ Returns the resolved version of the given path, expanding symbolic
+ links and resolving '.' and '..' references.
+Parameter
+ path The path to resolve.
+See Also
+ basename(), dirname(), joinpath(), readlink()
+
+regexp(re, str)
+══════════════════════════════════════════════════════════════════════
+ Test if a string matches a regular expression
+Parameters
+ re The regular expression to use
+ str The string to test against the regular expression
+
+
+regexp_capture(string, pattern)
+══════════════════════════════════════════════════════════════════════
+ A table-valued function that executes a regular-expression over a
+ string and returns the captured values. If the regex only matches a
+ subset of the input string, it will be rerun on the remaining parts
+ of the string until no more matches are found.
+Parameters
+ string The string to match against the given pattern.
+ pattern The regular expression to match.
+Results
+ match_index The match iteration. This value will increase each
+ time a new match is found in the input string.
+ capture_index The index of the capture in the regex.
+ capture_name The name of the capture in the regex.
+ capture_count The total number of captures in the regex.
+ range_start The start of the capture in the input string.
+ range_stop The stop of the capture in the input string.
+ content The captured value from the string.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
+ upper(), xpath()
+Example
+#1 To extract the key/value pairs 'a'/1 and 'b'/2 from the string 'a=1; b=2':
+ ;SELECT * FROM regexp_capture('a=1; b=2', '(\w+)=(\d+)')
+
+
+
+regexp_match(re, str)
+══════════════════════════════════════════════════════════════════════
+ Match a string against a regular expression and return the capture
+ groups as JSON.
+Parameters
+ re The regular expression to use
+ str The string to test against the regular expression
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_replace(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
+ substr(), trim(), unicode(), upper(), xpath()
+Examples
+#1 To capture the digits from the string '123':
+ ;SELECT regexp_match('(\d+)', '123')
+
+
+#2 To capture a number and word into a JSON object with the properties 'col_0' and 'col_1'
+ :
+ ;SELECT regexp_match('(\d+) (\w+)', '123 four')
+
+
+#3 To capture a number and word into a JSON object with the named properties 'num' and '
+ str':
+ ;SELECT regexp_match('(?<num>\d+) (?<str>\w+)', '123 four')
+
+
+
+regexp_replace(str, re, repl)
+══════════════════════════════════════════════════════════════════════
+ Replace the parts of a string that match a regular expression.
+Parameters
+ str The string to perform replacements on
+ re The regular expression to match
+ repl The replacement string. You can reference capture groups
+ with a backslash followed by the number of the group,
+ starting with 1.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_match(), replace(), replicate(), reverse(), rightstr(), rtrim(),
+ sparkline(), spooky_hash(), startswith(), strfilter(), substr(),
+ trim(), unicode(), upper(), xpath()
+Examples
+#1 To replace the word at the start of the string 'Hello, World!' with 'Goodbye':
+ ;SELECT regexp_replace('Hello, World!', '^(\w+)', 'Goodbye')
+
+
+#2 To wrap alphanumeric words with angle brackets:
+ ;SELECT regexp_replace('123 abc', '(\w+)', '<\1>')
+
+
+
+replace(str, old, replacement)
+══════════════════════════════════════════════════════════════════════
+ Returns a string formed by substituting the replacement string for
+ every occurrence of the old string in the given string.
+Parameters
+ str The string to perform substitutions on.
+ old The string to be replaced.
+ replacement The string to replace any occurrences of the old
+ string with.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replicate(), reverse(), rightstr(), rtrim(),
+ sparkline(), spooky_hash(), startswith(), strfilter(), substr(),
+ trim(), unicode(), upper(), xpath()
+Examples
+#1 To replace the string 'x' with 'z' in 'abc':
+ ;SELECT replace('abc', 'x', 'z')
+
+
+#2 To replace the string 'a' with 'z' in 'abc':
+ ;SELECT replace('abc', 'a', 'z')
+
+
+
+replicate(str, N)
+══════════════════════════════════════════════════════════════════════
+ Returns the given string concatenated N times.
+Parameters
+ str The string to replicate.
+ N The number of times to replicate the string.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), reverse(), rightstr(), rtrim(),
+ sparkline(), spooky_hash(), startswith(), strfilter(), substr(),
+ trim(), unicode(), upper(), xpath()
+Example
+#1 To repeat the string 'abc' three times:
+ ;SELECT replicate('abc', 3)
+
+
+
+reverse(str)
+══════════════════════════════════════════════════════════════════════
+ Returns the reverse of the given string.
+Parameter
+ str The string to reverse.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), rightstr(), rtrim(),
+ sparkline(), spooky_hash(), startswith(), strfilter(), substr(),
+ trim(), unicode(), upper(), xpath()
+Example
+#1 To reverse the string 'abc':
+ ;SELECT reverse('abc')
+
+
+
+rightstr(str, N)
+══════════════════════════════════════════════════════════════════════
+ Returns the N rightmost (UTF-8) characters in the given string.
+Parameters
+ str The string to return subset.
+ N The number of characters from the right side of the string to
+ return.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rtrim(),
+ sparkline(), spooky_hash(), startswith(), strfilter(), substr(),
+ trim(), unicode(), upper(), xpath()
+Examples
+#1 To get the last character of the string 'abc':
+ ;SELECT rightstr('abc', 1)
+
+
+#2 To get the last ten characters of a string, regardless of size:
+ ;SELECT rightstr('abc', 10)
+
+
+
+round(num, [digits])
+══════════════════════════════════════════════════════════════════════
+ Returns a floating-point value rounded to the given number of digits
+ to the right of the decimal point.
+Parameters
+ num The value to round.
+ digits The number of digits to the right of the decimal to round
+ to.
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), pi(), power(), radians(), sign(), square(), sum(),
+ total()
+Examples
+#1 To round the number 123.456 to an integer:
+ ;SELECT round(123.456)
+
+
+#2 To round the number 123.456 to a precision of 1:
+ ;SELECT round(123.456, 1)
+
+
+#3 To round the number 123.456 to a precision of 5:
+ ;SELECT round(123.456, 5)
+
+
+
+row_number()
+══════════════════════════════════════════════════════════════════════
+ Returns the number of the row within the current partition, starting
+ from 1.
+See Also
+ cume_dist(), dense_rank(), first_value(), lag(), last_value(), lead(),
+ nth_value(), ntile(), percent_rank(), rank()
+Example
+#1 To number messages from a process:
+ ;SELECT row_number() OVER (PARTITION BY ex_procname ORDER BY log_line) AS msg_num,
+ ex_procname, log_body FROM lnav_example_log
+
+
+
+rtrim(str, [chars])
+══════════════════════════════════════════════════════════════════════
+ Returns a string formed by removing any and all characters that
+ appear in the second argument from the right side of the first.
+Parameters
+ str The string to trim characters from the right side
+ chars The characters to trim. Defaults to spaces.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ sparkline(), spooky_hash(), startswith(), strfilter(), substr(),
+ trim(), unicode(), upper(), xpath()
+Examples
+#1 To trim the whitespace from the end of the string 'abc ':
+ ;SELECT rtrim('abc ')
+
+
+#2 To trim the characters 'b' and 'c' from the string 'abbbbcccc':
+ ;SELECT rtrim('abbbbcccc', 'bc')
+
+
+
+sign(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the sign of the given number as -1, 0, or 1
+Parameter
+ num The number
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), pi(), power(), radians(), round(), square(), sum(),
+ total()
+Examples
+#1 To get the sign of 10:
+ ;SELECT sign(10)
+
+
+#2 To get the sign of 0:
+ ;SELECT sign(0)
+
+
+#3 To get the sign of -10:
+ ;SELECT sign(-10)
+
+
+
+sparkline(value, [upper])
+══════════════════════════════════════════════════════════════════════
+ Function used to generate a sparkline bar chart. The non-aggregate
+ version converts a single numeric value on a range to a bar chart
+ character. The aggregate version returns a string with a bar
+ character for every numeric input
+Parameters
+ value The numeric value to convert
+ upper The upper bound of the numeric range. The non-aggregate
+ version defaults to 100. The aggregate version uses the
+ largest value in the inputs.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), spooky_hash(), startswith(), strfilter(), substr(), trim(),
+ unicode(), upper(), xpath()
+Examples
+#1 To get the unicode block element for the value 32 in the range of 0-128:
+ ;SELECT sparkline(32, 128)
+
+
+#2 To chart the values in a JSON array:
+ ;SELECT sparkline(value) FROM json_each('[0, 1, 2, 3, 4, 5, 6, 7, 8]')
+
+
+
+spooky_hash(str, ...)
+══════════════════════════════════════════════════════════════════════
+ Compute the hash value for the given arguments.
+Parameter
+ str The string to hash
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), startswith(), strfilter(), substr(), trim(),
+ unicode(), upper(), xpath()
+Examples
+#1 To produce a hash for the string 'Hello, World!':
+ ;SELECT spooky_hash('Hello, World!')
+
+
+#2 To produce a hash for the parameters where one is NULL:
+ ;SELECT spooky_hash('Hello, World!', NULL)
+
+
+#3 To produce a hash for the parameters where one is an empty string:
+ ;SELECT spooky_hash('Hello, World!', '')
+
+
+#4 To produce a hash for the parameters where one is a number:
+ ;SELECT spooky_hash('Hello, World!', 123)
+
+
+
+sqlite_compileoption_get(N)
+══════════════════════════════════════════════════════════════════════
+ Returns the N-th compile-time option used to build SQLite or NULL if
+ N is out of range.
+Parameter
+ N The option number to get
+
+
+sqlite_compileoption_used(option)
+══════════════════════════════════════════════════════════════════════
+ Returns true (1) or false (0) depending on whether or not that
+ compile-time option was used during the build.
+Parameter
+ option The name of the compile-time option.
+
+Example
+#1 To check if the SQLite library was compiled with ENABLE_FTS3:
+ ;SELECT sqlite_compileoption_used('ENABLE_FTS3')
+
+
+
+sqlite_source_id()
+══════════════════════════════════════════════════════════════════════
+ Returns a string that identifies the specific version of the source
+ code that was used to build the SQLite library.
+
+
+sqlite_version()
+══════════════════════════════════════════════════════════════════════
+ Returns the version string for the SQLite library that is running.
+
+
+square(num)
+══════════════════════════════════════════════════════════════════════
+ Returns the square of the argument
+Parameter
+ num The number to square
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), pi(), power(), radians(), round(), sign(), sum(),
+ total()
+Example
+#1 To get the square of two:
+ ;SELECT square(2)
+
+
+
+startswith(str, prefix)
+══════════════════════════════════════════════════════════════════════
+ Test if a string begins with the given prefix
+Parameters
+ str The string to test
+ prefix The prefix to check in the string
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), strfilter(), substr(), trim(),
+ unicode(), upper(), xpath()
+Examples
+#1 To test if the string 'foobar' starts with 'foo':
+ ;SELECT startswith('foobar', 'foo')
+
+
+#2 To test if the string 'foobar' starts with 'bar':
+ ;SELECT startswith('foobar', 'bar')
+
+
+
+strfilter(source, include)
+══════════════════════════════════════════════════════════════════════
+ Returns the source string with only the characters given in the
+ second parameter
+Parameters
+ source The string to filter
+ include The characters to include in the result
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), startswith(), substr(), trim(),
+ unicode(), upper(), xpath()
+Example
+#1 To get the 'b', 'c', and 'd' characters from the string 'abcabc':
+ ;SELECT strfilter('abcabc', 'bcd')
+
+
+
+strftime(format, timestring, modifier, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the date formatted according to the format string specified
+ as the first argument.
+Parameters
+ format A format string with substitutions similar to those
+ found in the strftime() standard C library.
+ timestring The string to convert to a date with time.
+ modifier A transformation that is applied to the value to the
+ left.
+See Also
+ date(), datetime(), julianday(), time(), timediff(), timeslice()
+Examples
+#1 To get the year from the timestamp '2017-01-02T03:04:05':
+ ;SELECT strftime('%Y', '2017-01-02T03:04:05')
+
+
+#2 To create a string with the time from the timestamp '2017-01-02T03:04:05' plus one
+ minute:
+ ;SELECT strftime('The time is: %H:%M:%S', '2017-01-02T03:04:05', '+1 minute')
+
+
+#3 To create a string with the Julian day from the epoch timestamp 1491341842:
+ ;SELECT strftime('Julian day: %J', 1491341842, 'unixepoch')
+
+
+
+substr(str, start, [size])
+══════════════════════════════════════════════════════════════════════
+ Returns a substring of input string X that begins with the Y-th
+ character and which is Z characters long.
+Parameters
+ str The string to extract a substring from.
+ start The index within 'str' that is the start of the substring.
+ Indexes begin at 1. A negative value means that the
+ substring is found by counting from the right rather than
+ the left.
+ size The size of the substring. If not given, then all
+ characters through the end of the string are returned. If
+ the value is negative, then the characters before the start
+ are returned.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(), trim(),
+ unicode(), upper(), xpath()
+Examples
+#1 To get the substring starting at the second character until the end of the string 'abc'
+ :
+ ;SELECT substr('abc', 2)
+
+
+#2 To get the substring of size one starting at the second character of the string 'abc':
+ ;SELECT substr('abc', 2, 1)
+
+
+#3 To get the substring starting at the last character until the end of the string 'abc':
+ ;SELECT substr('abc', -1)
+
+
+#4 To get the substring starting at the last character and going backwards one step of the
+ string 'abc':
+ ;SELECT substr('abc', -1, -1)
+
+
+
+sum(X)
+══════════════════════════════════════════════════════════════════════
+ Returns the sum of the values in the group as an integer.
+Parameter
+ X The values to add.
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), pi(), power(), radians(), round(), sign(), square(),
+ total()
+Example
+#1 To sum all of the values in the column 'ex_duration' from the table 'lnav_example_log':
+ ;SELECT sum(ex_duration) FROM lnav_example_log
+
+
+
+time(timestring, modifier, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the time in this format: HH:MM:SS.
+Parameters
+ timestring The string to convert to a time.
+ modifier A transformation that is applied to the value to the
+ left.
+See Also
+ date(), datetime(), julianday(), strftime(), timediff(), timeslice()
+Examples
+#1 To get the time portion of the timestamp '2017-01-02T03:04:05':
+ ;SELECT time('2017-01-02T03:04:05')
+
+
+#2 To get the time portion of the timestamp '2017-01-02T03:04:05' plus one minute:
+ ;SELECT time('2017-01-02T03:04:05', '+1 minute')
+
+
+#3 To get the time portion of the epoch timestamp 1491341842:
+ ;SELECT time(1491341842, 'unixepoch')
+
+
+
+timediff(time1, time2)
+══════════════════════════════════════════════════════════════════════
+ Compute the difference between two timestamps in seconds
+Parameters
+ time1 The first timestamp
+ time2 The timestamp to subtract from the first
+See Also
+ date(), datetime(), julianday(), strftime(), time(), timeslice()
+Examples
+#1 To get the difference between two timestamps:
+ ;SELECT timediff('2017-02-03T04:05:06', '2017-02-03T04:05:00')
+
+
+#2 To get the difference between relative timestamps:
+ ;SELECT timediff('today', 'yesterday')
+
+
+
+timeslice(time, slice)
+══════════════════════════════════════════════════════════════════════
+ Return the start of the slice of time that the given timestamp falls
+ in. If the time falls outside of the slice, NULL is returned.
+Parameters
+ time The timestamp to get the time slice for.
+ slice The size of the time slices
+See Also
+ date(), datetime(), julianday(), strftime(), time(), timediff()
+Examples
+#1 To get the timestamp rounded down to the start of the ten minute slice:
+ ;SELECT timeslice('2017-01-01T05:05:00', '10m')
+
+
+#2 To group log messages into five minute buckets and count them:
+ ;SELECT timeslice(log_time_msecs, '5m') AS slice, count(1)
+ FROM lnav_example_log GROUP BY slice
+
+
+#3 To group log messages by those before 4:30am and after:
+ ;SELECT timeslice(log_time_msecs, 'before 4:30am') AS slice, count(1) FROM
+ lnav_example_log GROUP BY slice
+
+
+
+total(X)
+══════════════════════════════════════════════════════════════════════
+ Returns the sum of the values in the group as a floating-point.
+Parameter
+ X The values to add.
+See Also
+ abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
+ atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
+ max(), min(), pi(), power(), radians(), round(), sign(), square(),
+ sum()
+Example
+#1 To total all of the values in the column 'ex_duration' from the table 'lnav_example_log
+ ':
+ ;SELECT total(ex_duration) FROM lnav_example_log
+
+
+
+total_changes()
+══════════════════════════════════════════════════════════════════════
+ Returns the number of row changes caused by INSERT, UPDATE or DELETE
+ statements since the current database connection was opened.
+
+
+trim(str, [chars])
+══════════════════════════════════════════════════════════════════════
+ Returns a string formed by removing any and all characters that
+ appear in the second argument from the left and right sides of the
+ first.
+Parameters
+ str The string to trim characters from the left and right sides.
+
+ chars The characters to trim. Defaults to spaces.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
+ substr(), unicode(), upper(), xpath()
+Examples
+#1 To trim whitespace from the start and end of the string ' abc ':
+ ;SELECT trim(' abc ')
+
+
+#2 To trim the characters '-' and '+' from the string '-+abc+-':
+ ;SELECT trim('-+abc+-', '-+')
+
+
+
+typeof(X)
+══════════════════════════════════════════════════════════════════════
+ Returns a string that indicates the datatype of the expression X: "
+ null", "integer", "real", "text", or "blob".
+Parameter
+ X The expression to check.
+
+Examples
+#1 To get the type of the number 1:
+ ;SELECT typeof(1)
+
+
+#2 To get the type of the string 'abc':
+ ;SELECT typeof('abc')
+
+
+
+unicode(X)
+══════════════════════════════════════════════════════════════════════
+ Returns the numeric unicode code point corresponding to the first
+ character of the string X.
+Parameter
+ X The string to examine.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
+ substr(), trim(), upper(), xpath()
+Example
+#1 To get the unicode code point for the first character of 'abc':
+ ;SELECT unicode('abc')
+
+
+
+unlikely(value)
+══════════════════════════════════════════════════════════════════════
+ Short-hand for likelihood(X, 0.0625)
+Parameter
+ value The boolean value to return
+
+
+upper(str)
+══════════════════════════════════════════════════════════════════════
+ Returns a copy of the given string with all ASCII characters
+ converted to upper case.
+Parameter
+ str The string to convert.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
+ substr(), trim(), unicode(), xpath()
+Example
+#1 To uppercase the string 'aBc':
+ ;SELECT upper('aBc')
+
+
+
+xpath(xpath, xmldoc)
+══════════════════════════════════════════════════════════════════════
+ A table-valued function that executes an xpath expression over an
+ XML string and returns the selected values.
+Parameters
+ xpath The XPATH expression to evaluate over the XML document.
+ xmldoc The XML document as a string.
+Results
+ result The result of the XPATH expression.
+ node_path The absolute path to the node containing the result.
+ node_attr The node's attributes stored in JSON object.
+ node_text The node's text value.
+See Also
+ char(), charindex(), endswith(), extract(), group_concat(),
+ group_spooky_hash(), gunzip(), gzip(), humanize_file_size(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
+ substr(), trim(), unicode(), upper()
+Examples
+#1 To select the XML nodes on the path '/abc/def':
+ ;SELECT * FROM xpath('/abc/def', '<abc><def a="b">Hello</def><def>Bye</def></abc>')
+
+
+#2 To select all 'a' attributes on the path '/abc/def':
+ ;SELECT * FROM xpath('/abc/def/@a', '<abc><def a="b">Hello</def><def>Bye</def></abc>')
+
+
+#3 To select the text nodes on the path '/abc/def':
+ ;SELECT * FROM xpath('/abc/def/text()', '<abc><def a="b">Hello &#x2605;</def></abc>')
+
+
+
+zeroblob(N)
+══════════════════════════════════════════════════════════════════════
+ Returns a BLOB consisting of N bytes of 0x00.
+Parameter
+ N The size of the BLOB.
+
+
+ATTACH DATABASE filename AS schema-name
+══════════════════════════════════════════════════════════════════════
+ Attach a database file to the current connection.
+Parameters
+ filename The path to the database file.
+ schema-name The prefix for tables in this database.
+
+Example
+#1 To attach the database file '/tmp/customers.db' with the name customers:
+ ;ATTACH DATABASE '/tmp/customers.db' AS customers
+
+
+
+CASE [base-expr] WHEN cmp-expr1 THEN then-expr1 [... WHEN cmp-exprN THEN then-exprN] [ELSE else-expr] END
+══════════════════════════════════════════════════════════════════════
+ Evaluate a series of expressions in order until one evaluates to
+ true and then return it's result. Similar to an IF-THEN-ELSE
+ construct in other languages.
+Parameters
+ base-expr The base expression that is used for comparison in the
+ branches
+ cmp-expr The expression to test if this branch should be taken
+ else-expr The result of this CASE if no branches matched.
+
+Example
+#1 To evaluate the number one and return the string 'one':
+ ;SELECT CASE 1 WHEN 0 THEN 'zero' WHEN 1 THEN 'one' END
+
+
+
+CREATE [TEMP] VIEW [IF NOT EXISTS] [schema-name.] view-name AS select-stmt
+══════════════════════════════════════════════════════════════════════
+ Assign a name to a SELECT statement
+Parameters
+ IF NOT EXISTS Do not create the view if it already exists
+ schema-name. The database to create the view in
+ view-name The name of the view
+ select-stmt The SELECT statement the view represents
+
+
+DELETE FROM table-name [WHERE cond]
+══════════════════════════════════════════════════════════════════════
+ Delete rows from a table
+Parameters
+ table-name The name of the table
+ cond The conditions used to delete the rows.
+
+
+DETACH DATABASE schema-name
+══════════════════════════════════════════════════════════════════════
+ Detach a database from the current connection.
+Parameter
+ schema-name The prefix for tables in this database.
+
+Example
+#1 To detach the database named 'customers':
+ ;DETACH DATABASE customers
+
+
+
+DROP VIEW [IF EXISTS] [schema-name.] view-name
+══════════════════════════════════════════════════════════════════════
+ Drop a view
+Parameters
+
+
+INSERT INTO [schema-name.] table-name [( column-name1 [, ... column-nameN] )] VALUES ( expr1 [, ... exprN] )
+══════════════════════════════════════════════════════════════════════
+ Insert rows into a table
+Parameters
+
+Example
+#1 To insert the pair containing 'MSG' and 'HELLO, WORLD!' into the 'environ'
+ table:
+ ;INSERT INTO environ VALUES ('MSG', 'HELLO, WORLD!')
+
+
+
+OVER window-name
+══════════════════════════════════════════════════════════════════════
+ Executes the preceding function over a window
+Parameter
+ window-name The name of the window definition
+
+
+SELECT result-column1 [, ... result-columnN] [FROM table1 [, ... tableN]] [WHERE cond] [GROUP BY grouping-expr1 [, ... grouping-exprN]] [ORDER BY ordering-term1 [, ... ordering-termN]] [LIMIT limit-expr1 [, ... limit-exprN]]
+══════════════════════════════════════════════════════════════════════
+ Query the database and return zero or more rows of data.
+Parameters
+ result-column The expression used to generate a result for this
+ column.
+ table The table(s) to query for data
+ cond The conditions used to select the rows to return.
+ grouping-expr The expression to use when grouping rows.
+ ordering-term The values to use when ordering the result set.
+ limit-expr The maximum number of rows to return.
+
+Example
+#1 To select all of the columns from the table 'syslog_log':
+ ;SELECT * FROM syslog_log
+
+
+
+UPDATE table SET column-name1 = expr1 [, ... column-nameN = exprN] [WHERE cond]
+══════════════════════════════════════════════════════════════════════
+ Modify a subset of values in zero or more rows of the given table
+Parameters
+ table The table to update
+ column-name The columns in the table to update.
+ cond The condition used to determine whether a row should
+ be updated.
+
+Example
+#1 To mark the syslog message at line 40:
+ ;UPDATE syslog_log SET log_mark = 1 WHERE log_line = 40
+
+
+
+WITH [RECURSIVE] cte-table-name AS select-stmt
+══════════════════════════════════════════════════════════════════════
+ Create a temporary view that exists only for the duration of a SQL
+ statement.
+Parameters
+ cte-table-name The name for the temporary table.
+ select-stmt The SELECT statement used to populate the temporary
+ table.
+