PMLSQLite provides ORM between AVEVA PML2 language objects and SQLite3 databases.
Download the ZIP archive from the pmlsqlite Releases.
Download the ZIP archive from the pmljsonnet Releases which is required as a dependency.
Extract both archives and place their contents in a directory defined by the
PMLLIBenvironment variable.Open an AVEVA product.
Enter the following command in the Command Window:
pml rehash all
Definitions
.PMLSQLITEORM() .PMLSQLITEORM(!filename is STRING)Arguments
!filename- Path of a SQLite3 database file
Example
using namespace 'PMLSQLite'-- Open an in-memory database !memdb = object PMLSQLITEORM() -- Open a database file !filedb = object PMLSQLITEORM('%TEMP%\example.db')
Definitions
.CreateTable(!table is STRING, !schema is ANY, !force is BOOLEAN)Arguments
!table- Table name!schema- Object or JSON string for the schema to define the table!force- If true, delete the existing table before creating the new table.
Example
using namespace 'PMLSQLite' !db = object PMLSQLITEORM('%TEMP%\example.db') -- Create a table from a DIRECTION object $* CREATE TABLE IF NOT EXISTS "directions" ( $*"east"NUMERIC, $*"north"NUMERIC, $*"origin"TEXT, $*"up"NUMERIC $* ); !db.CreateTable('directions', object DIRECTION(), false) -- Force-create a table from a JSON string $*DROPTABLEIF EXISTS "json"; $* CREATE TABLE IF NOT EXISTS "json" ( $*"id"INTEGERPRIMARY KEY, $*"name"TEXT, $*"length"NUMERIC, $*"flag"INTEGER $* ); !db.CreateTable('json', '{"id": 0, "name": "", "length": 0, "flag": false}', true)
Definitions
.DropTable(!table is STRING)Arguments
!table- Table name
Example
using namespace 'PMLSQLite' !db = object PMLSQLITEORM('%TEMP%\example.db') !db.CreateTable('directions', object DIRECTION(), true) -- Drop a table $*DROPTABLEIF EXISTS "directions"; !db.DropTable('directions')
Definitions
.Insert(!table is STRING, !record is ANY) .Insert(!table is STRING, !records is ARRAY)Arguments
!table- Table name!record- Object or JSON string for the values to insert a new record!records- Array of objects or JSON strings for the values to bulk-insert new records
Example
using namespace 'PMLSQLite' !db = object PMLSQLITEORM('%TEMP%\example.db') !db.CreateTable('directions', object DIRECTION(), true) -- Insert a new record $*INSERT INTO"directions" ("east","north","origin","up") VALUES $* (1, 0, '=?/?', 0) !db.Insert('directions', E) -- Bulk-insert new records !dirs[1] = E !dirs[2] = N !dirs[3] = U $*INSERT INTO"directions" ("east","north","origin","up") VALUES $* (1, 0, '=?/?', 0), $* (0, 1, '=?/?', 0), $* (0, 0, '=?/?', 1) !db.Insert('directions', !dirs)
Definitions
.Update(!table is STRING, !set is ANY, !where is ANY)Arguments
!table- Table name!set- Object or JSON string for the values to update records!where- Condition for specifying records to update the values
Example
using namespace 'PMLSQLite' !db = object PMLSQLITEORM('%TEMP%\example.db') !db.CreateTable('directions', object DIRECTION(), true) !db.Insert('directions', E) !db.Insert('directions', N) !db.Insert('directions', E) !db.Insert('directions', N) !db.Insert('directions', U) -- Update records $*UPDATE"directions"SET $*"east"=0, $*"north"=0, $*"origin"='=?/?', $*"up"=-1 $*WHERE $*"east"=1AND $*"north"=0AND $*"up"=0 !db.Update('directions', D, '{"east": 1, "north": 0, "up": 0}')
Definitions
.Delete(!table is STRING, !where is ANY)Arguments
!table- Table name!where- Condition for specifying records to delete
Example
using namespace 'PMLSQLite' !db = object PMLSQLITEORM('%TEMP%\example.db') !db.CreateTable('directions', object DIRECTION(), true) !db.Insert('directions', E) !db.Insert('directions', N) !db.Insert('directions', E) !db.Insert('directions', N) !db.Insert('directions', U) -- Delete records $*DELETEFROM"directions" $*WHERE $*"east"=1AND $*"north"=0AND $*"up"=0 !db.Delete('directions', '{"east": 1, "north": 0, "up": 0}')
Definitions
.Select(!table is STRING, !objtype is STRING) is ARRAY .Select(!table is STRING, !objtype is STRING, !where is ANY) is ARRAY .Select(!table is STRING, !columns is ARRAY) is ARRAY .Select(!table is STRING, !columns is ARRAY, !where is ANY) is ARRAYArguments
!table- Table name!objtype- Object type of the retrieved records!columns- Columns in the retrieved records!where- Condition for specifying records to extract
Example
using namespace 'PMLSQLite' !db = object PMLSQLITEORM('%TEMP%\example.db') !db.CreateTable('directions', '{"id": 0, "east": 0, "north": 0, "up": 0, "origin": ""}', true) !db.Insert('directions', E) !db.Insert('directions', N) !db.Insert('directions', E) !db.Insert('directions', N) !db.Insert('directions', U) -- Select records and read them as a DIRECTION object $*SELECT*FROM"directions" !result = !db.Select('directions', 'DIRECTION') do !r values !result q var !r enddo -- Select records with the specified columns and read them as an ARRAY object $*SELECT id, east, north, up FROM"directions" $*WHERE $*"east"=1AND $*"north"=0AND $*"up"=0 !result = !db.Select('directions', Split('id east north up'), '{"east": 1, "north": 0, "up": 0}') do !r values !result q var !r enddo -- Get the number of records $*SELECTcount(*) FROM"directions" q var !db.Select('directions', Split('count(*)')).First()
Definitions
.BeginTransaction() .Commit() .Rollback()Example
using namespace 'PMLSQLite' !db = object PMLSQLITEORM('%TEMP%\example.db') !db.CreateTable('directions', object DIRECTION(), true) -- Begin transaction !db.BeginTransaction() !db.Insert('directions', E) !db.Insert('directions', N) !db.Insert('directions', U) !db.Commit()
Definitions
.Execute(!sql is STRING) .Execute(!sql is STRING, !param is ARRAY) .Execute(!sql is ARRAY) .Execute(!sql is ARRAY, !param is ARRAY) .Query(!sql is STRING, !objtype is STRING) is ARRAY .Query(!sql is STRING, !objtype is STRING, !param is ARRAY) is ARRAY .Query(!sql is ARRAY, !objtype is STRING) is ARRAY .Query(!sql is ARRAY, !objtype is STRING, !param is ARRAY) is ARRAYArguments
!sql- SQL commands!objtype- Object type of the retrieved records!param- Parameters to bind on the placeholders
Example
using namespace 'PMLSQLite' !db = object PMLSQLITEORM('%TEMP%\example.db') !db.CreateTable('directions', object DIRECTION(), true) -- Execute raw SQL !db.Execute('INSERT INTO directions (east, north, up) VALUES (1, 0, 0), (0, 1, 0), (0, 0, 1)') !result = !db.Query('SELECT * FROM directions WHERE east = ? AND north = ? AND up = ?', 'DIRECTION', Split('0 1 0')) do !r values !result q var !r enddo
The test cases use PML Unit on Everything3D 2.1.