Ok. I am a fossil newbie. My effort to build from that did not work. The amalgamation from configure+make seemed incomplete and other files like json1.c were missing. I am on trunk and fossil timeline showed Dr Hipp's fix. I'll educate myself a bit more on Fossil to see where I went wrong.
However, I downloaded the latest snapshot ( https://www3.sqlite.org/cgi/src/doc/trunk/README.md) and built from that and.. *SUCCESS!* As a note, my code is based on this article. https://blog.budgetwithbuckets.com/2018/08/27/sqlite-changelog.html . Many thanks to that author for the idea and sample code. A big thank you to Dr Hipp for the prompt fix. /Lindsay Code output from shell built from latest trunk snapshot tarball: SQLite version 3.26.0 2018-11-02 17:38:39 Enter ".help" for usage hints. Connected to a transient in-memory database. Use ".open FILENAME" to reopen on a persistent database. sqlite> .version SQLite 3.26.0 2018-11-02 17:38:39 1fa74930ab56171e2e840d4a5b259abafb0ad1e0320fc3030066570a6dd10002 gcc-4.9.2 sqlite> attach "napp.db" as napp; sqlite> DROP TABLE napp.people; sqlite> DROP TABLE napp.change_log; sqlite> sqlite> -- Data table sqlite> CREATE TABLE napp.people ( ...> id INTEGER PRIMARY KEY, ...> created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, ...> name TEXT, ...> age INTEGER ...> ); sqlite> sqlite> -- Change log table sqlite> CREATE TABLE napp.change_log ( ...> id INTEGER PRIMARY KEY, ...> created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, ...> action TEXT, ...> table_name TEXT, ...> obj_id INTEGER, ...> changes TEXT ...> ); sqlite> sqlite> -- Insert Trigger sqlite> CREATE TRIGGER napp.people_track_insert ...> AFTER INSERT ON people ...> BEGIN ...> INSERT INTO change_log (action, table_name, obj_id, changes) ...> SELECT ...> 'INSERT', 'people', NEW.id, changes ...> FROM ...> (SELECT ...> json_group_object(col, json_array(oldval, newval)) AS changes ...> FROM ...> (SELECT ...> json_extract(value, '$[0]') as col, ...> json_extract(value, '$[1]') as oldval, ...> json_extract(value, '$[2]') as newval ...> FROM ...> json_each( ...> json_array( ...> json_array('id', null, NEW.id), ...> json_array('created', null, NEW.created), ...> json_array('name', null, NEW.name), ...> json_array('age', null, NEW.age) ...> ) ...> ) ...> WHERE oldval IS NOT newval ...> ) ...> ); ...> END; sqlite> sqlite> -- Update Trigger sqlite> CREATE TRIGGER napp.people_track_update ...> AFTER UPDATE ON people ...> BEGIN ...> INSERT INTO change_log (action, table_name, obj_id, changes) ...> SELECT ...> 'UPDATE', 'people', OLD.id, changes ...> FROM ...> (SELECT ...> json_group_object(col, json_array(oldval, newval)) AS changes ...> FROM ...> (SELECT ...> json_extract(value, '$[0]') as col, ...> json_extract(value, '$[1]') as oldval, ...> json_extract(value, '$[2]') as newval ...> FROM ...> json_each( ...> json_array( ...> json_array('id', OLD.id, NEW.id), ...> json_array('created', OLD.created, NEW.created), ...> json_array('name', OLD.name, NEW.name), ...> json_array('age', OLD.age, NEW.age) ...> ) ...> ) ...> WHERE oldval IS NOT newval ...> ) ...> ); ...> END; sqlite> sqlite> -- Delete Trigger sqlite> CREATE TRIGGER napp.people_track_delete ...> AFTER DELETE ON people ...> BEGIN ...> INSERT INTO change_log (action, table_name, obj_id, changes) ...> SELECT ...> 'DELETE', 'people', OLD.id, changes ...> FROM ...> (SELECT ...> json_group_object(col, json_array(oldval, newval)) AS changes ...> FROM ...> (SELECT ...> json_extract(value, '$[0]') as col, ...> json_extract(value, '$[1]') as oldval, ...> json_extract(value, '$[2]') as newval ...> FROM ...> json_each( ...> json_array( ...> json_array('id', OLD.id, null), ...> json_array('created', OLD.created, null), ...> json_array('name', OLD.name, null), ...> json_array('age', OLD.age, null) ...> ) ...> ) ...> WHERE oldval IS NOT newval ...> ) ...> ); ...> END; sqlite> INSERT INTO people (name, age) VALUES ('Alice', 30), ('Bob', 42); sqlite> UPDATE people SET age = age + 2; sqlite> UPDATE people SET name = 'Eva' WHERE name='Alice'; sqlite> DELETE FROM people WHERE name = 'Bob'; sqlite> SELECT * FROM change_log; 1|2018-11-03 00:56:22|INSERT|people|1|{"id":[null,1],"created":[null,"2018-11-03 00:56:22"],"name":[null,"Alice"],"age":[null,30]} 2|2018-11-03 00:56:22|INSERT|people|2|{"id":[null,2],"created":[null,"2018-11-03 00:56:22"],"name":[null,"Bob"],"age":[null,42]} 3|2018-11-03 00:56:22|UPDATE|people|1|{"age":[30,32]} 4|2018-11-03 00:56:22|UPDATE|people|2|{"age":[42,44]} 5|2018-11-03 00:56:22|UPDATE|people|1|{"name":["Alice","Eva"]} 6|2018-11-03 00:56:22|DELETE|people|2|{"id":[2,null],"created":["2018-11-03 00:56:22",null],"name":["Bob",null],"age":[44,null]} sqlite> On Fri, Nov 2, 2018 at 5:11 PM Lindsay Lawrence <thinknl...@gmail.com> wrote: > Hi, > > Sorry. I have had no luck with this. > > I followed the instructions here > https://www.sqlite.org/getthecode.html#clone > then built from source following the directions in README.md. > > mkdir bld ;# Build will occur in a sibling directory > cd bld ;# Change to the build directory > ../sqlite/configure ;# Run the configure script > make ;# Run the makefile. > make sqlite3.c ;# Build the "amalgamation" source file > make test ;# Run some tests (requires Tcl) > > This is the platform I am building on 'uname -a': > > Linux debianE7440-LT 3.16.0-6-amd64 #1 SMP Debian 3.16.57-2 (2018-07-14) > x86_64 GNU/Linux > > The current trunk source however does not have the JSON1 extension > embedded in the amalgamation by default. How would I add that? > However, building the json1 extension against this source and then loading > it from the shell reports this: > > SQLite version 3.8.10.1 2015-05-13 04:50:30 > Enter ".help" for usage hints. > Connected to a transient in-memory database. > Use ".open FILENAME" to reopen on a persistent database. > sqlite> .version > SQLite 3.8.10.1 2015-05-13 04:50:30 > 59e3e9e764440b7feaafadff74f422535d21bca2 > sqlite> .load "../../../bin/json1" > Error: ../../../bin/json1.so: undefined symbol: > sqlite3_create_window_function > sqlite> > > I'll tinker with it a more but at this point I am not sure if it is > because an own build configuration issue trying to test your fix or if the > fix itself is the issue. > > Regards, > /Lindsay > > > On Fri, Nov 2, 2018 at 10:38 AM Richard Hipp <d...@sqlite.org> wrote: > >> Please try your test script on the latest trunk check-in and let us >> know whether or not it is working for you. >> >> -- >> D. Richard Hipp >> d...@sqlite.org >> _______________________________________________ >> sqlite-users mailing list >> sqlite-users@mailinglists.sqlite.org >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users >> > _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users