You need to have SQLITE_ENABLE_DBPAGE_VTAB defined when compiling sqlite3.c ... otherwise the btreeinfo extension will not work.
I append btreeinfo.c (and a whole pile of other .c files) to the end of sqlite3.c and also append the following at the very end: #ifdef USE_NUNICODE extern void* sqlite3_nunicode_init(void*); #endif int core_init(const char* dummy) { int nErr = 0; nErr += sqlite3_auto_extension((void*)sqlite3_autobusy_init); nErr += sqlite3_auto_extension((void*)sqlite3_ipaddress_init); nErr += sqlite3_auto_extension((void*)sqlite3_sqlfcmp_init); nErr += sqlite3_auto_extension((void*)sqlite3_sqlfunc_init); nErr += sqlite3_auto_extension((void*)sqlite3_sqlfwin_init); nErr += sqlite3_auto_extension((void*)sqlite3_sqlhash_init); nErr += sqlite3_auto_extension((void*)sqlite3_sqlitemprint_init); nErr += sqlite3_auto_extension((void*)sqlite3_sqlmath_init); nErr += sqlite3_auto_extension((void*)sqlite3_sqltime_init); #ifdef USE_NUNICODE nErr += sqlite3_auto_extension((void*)sqlite3_nunicode_init); #else nErr += sqlite3_auto_extension((void*)sqlite3_unifuzz_init); #endif nErr += sqlite3_auto_extension((void*)sqlite3_eval_init); nErr += sqlite3_auto_extension((void*)sqlite3_fileio_init); nErr += sqlite3_auto_extension((void*)sqlite3_ieee_init); nErr += sqlite3_auto_extension((void*)sqlite3_nextchar_init); nErr += sqlite3_auto_extension((void*)sqlite3_percentile_init); nErr += sqlite3_auto_extension((void*)sqlite3_regexp_init); nErr += sqlite3_auto_extension((void*)sqlite3_rot_init); // nErr += sqlite3_auto_extension((void*)sqlite3_sha_init); nErr += sqlite3_auto_extension((void*)sqlite3_totype_init); nErr += sqlite3_auto_extension((void*)sqlite3_zorder_init); #ifndef SQLITE_OMIT_VIRTUALTABLE nErr += sqlite3_auto_extension((void*)sqlite3_amatch_init); nErr += sqlite3_auto_extension((void*)sqlite3_btreeinfo_init); nErr += sqlite3_auto_extension((void*)sqlite3_carray_init); nErr += sqlite3_auto_extension((void*)sqlite3_closure_init); nErr += sqlite3_auto_extension((void*)sqlite3_csv_init); nErr += sqlite3_auto_extension((void*)sqlite3_fuzzer_init); nErr += sqlite3_auto_extension((void*)sqlite3_memstat_init); nErr += sqlite3_auto_extension((void*)sqlite3_series_init); nErr += sqlite3_auto_extension((void*)sqlite3_spellfix_init); nErr += sqlite3_auto_extension((void*)sqlite3_unionvtab_init); nErr += sqlite3_auto_extension((void*)sqlite3_vtshim_init); nErr += sqlite3_auto_extension((void*)sqlite3_wholenumber_init); #ifdef SQLITE_ENABLE_VFSSTAT nErr += sqlite3_vfsstat_init((void*)dummy, (void*)0, (void*)0); #endif #ifndef _MSC_VER nErr += sqlite3_auto_extension((void*)sqlite3_interpolate_init); #endif #endif #ifndef _MSC_VER nErr += sqlite3_auto_extension((void*)sqlite3_compress_init); #endif return nErr ? SQLITE_ERROR : SQLITE_OK; } then compile sqlite3.c with -DSQLITE_ENABLE_DBPAGE_VTAB (and a crapload of other defines, which I put in config.h and get them read by defining -D_HAVE_SQLITE_CONFIG_H) -DSQLITE_EXTRA_INIT=core_init The latter one (EXTRA_INIT) gives the name of a function that is called after the normal initialization is complete. It adds a bunch of auto_extensions that get added to every connection. --- The fact that there's a Highway to Hell but only a Stairway to Heaven says a lot about anticipated traffic volume. >-----Original Message----- >From: sqlite-users [mailto:sqlite-users- >boun...@mailinglists.sqlite.org] On Behalf Of Wout Mertens >Sent: Thursday, 13 December, 2018 04:04 >To: SQLite mailing list >Subject: Re: [sqlite] sqlite_btreeinfo > >And how do you compile sqlite so it has the extension? The error I >posted >was actually with a loaded db, so that's not it. > >I must be compiling or loading the extension wrong somehow. Also, I >saw >that it requires sqlite_db[vtab? not sure] and that table is also >missing > >Wout. > > >On Thu, Dec 13, 2018 at 12:43 AM Keith Medcalf <kmedc...@dessus.com> >wrote: > >> >> I have the extension compiled in. When a database does not exist I >get: >> >> SQLite version 3.27.0 2018-12-10 01:48:29 >> Enter ".help" for usage hints. >> Connected to a transient in-memory database. >> Use ".open FILENAME" to reopen on a persistent database. >> sqlite> select * from sqlite_btreeinfo; >> Error: not an error >> >> >> However, when a database is loaded is works fine: >> >> sqlite> .open tz.db >> sqlite> select * from sqlite_btreeinfo; >> table|sqlite_master|sqlite_master|1||1|23|1|1| >> table|sqlite_stat1|sqlite_stat1|2|CREATE TABLE >> sqlite_stat1(tbl,idx,stat)|1|16|1|1| >> table|sqlite_stat4|sqlite_stat4|3|CREATE TABLE >> sqlite_stat4(tbl,idx,neq,nlt,ndlt,sample)|1|1|1|1| >> table|tz_geopoly_rowid|tz_geopoly_rowid|4|CREATE TABLE >> "tz_geopoly_rowid"(rowid INTEGER PRIMARY >KEY,nodeno,a0,a1)|1|2028|507|2| >> table|tz_geopoly_node|tz_geopoly_node|5|CREATE TABLE >> "tz_geopoly_node"(nodeno INTEGER PRIMARY KEY,data)|1|44|11|2| >> table|tz_geopoly_parent|tz_geopoly_parent|6|CREATE TABLE >> "tz_geopoly_parent"(nodeno INTEGER PRIMARY >KEY,parentnode)|1|33|1|1| >> table|TZ_Version|TZ_Version|7|CREATE TABLE TZ_Version >> ( >> Version text collate nocase, >> PIPVersion text collate nocase >> )|1|2|1|1| >> table|TZ_Countries|TZ_Countries|8|CREATE TABLE TZ_Countries >> ( >> Code text not null collate nocase primary key, >> Country text not null collate nocase unique >> ) WITHOUT ROWID|0|34|2|2| >> index|sqlite_autoindex_TZ_Countries_2|TZ_Countries|9||0|32|2|2| >> table|TZ_Zones|TZ_Zones|10|CREATE TABLE TZ_Zones >> ( >> ID INTEGER PRIMARY KEY, >> Country_Code text collate nocase references >TZ_Countries(Code), >> Area text collate nocase, >> Location text collate nocase, >> City text collate nocase, >> Zone text not null collate nocase unique >> )|1|658|7|2| >> index|sqlite_autoindex_TZ_Zones_1|TZ_Zones|11||0|720|4|2| >> table|TZ_ZoneData|TZ_ZoneData|12|CREATE TABLE TZ_ZoneData >> ( >> Zone_ID integer not null references TZ_Zones(ID), >> Abbreviation text collate nocase not null, >> StartTime integer not null, >> Offset integer not null, >> isDST integer not null >> )|1|35088|204|2| >> index|TZ_Country|TZ_Countries|13|CREATE INDEX TZ_Country on >TZ_Countries >> (Country, Code)|0|32|2|2| >> index|TZ_ZonesCountry|TZ_Zones|14|CREATE INDEX TZ_ZonesCountry on >> TZ_Zones (Country_Code)|0|210|2|2| >> index|TZ_ZonesArea|TZ_Zones|15|CREATE INDEX TZ_ZonesArea on >TZ_Zones >> (Area)|0|508|2|2| >> index|TZ_ZonesLocation|TZ_Zones|16|CREATE INDEX TZ_ZonesLocation on >> TZ_Zones (Location)|0|774|3|2| >> index|TZ_ZonesCity|TZ_Zones|17|CREATE INDEX TZ_ZonesCity on >TZ_Zones >> (City)|0|438|2|2| >> index|TZ_ZoneDataID|TZ_ZoneData|18|CREATE INDEX TZ_ZoneDataID on >> TZ_ZoneData (Zone_ID)|0|36401|89|2| >> index|TZ_ZoneStart|TZ_ZoneData|19|CREATE INDEX TZ_ZoneStart on >> TZ_ZoneData (Zone_ID, StartTime, Offset, >Abbreviation)|0|14616|84|3| >> index|TZ_ZoneOffset|TZ_ZoneData|20|CREATE INDEX TZ_ZoneOffset on >> TZ_ZoneData (Zone_ID, StartTime + Offset, Offset)|0|35903|161|2| >> sqlite> >> >> >> --- >> The fact that there's a Highway to Hell but only a Stairway to >Heaven says >> a lot about anticipated traffic volume. >> >> >-----Original Message----- >> >From: sqlite-users [mailto:sqlite-users- >> >boun...@mailinglists.sqlite.org] On Behalf Of Wout Mertens >> >Sent: Wednesday, 12 December, 2018 13:41 >> >To: SQLite mailing list >> >Subject: [sqlite] sqlite_btreeinfo >> > >> >I can't figure out how to get access to the sqlite_btreeinfo >vtable >> >that >> >was added in 3.22 :-( The only documentation is the C file and >there >> >doesn't seem to be a compile flag for it. >> > >> >I went and downloaded the file from >> >https://sqlite.org/src/artifact/4f0ebf278f46e68e, then compiled it >on >> >on >> >macOS with >> > >> >$ gcc -g -fPIC -dynamiclib btreeinfo.c -o btreeinfo.dylib >> >btreeinfo.c:414:5: warning: excess elements in struct initializer >> > 0 /* xShadowName */ >> > ^ >> >1 warning generated. >> > >> >and tried loading it but: >> > >> >sqlite> .load btreeinfo.dylib >> >sqlite> select * from sqlite_btreeinfo; >> >Error: no such table: sqlite_btreeinfo >> > >> >:-( >> > >> >Wout. >> >_______________________________________________ >> >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 >> >_______________________________________________ >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