Understanding admin.sqlite

The Mind Map for Jam.py V7 admin.sqlite database describes the Jam.py database engine schema. The intention was to quickly find the information needed, as well as the code.

admin.sqlite

admin.sqlite

Imagemap
admin.sqliteSYS_TASKSID (INTEGER)DELETED (INTEGER)TASK_ID (INTEGER)F_MANUAL_UPDATE (INTEGER)F_DB_TYPE (INTEGER)F_DB_NAME (TEXT)F_ALIAS (TEXT)F_LOGIN (TEXT)F_PASSWORD (TEXT)F_ENCODING (TEXT)F_HOST (TEXT)F_PORT (TEXT)F_NAME (TEXT)F_ITEM_NAME (TEXT)F_LANGUAGE (INTEGER)F_SERVER (TEXT)F_CUSTOM_CONNECTION (INTEGER)F_PYTHON_LIBRARY (INTEGER)F_DSN (TEXT)SYS_USERSID (INTEGER)DELETED (INTEGER)F_ACTIVE (INTEGER)F_ACT_DATE (TEXT)F_NAME (TEXT)F_LOGIN (TEXT)F_PASSWORD (TEXT)F_ROLE (INTEGER)F_INFO (TEXT)F_ADMIN (INTEGER)F_PSW_HASH (TEXT)F_IP (TEXT)F_UUID (TEXT)SYS_ROLESID (INTEGER)DELETED (INTEGER)F_NAME (TEXT)SYS_FIELDSID (INTEGER)DELETED (INTEGER)OWNER_ID (INTEGER)OWNER_REC_ID (INTEGER)TASK_ID (INTEGER)F_NAME (TEXT)F_FIELD_NAME (TEXT)F_DATA_TYPE (INTEGER)F_SIZE (INTEGER)F_OBJECT (INTEGER)F_OBJECT_FIELD (INTEGER)F_EDIT_FIELD (INTEGER)F_MASTER_FIELD (INTEGER)F_REQUIRED (INTEGER)F_CALCULATED (INTEGER)F_DEFAULT (INTEGER)F_READ_ONLY (INTEGER)F_ALIGNMENT (INTEGER)F_ENABLE_TYPEHEAD (INTEGER)F_LOOKUP_VALUES (INTEGER)F_LOOKUP_VALUES_TEXT (BLOB)F_DEFAULT_VALUE (TEXT)F_HELP (BLOB)F_PLACEHOLDER (TEXT)F_OBJECT_FIELD1 (INTEGER)F_OBJECT_FIELD2 (INTEGER)F_MULTI_SELECT (INTEGER)F_MULTI_SELECT_ALL (INTEGER)F_DB_FIELD_NAME (TEXT)F_MASK (TEXT)F_DEFAULT_LOOKUP_VALUE (INTEGER)F_IMAGE_EDIT_WIDTH (INTEGER)F_IMAGE_EDIT_HEIGHT (INTEGER)F_IMAGE_VIEW_WIDTH (INTEGER)F_IMAGE_VIEW_HEIGHT (INTEGER)F_IMAGE_PLACEHOLDER (TEXT)F_FILE_DOWNLOAD_BTN (INTEGER)F_FILE_OPEN_BTN (INTEGER)F_FILE_ACCEPT (TEXT)F_IMAGE_CAMERA (INTEGER)F_CALC_ITEM (INTEGER)F_CALC_FIELD (INTEGER)F_CALC_OP (INTEGER)F_NOT_NULL (INTEGER)F_TEXTAREA (INTEGER)F_DO_NOT_SANITIZE (INTEGER)F_CHECK_BEFORE_DELETING (INTEGER)F_COPY_OF (INTEGER)F_CALC_LOOKUP_FIELD (INTEGER)SYS_REPORT_PARAMSID (INTEGER)DELETED (INTEGER)OWNER_ID (INTEGER)OWNER_REC_ID (INTEGER)TASK_ID (INTEGER)F_INDEX (INTEGER)F_NAME (TEXT)F_PARAM_NAME (TEXT)F_DATA_TYPE (INTEGER)F_SIZE (INTEGER)F_OBJECT (INTEGER)F_OBJECT_FIELD (INTEGER)F_REQUIRED (INTEGER)F_VISIBLE (INTEGER)F_ALIGNMENT (INTEGER)F_ENABLE_TYPEHEAD (INTEGER)F_LOOKUP_VALUES (INTEGER)F_MASTER_FIELD (INTEGER)F_HELP (BLOB)F_PLACEHOLDER (TEXT)F_OBJECT_FIELD1 (INTEGER)F_OBJECT_FIELD2 (INTEGER)F_MULTI_SELECT (INTEGER)F_MULTI_SELECT_ALL (INTEGER)F_CALC_ITEM (INTEGER)F_CALC_FIELD (INTEGER)F_CALC_OP (INTEGER)F_READ_ONLY (INTEGER)F_NOT_NULL (INTEGER)F_CHECK_BEFORE_DELETING (INTEGER)SYS_INDICESID (INTEGER)DELETED (INTEGER)OWNER_ID (INTEGER)OWNER_REC_ID (INTEGER)TASK_ID (INTEGER)F_INDEX_NAME (TEXT)DESCENDING (INTEGER)F_FIELDS (BLOB)F_FOREIGN_INDEX (INTEGER)F_FOREIGN_FIELD (INTEGER)F_UNIQUE_INDEX (INTEGER)F_FIELDS_LIST (TEXT)SYS_FILTERSID (INTEGER)DELETED (INTEGER)OWNER_ID (INTEGER)OWNER_REC_ID (INTEGER)TASK_ID (INTEGER)F_INDEX (INTEGER)F_FIELD (INTEGER)F_NAME (TEXT)F_FILTER_NAME (TEXT)F_DATA_TYPE (INTEGER)F_TYPE (INTEGER)F_VISIBLE (INTEGER)F_HELP (BLOB)F_PLACEHOLDER (TEXT)F_MULTI_SELECT_ALL (INTEGER)SYS_PRIVILEGESID (INTEGER)DELETED (INTEGER)OWNER_ID (INTEGER)OWNER_REC_ID (INTEGER)TASK_ID (INTEGER)ITEM_ID (INTEGER)F_CAN_VIEW (INTEGER)F_CAN_CREATE (INTEGER)F_CAN_EDIT (INTEGER)F_CAN_DELETE (INTEGER)ITEM_TYP (INTEGER)OWNER_ITEM (TEXT)SYS_ITEMSID (INTEGER)DELETED (INTEGER)PARENT (INTEGER)TASK_ID (INTEGER)TYPE_ID (INTEGER)TABLE_ID (INTEGER)HAS_CHILDREN (INTEGER)F_NAME (TEXT)F_ITEM_NAME (TEXT)F_TABLE_NAME (TEXT)F_VIEW_TEMPLATE (TEXT)F_EDIT_TEMPLATE (TEXT)F_FILTER_TEMPLATE (TEXT)F_VISIBLE (INTEGER)F_CLIENT_MODULE (BLOB)F_SERVER_MODULE (BLOB)F_INFO (BLOB)F_WEB_CLIENT_MODULE (BLOB)F_SOFT_DELETE (INTEGER)F_INDEX (INTEGER)F_EXTERNAL (INTEGER)F_VIRTUAL_TABLE (INTEGER)F_JS_EXTERNAL (INTEGER)F_JS_FILENAME (TEXT)F_PRIMARY_KEY (INTEGER)F_DELETED_FLAG (INTEGER)F_MASTER_ID (INTEGER)F_MASTER_REC_ID (INTEGER)F_JS_FUNCS (BLOB)F_EDIT_LOCK (INTEGER)F_GEN_NAME (TEXT)F_KEEP_HISTORY (INTEGER)SYS_ID (INTEGER)F_SELECT_ALL (INTEGER)F_RECORD_VERSION (INTEGER)F_MASTER_FIELD (INTEGER)F_COPY_OF (INTEGER)F_MASTER_APPLIES (INTEGER)SYS_FIELD_LOOKUPSID (INTEGER)DELETED (INTEGER)FIELD_ID (INTEGER)F_VALUE (INTEGER)F_LOOKUP (TEXT)SYS_LOOKUP_LISTSID (INTEGER)DELETED (INTEGER)F_NAME (TEXT)F_LOOKUP_VALUES_TEXT (BLOB)SYS_LANGSID (INTEGER)DELETED (INTEGER)F_NAME (TEXT)F_LANGUAGE (INTEGER)F_COUNTRY (INTEGER)F_DECIMAL_POINT (TEXT)F_MON_DECIMAL_POINT (TEXT)F_MON_THOUSANDS_SEP (TEXT)F_CURRENCY_SYMBOL (TEXT)F_FRAC_DIGITS (INTEGER)F_P_CS_PRECEDES (INTEGER)F_N_CS_PRECEDES (INTEGER)F_P_SEP_BY_SPACE (INTEGER)F_N_SEP_BY_SPACE (INTEGER)F_POSITIVE_SIGN (TEXT)F_NEGATIVE_SIGN (TEXT)F_P_SIGN_POSN (INTEGER)F_N_SIGN_POSN (INTEGER)F_D_FMT (TEXT)F_D_T_FMT (TEXT)F_ABR (TEXT)F_RTL (INTEGER)SYS_PARAMSID (INTEGER)DELETED (INTEGER)F_SAFE_MODE (INTEGER)F_DEBUGGING (INTEGER)F_CON_POOL_SIZE (INTEGER)F_LANGUAGE (INTEGER)F_AUTHOR (TEXT)F_VERSION (TEXT)F_MP_POOL (INTEGER)F_PERSIST_CON (INTEGER)F_SINGLE_FILE_JS (INTEGER)F_DYNAMIC_JS (INTEGER)F_COMPRESSED_JS (INTEGER)F_FIELD_ID_GEN (INTEGER)F_TIMEOUT (INTEGER)F_DELETE_REPORTS_AFTER (INTEGER)F_IGNORE_CHANGE_IP (INTEGER)F_HISTORY_ITEM (INTEGER)F_LOCK_ITEM (INTEGER)F_SYS_GROUP (INTEGER)F_THEME (INTEGER)F_SMALL_FONT (INTEGER)F_FULL_WIDTH (INTEGER)F_FORMS_IN_TABS (INTEGER)F_MAX_CONTENT_LENGTH (INTEGER)F_LANG_VERSION (TEXT)F_SECRET_KEY (TEXT)F_MODIFICATION (INTEGER)F_IMPORT_DELAY (INTEGER)F_CLIENT_MODIFIED (INTEGER)F_SERVER_MODIFIED (INTEGER)F_BUILD_VERSION (INTEGER)F_PARAMS_VERSION (INTEGER)F_MAINTENANCE (INTEGER)F_PRODUCTION (INTEGER)F_JAM_VERSION (TEXT)TASK_ID (INTEGER)F_SHOW_NOT_NULL (INTEGER)F_UPLOAD_FILE_EXT (TEXT)F_UPGRADED_TO (INTEGER)SYS_LANGUAGESID (INTEGER)F_NAME (TEXT)F_ABR (TEXT)F_RTL (INTEGER)DELETED (INTEGER)SYS_COUNTRIESID (INTEGER)F_NAME (TEXT)F_ABR (TEXT)DELETED (INTEGER)F_RTL (INTEGER)SYS_FIELD_PRIVILEGESID (INTEGER)DELETED (INTEGER)ITEM (INTEGER)OWNER_REC_ID (INTEGER)FIELD (INTEGER)F_PROHIBITED (INTEGER)F_READ_ONLY (INTEGER)OWNER_ID (INTEGER)
hide

Click on admin.sqlite link to download MindMap file for FreeMind or similar software.

Ie, for Linux:

https://ixpeering.dl.sourceforge.net/project/freemind/freemind/1.0.1/freemind-bin-1.0.1.zip?viasf=1

For Windows:

https://sourceforge.net/projects/freemind/

Jam.py version 7.0.52

Document version 1.6, 18th June 2025

~Introduction~

The notes here are not supported by Jam core developers and structure might change in future Jam releases. The below notes

were used for Importing more than 100 tables into the Jam.py from an legacy system. There are other, more general notes as well and

not used for tables Importing per se.

If updating the file, please post it to http://groups.google.com/forum/#!forum/jam-py for everyone and I'll update this site.

Hope this helps.

Thanks!

~

So what is admin.sqlite DB? According to Jam.py, the DB stores info about the project tables, fields and indexes, as well as code and settings. This means everything we change in Jam.py Application Builder, is recorded in DB. However, sometimes we need to interact with the DB directly, particularly if Jam has no means yet to fulfill the requirements. With Importing tables from some live system, there is no way to add column(s) during the Import since the Jam.py is in, so called, "DB Manual Mode" by the design. Which enables us to Import, but not alter the tables, meaning we need to alter the tables before Import operation. This is particularly true for Jam.py features, like History or Deleted option.

There is also a need to interact with DB directly if the App password is lost or forgotten when Jam.py is in "Safe Mode".

Hence, always backup the admin.sqlite database before performing any of tasks mentioned here.

~

Legend:

- nodes in RED color are used for internationalization

hide
SYS_FIELDS

Creating a new Table Field, or Importing Tables with all definitions happens here as well as in SYS_ITEMS. Export of the Project uses it, ie if we add a table field manually to DB (by you or DBA's), and we Export Jam project, the exported DB will not be consistent with added field from before.

Hence, we need to insert manually created DB fields into the SYS_FIELDS for Jam to consume it. If New Group Item is created for Imported tables, we need to identify the SYS_ITEMS.ID first. For example, after jam-project command and New Group Item is added in Builder immediately after, 10th record has ID=6, PARENT=1,TASK_ID=1,TYPE_ID=6 etc. The important part is TYPE_ID=6 which is a new PARENT for imported tables.

Than we Import tables into that New Group Item and ID increases with PARENT=6, TASK_ID=1,TYPE_ID=10 etc for every table imported. For example:

select ID,PARENT,TASK_ID,TYPE_ID from SYS_ITEMS where PARENT=6 and TASK_ID=1 and TYPE_ID=10

Now that we have information about our Imported tables and the ID for each table, we can import this data into SYS_FIELDS:

INSERT INTO SYS_FIELDS (DELETED, F_NAME, F_FIELD_NAME, F_DATA_TYPE, OWNER_ID, OWNER_REC_ID, TASK_ID, F_ALIGNMENT, F_DB_FIELD_NAME, F_DEFAULT_LOOKUP_VALUE)

SELECT 0, 'deleted', 'deleted', 7, 3, ID, 1, 1, 'DELETED', 0

FROM SYS_ITEMS

WHERE PARENT=6 and TASK_ID=1 and TYPE_ID=10

We inserted all manually added records into SYS_FIELDS and now SYS_ITEMS.F_DELETED_FLAG should be updated for every table with corresponded SYS_FIELDS.ID which identifies "Deleted Flag":

UPDATE SYS_ITEMS

SET F_DELETED_FLAG = (

SELECT id

FROM SYS_FIELDS

WHERE SYS_FIELDS.OWNER_REC_ID = SYS_ITEMS.ID AND SYS_FIELDS.F_NAME = 'deleted'

);

Now we can set deleted=0 to all tables:

import sqlite3

connection  = sqlite3.connect("yourdb.sqlite3")

cursor      = connection.cursor() 

tableQuery = "select * from sqlite_master where type = 'table' and name != 'Order' and name != 'sqlite_sequence'"

cursor.execute(tableQuery)

tableList = cursor.fetchall()

for table in tableList:  

    setdelTable = "UPDATE %s"%(table[1]) + " SET deleted = 0"

    print(setdelTable)

    connection.commit()

    cursor.execute(setdelTable)

connection.close()

And finally we update the F_SOFT_DELETE where ID => 7 because ID=6 is New Group Item where we imported all tables:

update sys_items set f_soft_delete = 1 where id >= 7;

hide
SYS_ITEMS