From 11d3d8db09de7b03eeca23e472551111be752180 Mon Sep 17 00:00:00 2001 From: kubo_takaichi Date: Fri, 27 Mar 2015 23:48:19 +0900 Subject: [PATCH] Add sample code --- knex/knex-test.ts | 562 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 561 insertions(+), 1 deletion(-) diff --git a/knex/knex-test.ts b/knex/knex-test.ts index c3612f036..4cd7ec0d7 100644 --- a/knex/knex-test.ts +++ b/knex/knex-test.ts @@ -1,3 +1,563 @@ /// - +/// import Knex = require('knex'); +import _ = require('lodash'); +'use strict'; +// Initializing the Library +var knex = Knex({ + client: 'sqlite3', + connection: { + filename: "./mydb.sqlite" + } +}); + +var knex = Knex({ + client: 'mysql', + connection: { + socketPath : '/path/to/socket.sock', + user : 'your_database_user', + password : 'your_database_password', + database : 'myapp_test' + } +}); + +// Pooling +var knex = Knex({ + client: 'mysql', + connection: { + host : '127.0.0.1', + user : 'your_database_user', + password : 'your_database_password', + database : 'myapp_test' + }, + pool: { + min: 0, + max: 7 + } +}); + +// Migrations +var knex = Knex({ + client: 'mysql', + connection: { + host : '127.0.0.1', + user : 'your_database_user', + password : 'your_database_password', + database : 'myapp_test' + }, + migrations: { + tableName: 'migrations' + } +}); + +// Knex Query Builder +knex.select('title', 'author', 'year').from('books'); +knex.select().table('books'); + +knex.avg('sum_column1').from(function() { + this.sum('column1 as sum_column1').from('t1').groupBy('column1').as('t1') +}).as('ignored_alias'); + +knex.column('title', 'author', 'year').select().from('books'); +knex.column(['title', 'author', 'year']).select().from('books'); +knex.select('*').from('users'); + +knex('users').where({ + first_name: 'Test', + last_name: 'User' +}).select('id'); + +knex('users').where('id', 1); + +knex('users').where(() => { + this.where('id', 1).orWhere('id', '>', 10) +}).orWhere({name: 'Tester'}); + +knex('users').where('votes', '>', 100); + +var subquery = knex('users').where('votes', '>', 100).andWhere('status', 'active').orWhere('name', 'John').select('id'); +knex('accounts').where('id', 'in', subquery); + +knex.select('name').from('users') + .whereIn('id', [1, 2, 3]) + .orWhereIn('id', [4, 5, 6]); + +var subquery = knex.select('id').from('accounts'); +knex.select('name').from('users') + .whereIn('account_id', subquery); + +knex('users') + .where('name', '=', 'John') + .orWhere(function() { + this.where('votes', '>', 100).andWhere('title', '<>', 'Admin'); + }); + +knex('users').whereNotIn('id', [1, 2, 3]); + +knex('users').where('name', 'like', '%Test%').orWhereNotIn('id', [1, 2, 3]); + +knex('users').whereNull('updated_at'); + +knex('users').whereNotNull('created_at'); + +knex('users').whereExists(function() { + this.select('*').from('accounts').whereRaw('users.account_id = accounts.id'); +}); + +knex('users').whereExists(knex.select('*').from('accounts').whereRaw('users.account_id = accounts.id')); + +knex('users').whereNotExists(function() { + this.select('*').from('accounts').whereRaw('users.account_id = accounts.id'); +}); + +knex('users').whereBetween('votes', [1, 100]); + +knex('users').whereNotBetween('votes', [1, 100]); + +knex('users').whereRaw('id = ?', [1]); + +// Join methods +knex('users') + .join('contacts', 'users.id', '=', 'contacts.user_id') + .select('users.id', 'contacts.phone'); + +knex('users') + .join('contacts', 'users.id', 'contacts.user_id') + .select('users.id', 'contacts.phone'); + +knex.select('*').from('users').join('accounts', function() { + this.on('accounts.id', '=', 'users.account_id').orOn('accounts.owner_id', '=', 'users.id') +}); + +knex.select('*').from('users').join('accounts', 'accounts.type', knex.raw('?', ['admin'])); + +knex.from('users').innerJoin('accounts', 'users.id', 'accounts.user_id'); + +knex.table('users').innerJoin('accounts', 'users.id', '=', 'accounts.user_id'); + +knex('users').innerJoin('accounts', function() { + this.on('accounts.id', '=', 'users.account_id').orOn('accounts.owner_id', '=', 'users.id') +}); + +knex.select('*').from('users').leftJoin('accounts', 'users.id', 'accounts.user_id'); + +knex.select('*').from('users').leftJoin('accounts', function() { + this.on('accounts.id', '=', 'users.account_id').orOn('accounts.owner_id', '=', 'users.id') +}); + +knex.select('*').from('users').leftOuterJoin('accounts', 'users.id', 'accounts.user_id'); + +knex.select('*').from('users').leftOuterJoin('accounts', function() { + this.on('accounts.id', '=', 'users.account_id').orOn('accounts.owner_id', '=', 'users.id') +}); + +knex.select('*').from('users').rightJoin('accounts', 'users.id', 'accounts.user_id'); + +knex.select('*').from('users').rightJoin('accounts', function() { + this.on('accounts.id', '=', 'users.account_id').orOn('accounts.owner_id', '=', 'users.id') +}); + +knex.select('*').from('users').rightOuterJoin('accounts', 'users.id', 'accounts.user_id'); + +knex.select('*').from('users').rightOuterJoin('accounts', function() { + this.on('accounts.id', '=', 'users.account_id').orOn('accounts.owner_id', '=', 'users.id') +}); + +knex.select('*').from('users').outerJoin('accounts', 'users.id', 'accounts.user_id'); + +knex.select('*').from('users').outerJoin('accounts', function() { + this.on('accounts.id', '=', 'users.account_id').orOn('accounts.owner_id', '=', 'users.id') +}); + +knex.select('*').from('users').fullOuterJoin('accounts', 'users.id', 'accounts.user_id'); + +knex.select('*').from('users').fullOuterJoin('accounts', function() { + this.on('accounts.id', '=', 'users.account_id').orOn('accounts.owner_id', '=', 'users.id') +}); + +knex.select('*').from('users').crossJoin('accounts', 'users.id', 'accounts.user_id'); + +knex.select('*').from('accounts').joinRaw('natural full join table1').where('id', 1); + +knex.select('*').from('accounts').join(knex.raw('natural full join table1')).where('id', 1); + +knex('customers') + .distinct('first_name', 'last_name') + .select(); + +knex('users').groupBy('count'); + +knex.select('year', knex.raw('SUM(profit)')).from('sales').groupByRaw('year WITH ROLLUP'); + +knex('users').orderBy('name', 'desc'); + +knex.select('*').from('table').orderByRaw('col NULLS LAST DESC'); + +knex('books').insert({title: 'Slaughterhouse Five'}); + +knex('coords').insert([{x: 20}, {y: 30}, {x: 10, y: 20}]); + +knex.insert([{title: 'Great Gatsby'}, {title: 'Fahrenheit 451'}], 'id').into('books'); + +knex('books') + .returning('id') + .insert({title: 'Slaughterhouse Five'}); + +knex('books') + .returning('id') + .insert([{title: 'Great Gatsby'}, {title: 'Fahrenheit 451'}]); + +knex('books') + .where('published_date', '<', 2000) + .update({ + status: 'archived' + }); + +knex('books').update('title', 'Slaughterhouse Five'); + +knex('accounts') + .where('activated', false) + .del(); + +var someExternalMethod: Function; + +knex.transaction(function(trx) { + knex('books').transacting(trx).insert({name: 'Old Books'}) + .then(function(resp) { + var id = resp[0]; + return someExternalMethod(id, trx); + }) + .then(trx.commit) + .catch(trx.rollback); + +}).then(function() { + console.log('Transaction complete.'); +}).catch(function(err) { + console.error(err); +}); + +knex.transaction(function(trx) { + knex('tableName') + .transacting(trx) + .forUpdate() + .select('*'); + + knex('tableName') + .transacting(trx) + .forShare() + .select('*') +}); + +knex('users').count('active'); + +knex('users').min('age'); + +knex('users').min('age as a'); + +knex('users').max('age'); + +knex('users').max('age as a'); + +knex('users').sum('products'); + +knex('users').sum('products as p'); + +knex('users').avg('age'); + +knex('users').avg('age as a'); + +knex('accounts') + .where('userid', '=', 1) + .increment('balance', 10); + +knex('accounts').where('userid', '=', 1).decrement('balance', 5); + +knex('accounts').truncate(); + +knex.table('users').pluck('id').then(function(ids) { + console.log(ids); +}); + +knex.table('users').first('id', 'name').then(function(row) { + console.log(row); +}); + +// Using trx as a query builder: +knex.transaction(function(trx) { + + var info: any; + var books: any[] = [ + {title: 'Canterbury Tales'}, + {title: 'Moby Dick'}, + {title: 'Hamlet'} + ]; + + return trx + .insert({name: 'Old Books'}, 'id') + .into('catalogues') + .then(function(ids) { + return Promise.map(books, function(book) { + book.catalogue_id = ids[0]; + // Some validation could take place here. + return trx.insert(info).into('books'); + }); + }); +}) +.then(function(inserts) { + console.log(inserts.length + ' new books saved.'); +}) +.catch(function(error) { + // If we get here, that means that neither the 'Old Books' catalogues insert, + // nor any of the books inserts will have taken place. + console.error(error); +}); + +// Using trx as a transaction object: +knex.transaction(function(trx) { + + var info: any; + var books: any[] = [ + {title: 'Canterbury Tales'}, + {title: 'Moby Dick'}, + {title: 'Hamlet'} + ]; + + knex.insert({name: 'Old Books'}, 'id') + .into('catalogues') + .transacting(trx) + .then(function(ids) { + return Promise.map(books, function(book) { + book.catalogue_id = ids[0]; + + // Some validation could take place here. + + return knex.insert(info).into('books').transacting(trx); + }); + }) + .then(trx.commit) + .catch(trx.rollback); +}) +.then(function(inserts) { + console.log(inserts.length + ' new books saved.'); +}) +.catch(function(error) { + // If we get here, that means that neither the 'Old Books' catalogues insert, + // nor any of the books inserts will have taken place. + console.error(error); +}); + +knex.schema.createTable('users', function (table) { + table.increments(); + table.string('name'); + table.timestamps(); +}); + +knex.schema.renameTable('users', 'old_users'); + +knex.schema.dropTable('users'); + +knex.schema.hasTable('users').then(function(exists) { + if (!exists) { + return knex.schema.createTable('users', function(t) { + t.increments('id').primary(); + t.string('first_name', 100); + t.string('last_name', 100); + t.text('bio'); + }); + } +}); + +var tableName: string; +var columnName: string; +knex.schema.hasColumn(tableName, columnName); + +knex.schema.dropTableIfExists('users'); + +knex.schema.table('users', function (table) { + table.dropColumn('name'); + table.string('first_name'); + table.string('last_name'); +}); + +knex.schema.raw("SET sql_mode='TRADITIONAL'") +.table('users', function (table) { + table.dropColumn('name'); + table.string('first_name'); + table.string('last_name'); +}); + +knex('users') + .select(knex.raw('count(*) as user_count, status')) + .where(knex.raw(1)) + .orWhere(knex.raw('status <> ?', [1])) + .groupBy('status'); + + knex.raw('select * from users where id = ?', [1]).then(function(resp) { + // ... + }); + +(() => { + var subcolumn = knex.raw('select avg(salary) from employee where dept_no = e.dept_no') + .wrap('(', ') avg_sal_dept'); + + knex.select('e.lastname', 'e.salary', subcolumn) + .from('employee as e') + .whereRaw('dept_no = e.dept_no'); +})(); + +(() => { + var subcolumn = knex.avg('salary') + .from('employee') + .whereRaw('dept_no = e.dept_no') + .as('avg_sal_dept'); + + knex.select('e.lastname', 'e.salary', subcolumn) + .from('employee as e') + .whereRaw('dept_no = e.dept_no'); +})(); + +var x: number; +knex.select('name').from('users') + .where('id', '>', 20) + .andWhere('id', '<', 200) + .limit(10) + .offset(x) + .then(function(rows: any) { + return _.pluck(rows, 'name'); + }) + .then(function(names: any) { + return knex.select('id').from('nicknames').whereIn('nickname', names); + }) + .then(function(rows) { + console.log(rows); + }) + .catch(function(error) { + console.error(error) + }); + +knex.select('*').from('users').where({name: 'Tim'}) + .then(function(rows) { + return knex.insert({user_id: rows[0].id, name: 'Test'}, 'id').into('accounts'); + }).then(function(id) { + console.log('Inserted Account ' + id); + }).catch(function(error) { + console.error(error); + }); + +knex.insert({id: 1, name: 'Test'}, 'id').into('accounts') + .catch(function(error) { + console.error(error); + }).then(function() { + return knex.select('*').from('accounts').where('id', 1); + }).then(function(rows) { + console.log(rows[0]); + }).catch(function(error) { + console.error(error); + }); + +var query: any; +query.then(function(x: any) { + // doSideEffectsHere(x); + return x; +}); + +knex.select('name').from('users').limit(10).map(function(row: any) { + return row.name; +}).then(function(names) { + console.log(names); +}).catch(function(e) { + console.error(e); +}); + +knex.select('name').from('users').limit(10).reduce(function(memo: any, row: any) { + memo.names.push(row.name); + memo.count++; + return memo; +}, {count: 0, names: []}).then(function(obj) { + console.log(obj); +}).catch(function(e) { + console.error(e); +}); + +knex.select('name').from('users') + .limit(10) + .bind(console) + .then(console.log) + .catch(console.error); + +var values: any[]; +// Without return: +knex.insert(values).into('users') + .then(function() { + return {inserted: true}; + }); + +knex.insert(values).into('users').return({inserted: true}); + +knex.select('name').from('users') + .where('id', '>', 20) + .andWhere('id', '<', 200) + .limit(10) + .offset(x) + .exec(function(err: any, rows: any[]) { + if (err) return console.error(err); + knex.select('id').from('nicknames').whereIn('nickname', _.pluck(rows, 'name')) + .exec(function(err: any, rows: any[]) { + if (err) return console.error(err); + console.log(rows); + }); + }); + +// Retrieve the stream: +var stream = knex.select('*').from('users').stream(); +var writableStream: any; +stream.pipe(writableStream); + +// With options: +var stream = knex.select('*').from('users').stream({highWaterMark: 5}); +stream.pipe(writableStream); + +// Use as a promise: +(() => { + +var stream = knex.select('*').from('users').where(knex.raw('id = ?', [1])).stream(function(stream: any) { + stream.pipe(writableStream); +}).then(function() { + // ... +}).catch(function(e: Error) { + console.error(e); +}); + +})(); + +var stream = knex.select('*').from('users').pipe(writableStream); +var app: any; + +knex.select('*') + .from('users') + .on('query', function(data: any) { + app.log(data); + }) + .then(function() { + // ... + }); + + knex.select('*').from('users').where(knex.raw('id = ?', [1])).toString(); + + knex.select('*').from('users').where(knex.raw('id = ?', [1])).toSQL(); + +// +// Migrations +// +var config = { }; +knex.migrate.make(name, [config]); + +knex.migrate.latest([config]); + +knex.migrate.rollback([config]); + +knex.migrate.currentversion([config]); + +knex.seed.make(name, [config]); + +knex.seed.run([config]);