Οι λειτουργίες του QueryBuilder, οι φίλτρα και η σύμβαση οδήγησης
Αυτή η σελίδα καλύπτει το εγγενές QueryBuilder του total5@0.0.19 (querybuilder.js). Το DB() επιστρέφει έναν ελεγκτή ουράς. Κάθε λειτουργία προγραμματίζει μια κλήση προς τον driver· προσθέστε φίλτρα και callbacks σύγχρονα πριν εκτελεστεί. Το NEWDB(name, driver) καταχωρίζει μια σύνδεση. Το NEWDB(name) την αποκαταχωρίζει. Δεν υπάρχει υπονοούμενη μηχανή βάσης δεδομένων ή συναλλαγή σε αυτή την ουρά.
Για να εκτελέσετε μια λειτουργία βάσης δεδομένων, εφαρμόστε αυτή τη λειτουργία στον οδηγό. Ετικέτες Sqlite.
| Λειτουργίες | Ο driver λαμβάνει |
|---|---|
find/all(table), read/one(table), list(table) | exec, table· το read ορίζει first:true, take:1· το list έχει προεπιλογή take:100, skip:0 |
check(table), count(table) | Το check ορίζει first:1, take:1· ο driver ορίζει την τιμή του αποτελέσματος |
insert/ins(table, data) | payload |
update/modify/mod/upd(table, data, upsert) | payload, upsert· ένα μηδενικό αποτέλεσμα προκαλεί δεύτερο insert όταν το upsert είναι ενεργό |
remove/rem(table), truncate/clear(table), drop(table) | Το αντίστοιχο exec· οι καταστροφικές λειτουργίες χρειάζονται υποστήριξη από τον driver |
scalar(table, type, key, key2) | scalar:{type,key,key2}· ένα παραλειπόμενο key γίνεται * |
command(table, name) | command:name |
query(sql, params) ή query(connection, sql, params) | Ακατέργαστο κείμενο στο query, τιμές στο params, ο πίνακας είναι κενός· η δέσμευση παραμέτρων SQL είναι ευθύνη του driver |
Μέθοδοι ελεγκτή: callback/pipe, promise, done, debug, language, load(connection, options) και exec(options, callback). Το load αντιγράφει ένα καθορισμένο υποσύνολο σειριοποιημένων επιλογών· το exec αποστέλλει τα υποστηριζόμενα ονόματα λειτουργιών. Τα next/free είναι εσωτερικά του κύκλου ζωής. Μια ουρά σταματά μετά από σφάλμα του driver· δεν αναιρεί προηγούμενες εγγραφές.
NEWDB('contract', function(options, callback) {
if (options.table === 'failure')
return callback(new Error('driver failed'));
if (options.table === 'empty')
return callback(null, []);
if (options.table === 'upsert') {
MAIN.upsert.push(JSON.parse(JSON.stringify(options)));
return callback(null, options.exec === 'update' ? 0 : options.payload);
}
if (options.exec === 'list')
return callback(null, { items: [], count: 12 });
callback(null, options.first ? [options] : options);
});
MAIN.upsert = [];exports.install = function() {
ROUTE('GET /contract/', contract);
};
async function contract($) {
try {
var out = {};
var methods = ['find', 'all', 'read', 'one', 'list', 'check', 'count', 'insert', 'ins', 'update', 'modify', 'mod', 'upd', 'remove', 'rem', 'truncate', 'clear', 'drop'];
out.operations = {};
for (var method of methods)
out.operations[method] = await DB()[method]('contract/items', { name: 'Ann' }).promise();
out.scalar = await DB().scalar('contract/items', 'sum', 'amount', 'group').promise();
out.command = await DB().command('contract/items', 'vacuum').promise();
out.raw = await DB().query('contract', 'SELECT ?', [7]).promise();
out.filters = await DB().find('contract/items').id([1, 2]).userid({ id: 'u1' }).equal({ active: true }).where('age', '!=', 0).in('team', [{ id: 'a' }], 'id').notin('team', 'b').between('age', 18, 65).or(function(q) { q.where('role', 'a').where('role', 'b'); }).array('tags', ['x']).month('created', 1).day('created', 2).year('created', '>=', 2020).hour('created', 3).minute('created', 4).search('name', 'ann', 'beg').contains('email').empty('deleted').query('trusted_fragment').join('team', 'teams', 'left', 'a.id', 'b.id').permit('permissions', 'RW', ['team'], 'u1', false).promise();
out.options = await DB().find('contract/items').fields('id, name').returning('id, name').sort('name', true).gridsort('id_asc').limit(5).skip(2).primarykey('uid').schema('public').language({ language: 'es' }, '_').debug().promise();
out.page = await DB().list('contract/items').paginate('2', '500', 10).promise();
out.grid = await DB().find('contract/items').autoquery({ fields: 'id,password', sort: 'password_desc,name_desc', page: '2', limit: '500', age: '>18' }, 'id:String,name:String,age:Number', 'id_asc', 10).promise();
out.gridfields = await DB().find('contract/items').gridfields('id', 'id,name').promise();
var queue = DB();
queue.read('contract/items').set('one');
queue.count('contract/items').set('count');
queue.find('contract/items').nobind();
out.queue = await queue.promise();
var hooks = [];
await DB().read('contract/empty').data(function(v) { hooks.push(v === null ? 'null' : 'value'); }).promise();
try { await DB().read('contract/empty').error('missing').fail(function() { hooks.push('fail'); }).promise(); } catch (e) { out.missing = String(e); }
try { await DB().find('contract/failure').promise(); } catch (e) { out.failure = String(e); }
out.hooks = hooks;
out.upsert = await DB().update('contract/upsert', { name: 'new' }, true).where('id', 7).insert(function(payload, role) { payload.role = role; }, 'member').promise();
out.upsertCalls = MAIN.upsert;
out.load = await DB().load('contract', { table: 'items', exec: 'find', take: 2, filter: [] }).promise();
$.json(out);
} catch (e) { $.invalid(e); }
}