ForgeTotal.js 5
el

Total.js 5

Οι λειτουργίες του QueryBuilder, οι φίλτρα και η σύμβαση οδήγησης

Total.js 5 · total5@0.0.19 total5reference Εκτελέστηκε με το Total.js 5

Αυτή η σελίδα καλύπτει το εγγενές 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
Μέθοδοι ερωτήματοςΕπιλογές / συμπεριφορά
where(name, [comparer], value), equal(object), id(value), userid(value)Συντόμευση ισότητας· το == γίνεται =, το != γίνεται · τα ID σε πίνακα χρησιμοποιούν in
in/notin(name, values, [idField]), between(name,a,b), or(fn)Φιλτράρουν εγγραφές· το or ομαδοποιεί τις εγγραφές που προστέθηκαν μέσα στο fn(builder)
array(name,[comparer],value)Προεπιλεγμένος συγκριτής &&· η ερμηνεία ανήκει στον driver
month/day/year/hour/minute(name,[comparer],value)Φίλτρα κατά τμήμα ημερομηνίας· προεπιλεγμένος συγκριτής =
search(name,value,[where]), contains(name), empty(name)Φιλτράρουν εγγραφές· η σημασιολογία ταύτισης ανήκει στον driver
query(fragment), join(name,table,type,a,b), permit(name,type,values,userid,required)Φίλτρα ειδικά για τον driver· τα ακατέργαστα τμήματα πρέπει να προέρχονται από αξιόπιστο κώδικα εφαρμογής
fields(csv), returning(csv)Πίνακες περικομμένων ονομάτων πεδίων, όχι escaping SQL ή εξουσιοδότηση
sort(name, descending), gridsort(csv,[localized])Συμβολοσειρές ταξινόμησης· το true ή το desc επιλέγουν φθίνουσα
take/limit(n), skip(n), page(page,limit), paginate(page,limit,max)Μετατοπίσεις/όρια· το paginate περιορίζει το όριο, το page όχι
first(), primarykey(name), schema(name), language(value,prefix,skip), debug()Μεταδεδομένα για τον driver· το first ξεπακετάρει επίσης αποτέλεσμα πίνακα
gridfilter(name,query,type,[key]), autoquery(query,schema,sort,max)Μετατρέπουν τις παραμέτρους ερωτήματος του grid σε επιλογές. Το autoquery περιορίζει τα ζητούμενα πεδία και τα κλειδιά ταξινόμησης στο δηλωμένο σχήμα του
gridfields(fields,allowed)Χρησιμοποιήστε το fields() με τη δική σας λίστα επιδόσεων: είναι ο δοκιμασμένος τρόπος για να επιλέξετε τις στήλες
callback/pipe(fn), promise(), done($,fn,param)Ολοκλήρωση· τα promises απορρίπτονται σε σφάλμα του driver
data(fn), fail(fn), error/err(message,reverse)Hooks επιτυχίας/αποτυχίας· το error() απορρίπτει κενά αποτελέσματα, το reverse:true απορρίπτει αληθή αποτελέσματα (συμπεριλαμβανομένου κενού πίνακα)
set(name), nobind()Ονομάζουν το αποτέλεσμα στην ουρά ή δεν αντικαθιστούν την έξοδο της ουράς
insert(fn,param) σε έναν update builderΤροποποιεί το payload πριν από το εφεδρικό insert ενός upsert
audit($,message,type)Καλεί τα variables() και audit() του παρεχόμενου context μετά από επιτυχή απόκριση του driver

Μέθοδοι ελεγκτή: callback/pipe, promise, done, debug, language, load(connection, options) και exec(options, callback). Το load αντιγράφει ένα καθορισμένο υποσύνολο σειριοποιημένων επιλογών· το exec αποστέλλει τα υποστηριζόμενα ονόματα λειτουργιών. Τα next/free είναι εσωτερικά του κύκλου ζωής. Μια ουρά σταματά μετά από σφάλμα του driver· δεν αναιρεί προηγούμενες εγγραφές.

definitions/contract.js
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 = [];
controllers/contract.js
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); }
}