new TubDataStore() #

Class for execution of an ORM/SQL queries on the server side. Contains several data collection stored in the heap of ub application (i.e not use a JS engine memory and since not a subject of GC)

Use it to:

Members

DATA_NAMES static #

Active dataset name we work with

asJSONArray : String instance #

Return string representation of Instance in Array of array format

asJSONObject : String instance #

Return string representation of Instance in format [{attr1: value1, attr2: value2},... ]

asXMLPersistent : String instance #

Return XML representation of Instance in MS DataSet format

bof : Boolean instance #

Indicate current position in data collection is on the beginning of collection

currentDataName : String instance #

Active dataset name we work with. There is some predefined dataNames - see TubDataStore.DATA_NAMES

entity : UBEntity instance #

Entity metadata

eof : Boolean instance #

Indicate current position in data collection is on the end of collection.

initialized : Boolean instance #

Is store initialized

rowCount : Number instance #

Record count. If DataStore is not initialized or empty will return 0.

rowPos : Number instance #

Row position inside currentDataName dataset. Read/write

totalRowCount : Number instance #

Total record count if store are filled with Repository.withTotal() option. If DataStore is not initialized or empty or initialized without withTotal() will return -1.

Methods

initialize(source : Object, keyMapopt : <(String|Object)>)→TubDataStore static #

Initialize DataStore from one of supported source formats:

  • Flatten(fastest):
    {fieldCount: K, rowCount: Z, values: [field1Name, ..., fieldKName, row1field1Value,  ..., row1fieldKValue, row2field1Value,..]}
  • Array-of-array :
    [[row1field1Value,  ..., row1fieldKValue], ..., [rowZfield1Value, ... rowZfieldKValue]
  • Array-of-object :

    [{field1Name: row1field1Value, ..., fieldKName: row1fieldKValue}, ....]

    Can (optionally) convert source field names to new names using keyMap array.

Arguments info:

Examples

    
        const UB = require('@unitybase/ub')
 var ds = UB.DataStore('my_entity')

 // init empty (rowCount=0) dataStore with provided fields.
 // In case keyMap is omitted we consider it contain one attribute 'ID'
 ds.initialize([]) // the same as ds.initialize([], ['ID'])
 ds.initialize([], ['ID', 'name', {from: 'AGE', to: 'age'}])

 // Initialize dataStore from array-of-object representation
 // Resulting datstore will contain 3 field: ID, nam, age (in order, they listen in keyMap array).
 // During initialization we convert fiend name 'AGE' -> age;
 ds.initialize([
     {ID: 10, name: 'Jon', AGE: 10},
     {ID: 20, name: 'Smith', AGE: 63}
   ],
   ['ID', 'name', {from: 'AGE', to: 'age'}]
 )

 //the same, but do not convert AGE->age. Result dataset field order is unknown
 ds.initialize([
   {ID: 10, name: 'Jon', AGE: 10},
   {ID: 20, name: 'Smith', AGE: 63}
 ])

 //result dataset will contain only two field 'ID' & 'age'
 ds.initialize([
     {ID: 10, name: 'Jon', AGE: 10},
     {ID: 20, name: 'Smith', AGE: 63}
   ],
   ['ID', {from: 'AGE', to: 'age'}]
 )

 // Initialize dataStore from Array-of-array data
 // in this case keyMap is mandatory.
 // In case of mapping from is zero-based index of source element in row array
 ds.initialize(
   [[10, 'Jon', 10], [20, 'Smith', 63]],
   ['ID', 'name', 'age']
 )
 // or use mapping
 ds.initialize([[10, 'Jon', 10], [20, 'Smith', 63]],
    ['ID', {from: 2, to: 'age'}, {from: 1, to: 'name'}])
    
execSQL(sql : String, params : Object) instance #

Execute SQL with parameters. Not wait result data

Arguments info:

  • sql: String

    SQL statement to run

  • params: Object

    SQL parameters list

fieldIndexByName(fieldName : String) instance #

Return zero based index of fieldName from current data store (-1 if not found)

Examples

    
        let r = UB.Repository('cdn_organization').attrs(['ID', 'mi_owner.name'])
   .where('[ID]', '=', 3000000002801)
   .select()
 console.log(r.fieldIndexByName('mi_owner.name')) // 1
 console.log(r.fieldIndexByName('unexistedAttr')) // -1
    
first() instance #

Move first

freeNative() instance #

Release all internal resources. Store became unusable after call to freeNative()

generateID()→Number instance #

Generate a new identifier (int64)

get(attrib : Number)→Number | String instance #

Return value of attribute.

In case store initialized using TubDataStore.run style we can return Number or String type, but in case it initialized using runSQL columns data types is unknown and you must cast value do required type directly.

Arguments info:

  • attrib: Number

    attribute index or name. Index is faster but less readable.

getAsBuffer(attrib : Number)→ArrayBuffer instance #

Return value of attribute as ArrayBuffer.

You can apply this method to blob fields only

Arguments info:

  • attrib: Number

    attribute index or name. Index is faster but less readable.

initFromJSON(source) instance deprecated #

Use `TubDataStore.initialize` instead

init dataStore content from JSON string. WARNING!!! during initFromJSON UnityBase determinate field types from vield values, so if some data column contain only numeric values it becode Number (even if in source it String).

Examples

    
        const UB = require('@unitybase/ub')
let ds = UB.DataStore('myEntityCode')
ds.initFromJSON({"fieldCount":1,"values":["ID"],"rowCount":0});
console.log(ds.initialized); // TRUE
    
last() instance #

Move last

run(methodName : String, params : Object)→Boolean instance #

Run any entity method.

Examples

    
        let store = new TubDataStore('doc_attachment');
store.run('update', {
  execParams: {
    ID: 1,
    approved: 0
  }
})
store.run('anyEntityMethod', {param1: 'valueOfParam1', ...})
    
runSQL(sql : String, params : Object) instance #

Execute SQL with parameters and place result into dataStore. This method expect SQL statement have result.

To execute SQL statement without result (insert for example) - use TubDataStore.execSQL instead.

Arguments info:

  • sql: String

    SQL statement to run

  • params: Object

    SQL parameters list