knex 0.21.20 → 0.21.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/CONTRIBUTING.md +184 -184
  3. package/LICENSE +22 -22
  4. package/README.md +95 -95
  5. package/bin/cli.js +414 -414
  6. package/bin/utils/cli-config-utils.js +151 -151
  7. package/bin/utils/constants.js +7 -7
  8. package/bin/utils/migrationsLister.js +37 -37
  9. package/knex.js +8 -8
  10. package/lib/client.js +413 -413
  11. package/lib/config-resolver.js +61 -61
  12. package/lib/constants.js +44 -44
  13. package/lib/dialects/mssql/index.js +390 -390
  14. package/lib/dialects/mssql/query/compiler.js +444 -444
  15. package/lib/dialects/mssql/schema/columncompiler.js +103 -103
  16. package/lib/dialects/mssql/schema/compiler.js +59 -59
  17. package/lib/dialects/mssql/schema/tablecompiler.js +245 -245
  18. package/lib/dialects/mssql/transaction.js +97 -97
  19. package/lib/dialects/mysql/index.js +191 -191
  20. package/lib/dialects/mysql/query/compiler.js +142 -142
  21. package/lib/dialects/mysql/schema/columncompiler.js +171 -171
  22. package/lib/dialects/mysql/schema/compiler.js +60 -60
  23. package/lib/dialects/mysql/schema/tablecompiler.js +262 -262
  24. package/lib/dialects/mysql/transaction.js +48 -48
  25. package/lib/dialects/mysql2/index.js +35 -35
  26. package/lib/dialects/mysql2/transaction.js +46 -46
  27. package/lib/dialects/oracle/DEAD_CODE.md +5 -5
  28. package/lib/dialects/oracle/formatter.js +20 -20
  29. package/lib/dialects/oracle/index.js +79 -79
  30. package/lib/dialects/oracle/query/compiler.js +327 -327
  31. package/lib/dialects/oracle/schema/columnbuilder.js +18 -18
  32. package/lib/dialects/oracle/schema/columncompiler.js +139 -139
  33. package/lib/dialects/oracle/schema/compiler.js +81 -81
  34. package/lib/dialects/oracle/schema/tablecompiler.js +165 -165
  35. package/lib/dialects/oracle/schema/trigger.js +126 -126
  36. package/lib/dialects/oracle/utils.js +86 -86
  37. package/lib/dialects/oracledb/index.js +489 -489
  38. package/lib/dialects/oracledb/query/compiler.js +363 -363
  39. package/lib/dialects/oracledb/schema/columncompiler.js +35 -35
  40. package/lib/dialects/oracledb/transaction.js +76 -76
  41. package/lib/dialects/oracledb/utils.js +14 -14
  42. package/lib/dialects/postgres/index.js +319 -319
  43. package/lib/dialects/postgres/query/compiler.js +206 -206
  44. package/lib/dialects/postgres/schema/columncompiler.js +125 -125
  45. package/lib/dialects/postgres/schema/compiler.js +109 -109
  46. package/lib/dialects/postgres/schema/tablecompiler.js +183 -183
  47. package/lib/dialects/redshift/index.js +73 -73
  48. package/lib/dialects/redshift/query/compiler.js +119 -119
  49. package/lib/dialects/redshift/schema/columnbuilder.js +20 -20
  50. package/lib/dialects/redshift/schema/columncompiler.js +60 -60
  51. package/lib/dialects/redshift/schema/compiler.js +14 -14
  52. package/lib/dialects/redshift/schema/tablecompiler.js +123 -123
  53. package/lib/dialects/redshift/transaction.js +18 -18
  54. package/lib/dialects/sqlite3/formatter.js +21 -21
  55. package/lib/dialects/sqlite3/index.js +169 -169
  56. package/lib/dialects/sqlite3/query/compiler.js +222 -222
  57. package/lib/dialects/sqlite3/schema/columncompiler.js +27 -27
  58. package/lib/dialects/sqlite3/schema/compiler.js +49 -49
  59. package/lib/dialects/sqlite3/schema/ddl.js +525 -525
  60. package/lib/dialects/sqlite3/schema/tablecompiler.js +238 -238
  61. package/lib/formatter.js +295 -295
  62. package/lib/functionhelper.js +14 -14
  63. package/lib/helpers.js +92 -92
  64. package/lib/index.js +3 -3
  65. package/lib/interface.js +115 -115
  66. package/lib/knex.js +42 -42
  67. package/lib/logger.js +76 -76
  68. package/lib/migrate/MigrationGenerator.js +82 -82
  69. package/lib/migrate/Migrator.js +611 -611
  70. package/lib/migrate/configuration-merger.js +60 -60
  71. package/lib/migrate/migrate-stub.js +17 -17
  72. package/lib/migrate/migration-list-resolver.js +36 -36
  73. package/lib/migrate/sources/fs-migrations.js +99 -99
  74. package/lib/migrate/stub/cjs.stub +15 -15
  75. package/lib/migrate/stub/coffee.stub +13 -13
  76. package/lib/migrate/stub/eg.stub +14 -14
  77. package/lib/migrate/stub/js.stub +15 -15
  78. package/lib/migrate/stub/knexfile-coffee.stub +34 -34
  79. package/lib/migrate/stub/knexfile-eg.stub +43 -43
  80. package/lib/migrate/stub/knexfile-js.stub +44 -44
  81. package/lib/migrate/stub/knexfile-ls.stub +35 -35
  82. package/lib/migrate/stub/knexfile-ts.stub +44 -44
  83. package/lib/migrate/stub/ls.stub +14 -14
  84. package/lib/migrate/stub/ts.stub +21 -21
  85. package/lib/migrate/table-creator.js +67 -67
  86. package/lib/migrate/table-resolver.js +27 -27
  87. package/lib/query/builder.js +1372 -1372
  88. package/lib/query/compiler.js +889 -889
  89. package/lib/query/constants.js +13 -13
  90. package/lib/query/joinclause.js +263 -263
  91. package/lib/query/methods.js +92 -92
  92. package/lib/query/string.js +190 -190
  93. package/lib/raw.js +188 -188
  94. package/lib/ref.js +39 -39
  95. package/lib/runner.js +285 -285
  96. package/lib/schema/builder.js +82 -82
  97. package/lib/schema/columnbuilder.js +117 -117
  98. package/lib/schema/columncompiler.js +177 -177
  99. package/lib/schema/compiler.js +101 -101
  100. package/lib/schema/helpers.js +51 -51
  101. package/lib/schema/tablebuilder.js +288 -288
  102. package/lib/schema/tablecompiler.js +296 -296
  103. package/lib/seed/Seeder.js +203 -203
  104. package/lib/seed/seed-stub.js +13 -13
  105. package/lib/seed/stub/coffee.stub +9 -9
  106. package/lib/seed/stub/eg.stub +11 -11
  107. package/lib/seed/stub/js.stub +13 -13
  108. package/lib/seed/stub/ls.stub +11 -11
  109. package/lib/seed/stub/ts.stub +13 -13
  110. package/lib/transaction.js +363 -363
  111. package/lib/util/batchInsert.js +59 -59
  112. package/lib/util/delay.js +6 -6
  113. package/lib/util/fake-client.js +9 -9
  114. package/lib/util/finally-mixin.js +13 -13
  115. package/lib/util/fs.js +76 -76
  116. package/lib/util/import-file.js +13 -13
  117. package/lib/util/is-module-type.js +14 -14
  118. package/lib/util/is.js +32 -32
  119. package/lib/util/make-knex.js +338 -338
  120. package/lib/util/nanoid.js +29 -29
  121. package/lib/util/noop.js +1 -1
  122. package/lib/util/parse-connection.js +66 -66
  123. package/lib/util/save-async-stack.js +14 -14
  124. package/lib/util/template.js +52 -52
  125. package/lib/util/timeout.js +29 -29
  126. package/lib/util/timestamp.js +16 -16
  127. package/package.json +1 -1
  128. package/scripts/build.js +125 -125
  129. package/scripts/docker-compose.yml +111 -111
  130. package/scripts/next-release-howto.md +24 -24
  131. package/scripts/release.sh +34 -34
  132. package/scripts/runkit-example.js +34 -34
  133. package/scripts/stress-test/README.txt +18 -18
  134. package/scripts/stress-test/docker-compose.yml +47 -47
  135. package/scripts/stress-test/knex-stress-test.js +196 -196
  136. package/scripts/stress-test/mysql2-random-hanging-every-now-and-then.js +145 -145
  137. package/scripts/stress-test/mysql2-sudden-exit-without-error.js +100 -100
  138. package/scripts/stress-test/reconnect-test-mysql-based-drivers.js +184 -184
  139. package/types/index.d.ts +2249 -2249
  140. package/types/result.d.ts +27 -27
  141. package/types/tables.d.ts +4 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Master (Unreleased)
2
2
 
3
+ # 0.21.21 - 10 August, 2021
4
+
5
+ ### Bug fixes:
6
+
7
+ - CLI: Fix line terminators causing knex migrations to fail
8
+
3
9
  # 0.21.20 - 07 August, 2021
4
10
 
5
11
  ### Typings:
package/CONTRIBUTING.md CHANGED
@@ -1,184 +1,184 @@
1
- ## How to contribute to Knex.js
2
-
3
- - Make changes in the `/lib` directory.
4
-
5
- - Before sending a pull request for a feature or bug fix, be sure to have
6
- [tests](https://github.com/knex/knex/tree/master/test). Every pull request that changes the queries should have
7
- also **integration tests which are ran against real database** (in addition to unit tests which checks which kind of queries
8
- are being created).
9
-
10
- - Use the same coding style as the rest of the
11
- [codebase](https://github.com/knex/knex/blob/master/knex.js).
12
-
13
- - All pull requests should be made to the `master` branch.
14
-
15
- - Pull request description should have link to corresponding PR of documentation branch.
16
-
17
- - All pull requests that modify the public API should be updated in [types/index.d.ts](https://github.com/knex/knex/blob/master/types/index.d.ts)
18
-
19
- ## Documentation
20
-
21
- Documentation is no longer maintained in knex master repository. All the documentation pull requests should be sent to https://github.com/knex/documentation
22
-
23
- Documentation pull requests should not be merged before knex version which has the new documented feature is released.
24
-
25
- ## I would like to add support for new dialect to knex, is it possible?
26
-
27
- Currently there are already way too many dialects supported in `knex` and instead of adding new dialect to central codebase, all the dialects should be moved to separate npm packages out from `knex` core library with their respective maintainers and test suites.
28
-
29
- So if you like to write your own dialect, you can just inherit own dialect from knex base classes and use it by passing dialect to knex in knex configuration (https://runkit.com/embed/90b3cpyr4jh2):
30
-
31
- ```js
32
- // simple dialect overriding sqlite3 dialect to use sqlite3-offline driver
33
- require('sqlite3-offline');
34
- const Knex = require('knex');
35
-
36
- const Dialect = require(`knex/lib/dialects/sqlite3/index.js`);
37
- Dialect.prototype._driver = () => require('sqlite3-offline');
38
-
39
- const knex = Knex({
40
- client: Dialect,
41
- connection: ':memory:',
42
- });
43
-
44
- console.log(knex.select(knex.raw(1)).toSQL());
45
-
46
- await knex.schema.createTable('fooobar', (t) => {
47
- t.bigincrements('id');
48
- t.string('data');
49
- });
50
- await knex('fooobar').insert({ data: 'nomnom' });
51
-
52
- console.log('Gimme all the data:', await knex('fooobar'));
53
- ```
54
-
55
- ## What is minimal code to reproduce bug and why I have to provide that when I can just tell whats the problem is
56
-
57
- Writing minimal reproduction code for the problem is time-consuming and sometimes it is also really hard, for
58
- example when the original code where the bug happens is written using express or mocha. So why is it necessary
59
- for me to commit so much time to it when the problem is in `knex`? Contributors should be grateful that I reported
60
- the bug I found.
61
-
62
- The point of runnable code to reproduce the problem is to easily verify that there really is a problem and that the one
63
- who did the report did nothing wrong (surprisingly often problem is in the user code). So instead of just description
64
- what to do the complete code encourages devs to actually test out that problem exists and start solving it and it
65
- saves lots of time.
66
-
67
- tl;dr list:
68
-
69
- 1. Actually in most of the cases developer already figures out what was the problem when writing the minimal test case
70
- or if there was problem how stuff was initialized or how async code was written it is easy to point out the problem.
71
-
72
- 2. It motivates developer to actually try out if the bug really exist by not having to figure out from incomplete example
73
- environment in which and how bug actually manifests.
74
-
75
- 3. There are currently very few people fixing knex issues and if one has to put easily 15-30 minutes time to issue just
76
- to see that I cannot reproduce this issue it just wastes development hours that were available for improving knex.
77
-
78
- Test case should initialize needed tables, insert needed data and fail...
79
-
80
- ```
81
- const knex = require('knex')({
82
- client: 'pg',
83
- connection: 'postgres:///knex_test'
84
- });
85
-
86
- async function main() {
87
- await knex.schema.createTable(...);
88
- await knex('table').insert({foo: 'bar}');
89
- await knex.destroy();
90
- }
91
-
92
- main();
93
- ```
94
-
95
- Usually issues without reproduction code available are just closed and if the same issue is reported multiple
96
- times maybe someone looks into it.
97
-
98
- One easy way to setup database for your reproduction is to use database from knex's docker-compose setup (npm run db:start) and by checking the connection settings from tests' `test/knexfile.js`.
99
-
100
- ## Integration Tests
101
-
102
- ### The Easy Way
103
-
104
- By default, Knex runs tests against sqlite3, postgresql, mysql, mysql2, mssql and oracledb drivers. All databases can be initialized and ran with docker.
105
-
106
- Docker databases can be started and initialized and started with:
107
-
108
- ```bash
109
- npm run db:start
110
- ```
111
-
112
- and stopped with:
113
-
114
- ```bash
115
- npm run db:stop
116
- ```
117
-
118
- In case you don't need all of the databases, you can use simplified dev Docker configuration that only runs PostgreSQL, by running `npm run db:start:postgres` and `npm run db:stop:postgres` accordingly.
119
-
120
- ### Installing support for oracledb
121
-
122
- Oracle has started providing precompiled driver libs for all the platforms, which makes it viable to run oracle tests also locally against oracledb running in docker.
123
-
124
- Check message when running
125
-
126
- ```bash
127
- npm install oracledb
128
- ```
129
-
130
- and download driver library binary packages and unzip it to ~/lib directory.
131
-
132
- ### Specifying Databases
133
-
134
- You can optionally specify which dialects to test using the `DB` environment variable. Values should be space separated and can include:
135
-
136
- - mysql
137
- - mysql2
138
- - postgres
139
- - sqlite3
140
- - oracledb
141
- - mssql
142
-
143
- ```bash
144
- $ DB='postgres mysql' npm test
145
- ```
146
-
147
- ### Custom Configuration
148
-
149
- If you'd like to override the database configuration (to use a different host, for example), you can override the path to the [default test configuration](https://github.com/knex/knex/blob/master/test/knexfile.js) using the `KNEX_TEST` environment variable.
150
-
151
- ```bash
152
- $ KNEX_TEST='./path/to/my/config.js' npm test
153
- ```
154
-
155
- ### Creating Postgres User
156
-
157
- If you are running tests against own local database one might need to setup test user and database for knex to connect.
158
-
159
- To create a new user, login to Postgres and use the following queries to add the user. This assumes you've already created the `knex_test` database.
160
-
161
- ```
162
- CREATE ROLE postgres WITH LOGIN PASSWORD '';
163
- GRANT ALL PRIVILEGES ON DATABASE "knex_test" TO postgres;
164
- ```
165
-
166
- Once this is done, check it works by attempting to login:
167
-
168
- ```
169
- psql -h localhost -U postgres -d knex_test
170
- ```
171
-
172
- ## Want to be Collaborator?
173
-
174
- There is always room for more collaborators. Be active on resolving github issues / sending pull requests / reviewing code and we will ask you to join.
175
-
176
- ### Etiquette (/ˈɛtᵻkɛt/ or /ˈɛtᵻkɪt/, French: [e.ti.kɛt])
177
-
178
- Make pull requests for your changes, do not commit directly to master (release stuff like fixing changelog are ok though).
179
-
180
- All the pull requests must be peer reviewed by other collaborator, so don't merge your request before that. If there is no response ping others.
181
-
182
- If you are going to add new feature to knex (not just a bugfix) it should be discussed first with others to agree on details.
183
-
184
- Join Gitter chat if you feel to chat outside of github issues.
1
+ ## How to contribute to Knex.js
2
+
3
+ - Make changes in the `/lib` directory.
4
+
5
+ - Before sending a pull request for a feature or bug fix, be sure to have
6
+ [tests](https://github.com/knex/knex/tree/master/test). Every pull request that changes the queries should have
7
+ also **integration tests which are ran against real database** (in addition to unit tests which checks which kind of queries
8
+ are being created).
9
+
10
+ - Use the same coding style as the rest of the
11
+ [codebase](https://github.com/knex/knex/blob/master/knex.js).
12
+
13
+ - All pull requests should be made to the `master` branch.
14
+
15
+ - Pull request description should have link to corresponding PR of documentation branch.
16
+
17
+ - All pull requests that modify the public API should be updated in [types/index.d.ts](https://github.com/knex/knex/blob/master/types/index.d.ts)
18
+
19
+ ## Documentation
20
+
21
+ Documentation is no longer maintained in knex master repository. All the documentation pull requests should be sent to https://github.com/knex/documentation
22
+
23
+ Documentation pull requests should not be merged before knex version which has the new documented feature is released.
24
+
25
+ ## I would like to add support for new dialect to knex, is it possible?
26
+
27
+ Currently there are already way too many dialects supported in `knex` and instead of adding new dialect to central codebase, all the dialects should be moved to separate npm packages out from `knex` core library with their respective maintainers and test suites.
28
+
29
+ So if you like to write your own dialect, you can just inherit own dialect from knex base classes and use it by passing dialect to knex in knex configuration (https://runkit.com/embed/90b3cpyr4jh2):
30
+
31
+ ```js
32
+ // simple dialect overriding sqlite3 dialect to use sqlite3-offline driver
33
+ require('sqlite3-offline');
34
+ const Knex = require('knex');
35
+
36
+ const Dialect = require(`knex/lib/dialects/sqlite3/index.js`);
37
+ Dialect.prototype._driver = () => require('sqlite3-offline');
38
+
39
+ const knex = Knex({
40
+ client: Dialect,
41
+ connection: ':memory:',
42
+ });
43
+
44
+ console.log(knex.select(knex.raw(1)).toSQL());
45
+
46
+ await knex.schema.createTable('fooobar', (t) => {
47
+ t.bigincrements('id');
48
+ t.string('data');
49
+ });
50
+ await knex('fooobar').insert({ data: 'nomnom' });
51
+
52
+ console.log('Gimme all the data:', await knex('fooobar'));
53
+ ```
54
+
55
+ ## What is minimal code to reproduce bug and why I have to provide that when I can just tell whats the problem is
56
+
57
+ Writing minimal reproduction code for the problem is time-consuming and sometimes it is also really hard, for
58
+ example when the original code where the bug happens is written using express or mocha. So why is it necessary
59
+ for me to commit so much time to it when the problem is in `knex`? Contributors should be grateful that I reported
60
+ the bug I found.
61
+
62
+ The point of runnable code to reproduce the problem is to easily verify that there really is a problem and that the one
63
+ who did the report did nothing wrong (surprisingly often problem is in the user code). So instead of just description
64
+ what to do the complete code encourages devs to actually test out that problem exists and start solving it and it
65
+ saves lots of time.
66
+
67
+ tl;dr list:
68
+
69
+ 1. Actually in most of the cases developer already figures out what was the problem when writing the minimal test case
70
+ or if there was problem how stuff was initialized or how async code was written it is easy to point out the problem.
71
+
72
+ 2. It motivates developer to actually try out if the bug really exist by not having to figure out from incomplete example
73
+ environment in which and how bug actually manifests.
74
+
75
+ 3. There are currently very few people fixing knex issues and if one has to put easily 15-30 minutes time to issue just
76
+ to see that I cannot reproduce this issue it just wastes development hours that were available for improving knex.
77
+
78
+ Test case should initialize needed tables, insert needed data and fail...
79
+
80
+ ```
81
+ const knex = require('knex')({
82
+ client: 'pg',
83
+ connection: 'postgres:///knex_test'
84
+ });
85
+
86
+ async function main() {
87
+ await knex.schema.createTable(...);
88
+ await knex('table').insert({foo: 'bar}');
89
+ await knex.destroy();
90
+ }
91
+
92
+ main();
93
+ ```
94
+
95
+ Usually issues without reproduction code available are just closed and if the same issue is reported multiple
96
+ times maybe someone looks into it.
97
+
98
+ One easy way to setup database for your reproduction is to use database from knex's docker-compose setup (npm run db:start) and by checking the connection settings from tests' `test/knexfile.js`.
99
+
100
+ ## Integration Tests
101
+
102
+ ### The Easy Way
103
+
104
+ By default, Knex runs tests against sqlite3, postgresql, mysql, mysql2, mssql and oracledb drivers. All databases can be initialized and ran with docker.
105
+
106
+ Docker databases can be started and initialized and started with:
107
+
108
+ ```bash
109
+ npm run db:start
110
+ ```
111
+
112
+ and stopped with:
113
+
114
+ ```bash
115
+ npm run db:stop
116
+ ```
117
+
118
+ In case you don't need all of the databases, you can use simplified dev Docker configuration that only runs PostgreSQL, by running `npm run db:start:postgres` and `npm run db:stop:postgres` accordingly.
119
+
120
+ ### Installing support for oracledb
121
+
122
+ Oracle has started providing precompiled driver libs for all the platforms, which makes it viable to run oracle tests also locally against oracledb running in docker.
123
+
124
+ Check message when running
125
+
126
+ ```bash
127
+ npm install oracledb
128
+ ```
129
+
130
+ and download driver library binary packages and unzip it to ~/lib directory.
131
+
132
+ ### Specifying Databases
133
+
134
+ You can optionally specify which dialects to test using the `DB` environment variable. Values should be space separated and can include:
135
+
136
+ - mysql
137
+ - mysql2
138
+ - postgres
139
+ - sqlite3
140
+ - oracledb
141
+ - mssql
142
+
143
+ ```bash
144
+ $ DB='postgres mysql' npm test
145
+ ```
146
+
147
+ ### Custom Configuration
148
+
149
+ If you'd like to override the database configuration (to use a different host, for example), you can override the path to the [default test configuration](https://github.com/knex/knex/blob/master/test/knexfile.js) using the `KNEX_TEST` environment variable.
150
+
151
+ ```bash
152
+ $ KNEX_TEST='./path/to/my/config.js' npm test
153
+ ```
154
+
155
+ ### Creating Postgres User
156
+
157
+ If you are running tests against own local database one might need to setup test user and database for knex to connect.
158
+
159
+ To create a new user, login to Postgres and use the following queries to add the user. This assumes you've already created the `knex_test` database.
160
+
161
+ ```
162
+ CREATE ROLE postgres WITH LOGIN PASSWORD '';
163
+ GRANT ALL PRIVILEGES ON DATABASE "knex_test" TO postgres;
164
+ ```
165
+
166
+ Once this is done, check it works by attempting to login:
167
+
168
+ ```
169
+ psql -h localhost -U postgres -d knex_test
170
+ ```
171
+
172
+ ## Want to be Collaborator?
173
+
174
+ There is always room for more collaborators. Be active on resolving github issues / sending pull requests / reviewing code and we will ask you to join.
175
+
176
+ ### Etiquette (/ˈɛtᵻkɛt/ or /ˈɛtᵻkɪt/, French: [e.ti.kɛt])
177
+
178
+ Make pull requests for your changes, do not commit directly to master (release stuff like fixing changelog are ok though).
179
+
180
+ All the pull requests must be peer reviewed by other collaborator, so don't merge your request before that. If there is no response ping others.
181
+
182
+ If you are going to add new feature to knex (not just a bugfix) it should be discussed first with others to agree on details.
183
+
184
+ Join Gitter chat if you feel to chat outside of github issues.
package/LICENSE CHANGED
@@ -1,22 +1,22 @@
1
- Copyright (c) 2013-present Tim Griesser
2
-
3
- Permission is hereby granted, free of charge, to any person
4
- obtaining a copy of this software and associated documentation
5
- files (the "Software"), to deal in the Software without
6
- restriction, including without limitation the rights to use,
7
- copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- copies of the Software, and to permit persons to whom the
9
- Software is furnished to do so, subject to the following
10
- conditions:
11
-
12
- The above copyright notice and this permission notice shall be
13
- included in all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
- OTHER DEALINGS IN THE SOFTWARE.
1
+ Copyright (c) 2013-present Tim Griesser
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -1,95 +1,95 @@
1
- # [knex.js](http://knexjs.org)
2
-
3
- [![npm version](http://img.shields.io/npm/v/knex.svg)](https://npmjs.org/package/knex)
4
- [![npm downloads](https://img.shields.io/npm/dm/knex.svg)](https://npmjs.org/package/knex)
5
- ![](https://github.com/knex/knex/workflows/CI/badge.svg)
6
- [![Coverage Status](https://coveralls.io/repos/knex/knex/badge.svg?branch=master)](https://coveralls.io/r/knex/knex?branch=master)
7
- [![Dependencies Status](https://david-dm.org/knex/knex.svg)](https://david-dm.org/knex/knex)
8
- [![Gitter chat](https://badges.gitter.im/tgriesser/knex.svg)](https://gitter.im/tgriesser/knex)
9
- [![Language Grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/knex/knex.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/knex/knex/context:javascript)
10
-
11
- > **A SQL query builder that is _flexible_, _portable_, and _fun_ to use!**
12
-
13
- A batteries-included, multi-dialect (MSSQL, MySQL, PostgreSQL, SQLite3, Oracle (including Oracle Wallet Authentication)) query builder for
14
- Node.js, featuring:
15
-
16
- - [transactions](http://knexjs.org/#Transactions)
17
- - [connection pooling](http://knexjs.org/#Installation-pooling)
18
- - [streaming queries](http://knexjs.org/#Interfaces-Streams)
19
- - both a [promise](http://knexjs.org/#Interfaces-Promises) and [callback](http://knexjs.org/#Interfaces-Callbacks) API
20
- - a [thorough test suite](https://travis-ci.org/knex/knex)
21
- - the ability to [run in the Browser](http://knexjs.org/#Installation-browser)
22
-
23
- Node.js versions 10+ are supported.
24
-
25
- [Read the full documentation to get started!](http://knexjs.org)
26
- [Or check out our Recipes wiki to search for solutions to some specific problems](https://github.com/knex/knex/wiki/Recipes)
27
- If upgrading from older version, see [Upgrading instructions](https://github.com/knex/knex/blob/master/UPGRADING.md)
28
-
29
- For support and questions, join the `#bookshelf` channel on freenode IRC
30
-
31
- For an Object Relational Mapper, see:
32
-
33
- - http://bookshelfjs.org
34
- - https://github.com/Vincit/objection.js
35
-
36
- To see the SQL that Knex will generate for a given query, see: [Knex Query Lab](https://michaelavila.com/knex-querylab/)
37
-
38
- ## Examples
39
-
40
- We have several examples [on the website](http://knexjs.org). Here is the first one to get you started:
41
-
42
- ```js
43
- const knex = require('knex')({
44
- client: 'sqlite3',
45
- connection: {
46
- filename: './data.db',
47
- },
48
- });
49
-
50
- // Create a table
51
- knex.schema
52
- .createTable('users', table => {
53
- table.increments('id');
54
- table.string('user_name');
55
- })
56
-
57
- // ...and another
58
- .createTable('accounts', table => {
59
- table.increments('id');
60
- table.string('account_name');
61
- table
62
- .integer('user_id')
63
- .unsigned()
64
- .references('users.id');
65
- })
66
-
67
- // Then query the table...
68
- .then(() =>
69
- knex('users').insert({ user_name: 'Tim' })
70
- )
71
-
72
- // ...and using the insert id, insert into the other table.
73
- .then(rows =>
74
- knex('accounts').insert({ account_name: 'knex', user_id: rows[0] })
75
- )
76
-
77
- // Query both of the rows.
78
- .then(() =>
79
- knex('users')
80
- .join('accounts', 'users.id', 'accounts.user_id')
81
- .select('users.user_name as user', 'accounts.account_name as account')
82
- )
83
-
84
- // map over the results
85
- .then(rows =>
86
- rows.map(row => {
87
- console.log(row)
88
- })
89
- )
90
-
91
- // Finally, add a .catch handler for the promise chain
92
- .catch(e => {
93
- console.error(e);
94
- });
95
- ```
1
+ # [knex.js](http://knexjs.org)
2
+
3
+ [![npm version](http://img.shields.io/npm/v/knex.svg)](https://npmjs.org/package/knex)
4
+ [![npm downloads](https://img.shields.io/npm/dm/knex.svg)](https://npmjs.org/package/knex)
5
+ ![](https://github.com/knex/knex/workflows/CI/badge.svg)
6
+ [![Coverage Status](https://coveralls.io/repos/knex/knex/badge.svg?branch=master)](https://coveralls.io/r/knex/knex?branch=master)
7
+ [![Dependencies Status](https://david-dm.org/knex/knex.svg)](https://david-dm.org/knex/knex)
8
+ [![Gitter chat](https://badges.gitter.im/tgriesser/knex.svg)](https://gitter.im/tgriesser/knex)
9
+ [![Language Grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/knex/knex.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/knex/knex/context:javascript)
10
+
11
+ > **A SQL query builder that is _flexible_, _portable_, and _fun_ to use!**
12
+
13
+ A batteries-included, multi-dialect (MSSQL, MySQL, PostgreSQL, SQLite3, Oracle (including Oracle Wallet Authentication)) query builder for
14
+ Node.js, featuring:
15
+
16
+ - [transactions](http://knexjs.org/#Transactions)
17
+ - [connection pooling](http://knexjs.org/#Installation-pooling)
18
+ - [streaming queries](http://knexjs.org/#Interfaces-Streams)
19
+ - both a [promise](http://knexjs.org/#Interfaces-Promises) and [callback](http://knexjs.org/#Interfaces-Callbacks) API
20
+ - a [thorough test suite](https://travis-ci.org/knex/knex)
21
+ - the ability to [run in the Browser](http://knexjs.org/#Installation-browser)
22
+
23
+ Node.js versions 10+ are supported.
24
+
25
+ [Read the full documentation to get started!](http://knexjs.org)
26
+ [Or check out our Recipes wiki to search for solutions to some specific problems](https://github.com/knex/knex/wiki/Recipes)
27
+ If upgrading from older version, see [Upgrading instructions](https://github.com/knex/knex/blob/master/UPGRADING.md)
28
+
29
+ For support and questions, join the `#bookshelf` channel on freenode IRC
30
+
31
+ For an Object Relational Mapper, see:
32
+
33
+ - http://bookshelfjs.org
34
+ - https://github.com/Vincit/objection.js
35
+
36
+ To see the SQL that Knex will generate for a given query, see: [Knex Query Lab](https://michaelavila.com/knex-querylab/)
37
+
38
+ ## Examples
39
+
40
+ We have several examples [on the website](http://knexjs.org). Here is the first one to get you started:
41
+
42
+ ```js
43
+ const knex = require('knex')({
44
+ client: 'sqlite3',
45
+ connection: {
46
+ filename: './data.db',
47
+ },
48
+ });
49
+
50
+ // Create a table
51
+ knex.schema
52
+ .createTable('users', table => {
53
+ table.increments('id');
54
+ table.string('user_name');
55
+ })
56
+
57
+ // ...and another
58
+ .createTable('accounts', table => {
59
+ table.increments('id');
60
+ table.string('account_name');
61
+ table
62
+ .integer('user_id')
63
+ .unsigned()
64
+ .references('users.id');
65
+ })
66
+
67
+ // Then query the table...
68
+ .then(() =>
69
+ knex('users').insert({ user_name: 'Tim' })
70
+ )
71
+
72
+ // ...and using the insert id, insert into the other table.
73
+ .then(rows =>
74
+ knex('accounts').insert({ account_name: 'knex', user_id: rows[0] })
75
+ )
76
+
77
+ // Query both of the rows.
78
+ .then(() =>
79
+ knex('users')
80
+ .join('accounts', 'users.id', 'accounts.user_id')
81
+ .select('users.user_name as user', 'accounts.account_name as account')
82
+ )
83
+
84
+ // map over the results
85
+ .then(rows =>
86
+ rows.map(row => {
87
+ console.log(row)
88
+ })
89
+ )
90
+
91
+ // Finally, add a .catch handler for the promise chain
92
+ .catch(e => {
93
+ console.error(e);
94
+ });
95
+ ```