velocious 1.0.1 → 1.0.3

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 (157) hide show
  1. package/README.md +36 -0
  2. package/bin/velocious.mjs +8 -0
  3. package/index.mjs +21 -0
  4. package/package.json +15 -7
  5. package/peak_flow.yml +12 -5
  6. package/spec/cli/commands/db/create-spec.mjs +25 -0
  7. package/spec/cli/commands/db/migrate-spec.mjs +37 -0
  8. package/spec/cli/commands/destroy/migration-spec.mjs +15 -0
  9. package/spec/cli/commands/generate/migration-spec.mjs +18 -0
  10. package/spec/cli/commands/init-spec.mjs +19 -0
  11. package/spec/cli/commands/test/test-files-finder-spec.mjs +12 -0
  12. package/spec/database/connection/drivers/mysql/{query-parser-spec.cjs → query-parser-spec.mjs} +12 -8
  13. package/spec/database/drivers/mysql/connection-spec.mjs +21 -0
  14. package/spec/database/record/create-spec.mjs +14 -0
  15. package/spec/database/record/destroy-spec.mjs +17 -0
  16. package/spec/database/record/find-spec.mjs +29 -0
  17. package/spec/database/record/update-spec.mjs +15 -0
  18. package/spec/dummy/dummy-directory.mjs +11 -0
  19. package/spec/dummy/index.mjs +63 -0
  20. package/spec/dummy/src/config/configuration.example.mjs +19 -0
  21. package/spec/dummy/src/config/configuration.peakflow.mjs +20 -0
  22. package/spec/dummy/src/{routes.cjs → config/routes.mjs} +3 -2
  23. package/spec/dummy/src/database/migrations/20230728075328-create-projects.mjs +11 -0
  24. package/spec/dummy/src/database/migrations/20230728075329-create-tasks.mjs +13 -0
  25. package/spec/dummy/src/models/task.mjs +4 -0
  26. package/spec/dummy/src/routes/tasks/controller.mjs +26 -0
  27. package/spec/http-server/{client-spec.cjs → client-spec.mjs} +7 -10
  28. package/spec/http-server/{get-spec.cjs → get-spec.mjs} +2 -2
  29. package/spec/http-server/post-spec.mjs +72 -0
  30. package/spec/support/jasmine.json +4 -3
  31. package/src/application.mjs +50 -0
  32. package/src/cli/base-command.mjs +11 -0
  33. package/src/cli/commands/db/create.mjs +50 -0
  34. package/src/cli/commands/db/migrate.mjs +58 -0
  35. package/src/cli/commands/destroy/migration.mjs +35 -0
  36. package/src/cli/commands/generate/migration.mjs +36 -0
  37. package/src/cli/commands/init.mjs +60 -0
  38. package/src/cli/commands/test/index.mjs +14 -0
  39. package/src/cli/commands/test/test-files-finder.mjs +99 -0
  40. package/src/cli/commands/test/test-runner.mjs +19 -0
  41. package/src/cli/index.mjs +59 -0
  42. package/src/configuration-resolver.mjs +26 -0
  43. package/src/configuration.mjs +49 -0
  44. package/src/{controller.cjs → controller.mjs} +21 -4
  45. package/src/database/drivers/base.mjs +17 -0
  46. package/src/database/drivers/index.mjs +5 -0
  47. package/src/database/drivers/mysql/connect-connection.mjs +12 -0
  48. package/src/database/drivers/mysql/index.mjs +102 -0
  49. package/src/database/drivers/mysql/options.mjs +17 -0
  50. package/src/database/drivers/mysql/query-parser.mjs +25 -0
  51. package/src/database/drivers/mysql/query.mjs +26 -0
  52. package/src/database/drivers/mysql/sql/create-database.mjs +4 -0
  53. package/src/database/drivers/mysql/sql/create-table.mjs +4 -0
  54. package/src/database/drivers/mysql/sql/delete.mjs +19 -0
  55. package/src/database/drivers/mysql/sql/insert.mjs +29 -0
  56. package/src/database/drivers/mysql/sql/update.mjs +31 -0
  57. package/src/database/drivers/sqlite/options.mjs +17 -0
  58. package/src/database/drivers/sqlite/query-parser.mjs +25 -0
  59. package/src/database/drivers/sqlite/sql/create-database.mjs +4 -0
  60. package/src/database/drivers/sqlite/sql/create-table.mjs +4 -0
  61. package/src/database/drivers/sqlite/sql/delete.mjs +19 -0
  62. package/src/database/drivers/sqlite/sql/insert.mjs +29 -0
  63. package/src/database/drivers/sqlite/sql/update.mjs +31 -0
  64. package/src/database/drivers/sqlite-expo/index.mjs +100 -0
  65. package/src/database/drivers/sqlite-expo/query.mjs +9 -0
  66. package/src/database/handler.mjs +7 -0
  67. package/src/database/index.mjs +15 -0
  68. package/src/database/migration/index.mjs +18 -0
  69. package/src/database/migrator/index.mjs +15 -0
  70. package/src/database/pool/index.mjs +112 -0
  71. package/src/database/query/base.mjs +11 -0
  72. package/src/database/query/create-database-base.mjs +20 -0
  73. package/src/database/query/create-table-base.mjs +69 -0
  74. package/src/database/query/delete-base.mjs +9 -0
  75. package/src/database/query/from-base.mjs +9 -0
  76. package/src/database/query/from-plain.mjs +10 -0
  77. package/src/database/query/from-table.mjs +12 -0
  78. package/src/database/query/index.mjs +144 -0
  79. package/src/database/query/insert-base.mjs +15 -0
  80. package/src/database/query/join-base.mjs +9 -0
  81. package/src/database/query/join-plain.mjs +12 -0
  82. package/src/database/query/order-base.mjs +9 -0
  83. package/src/database/query/order-plain.mjs +21 -0
  84. package/src/database/query/select-base.mjs +9 -0
  85. package/src/database/query/select-plain.mjs +12 -0
  86. package/src/database/query/{select-table-and-column.cjs → select-table-and-column.mjs} +4 -4
  87. package/src/database/query/update-base.mjs +16 -0
  88. package/src/database/query-parser/{from-parser.cjs → from-parser.mjs} +3 -6
  89. package/src/database/query-parser/{joins-parser.cjs → joins-parser.mjs} +3 -6
  90. package/src/database/query-parser/{options.cjs → options.mjs} +13 -2
  91. package/src/database/query-parser/{select-parser.cjs → select-parser.mjs} +7 -6
  92. package/src/database/record/index.mjs +187 -0
  93. package/src/database/record/record-not-found-error.mjs +1 -0
  94. package/src/database/table-data/index.mjs +83 -0
  95. package/src/{error-logger.js → error-logger.mjs} +1 -1
  96. package/src/http-server/client/{index.cjs → index.mjs} +10 -11
  97. package/src/http-server/client/params-to-object.mjs +68 -0
  98. package/src/http-server/client/request-buffer/form-data-part.mjs +42 -0
  99. package/src/http-server/client/request-buffer/header.mjs +7 -0
  100. package/src/http-server/client/request-buffer/index.mjs +229 -0
  101. package/src/http-server/client/request-parser.mjs +47 -0
  102. package/src/http-server/client/{request-runner.cjs → request-runner.mjs} +5 -5
  103. package/src/http-server/client/request.mjs +15 -0
  104. package/src/http-server/client/{response.cjs → response.mjs} +1 -1
  105. package/src/http-server/index.mjs +137 -0
  106. package/src/http-server/server-client.mjs +47 -0
  107. package/src/http-server/worker-handler/index.mjs +79 -0
  108. package/src/http-server/worker-handler/worker-script.mjs +4 -0
  109. package/src/http-server/worker-handler/worker-thread.mjs +65 -0
  110. package/src/{logger.cjs → logger.mjs} +2 -2
  111. package/src/routes/base-route.mjs +34 -0
  112. package/src/routes/{get-route.cjs → get-route.mjs} +5 -3
  113. package/src/routes/index.mjs +9 -0
  114. package/src/routes/{resolver.cjs → resolver.mjs} +17 -9
  115. package/src/routes/{resource-route.cjs → resource-route.mjs} +9 -5
  116. package/src/routes/root-route.mjs +6 -0
  117. package/src/spec/index.mjs +5 -0
  118. package/src/templates/configuration.mjs +17 -0
  119. package/src/templates/generate-migration.mjs +11 -0
  120. package/src/templates/routes.mjs +11 -0
  121. package/src/utils/file-exists.mjs +13 -0
  122. package/bin/velocious +0 -14
  123. package/index.cjs +0 -13
  124. package/spec/dummy/config/databases.example.json +0 -10
  125. package/spec/dummy/config/databases.json +0 -0
  126. package/spec/dummy/config/databases.peakflow.json +0 -11
  127. package/spec/dummy/index.cjs +0 -40
  128. package/spec/dummy/src/models/task.cjs +0 -4
  129. package/spec/dummy/src/routes/tasks/controller.cjs +0 -18
  130. package/src/application.cjs +0 -36
  131. package/src/configuration.cjs +0 -14
  132. package/src/database/connection/drivers/mysql/index.cjs +0 -5
  133. package/src/database/connection/drivers/mysql/options.cjs +0 -7
  134. package/src/database/connection/drivers/mysql/query-parser.cjs +0 -26
  135. package/src/database/connection/index.cjs +0 -2
  136. package/src/database/handler.cjs +0 -5
  137. package/src/database/index.cjs +0 -9
  138. package/src/database/pool/index.cjs +0 -2
  139. package/src/database/query/from-base.cjs +0 -15
  140. package/src/database/query/from-plain.cjs +0 -12
  141. package/src/database/query/from-table.cjs +0 -12
  142. package/src/database/query/index.cjs +0 -59
  143. package/src/database/query/join-base.cjs +0 -15
  144. package/src/database/query/join-plain.cjs +0 -12
  145. package/src/database/query/select-base.cjs +0 -15
  146. package/src/database/query/select-plain.cjs +0 -12
  147. package/src/database/record/index.cjs +0 -5
  148. package/src/http-server/client/request-parser.cjs +0 -92
  149. package/src/http-server/client/request.cjs +0 -25
  150. package/src/http-server/index.cjs +0 -78
  151. package/src/http-server/worker-handler/index.cjs +0 -78
  152. package/src/http-server/worker-handler/socket-handler.cjs +0 -35
  153. package/src/http-server/worker-handler/worker-script.cjs +0 -4
  154. package/src/http-server/worker-handler/worker-thread.cjs +0 -49
  155. package/src/routes/base-route.cjs +0 -25
  156. package/src/routes/index.cjs +0 -9
  157. package/src/routes/root-route.cjs +0 -4
@@ -1,7 +1,7 @@
1
- const {digg, digs} = require("diggerize")
2
- const ejs = require("ejs")
1
+ import {digg, digs} from "diggerize"
2
+ import ejs from "ejs"
3
3
 
4
- module.exports = class VelociousController {
4
+ export default class VelociousController {
5
5
  constructor({configuration, params, request, response}) {
6
6
  if (!configuration) throw new Error("No configuration given")
7
7
  if (!params) throw new Error("No params given")
@@ -15,7 +15,24 @@ module.exports = class VelociousController {
15
15
  this.viewParams = {}
16
16
  }
17
17
 
18
- render() {
18
+ params = () => this._params
19
+
20
+ render(args = {}) {
21
+ if (args.json) {
22
+ return this.renderJsonArg(args)
23
+ }
24
+
25
+ return this.renderView()
26
+ }
27
+
28
+ renderJsonArg(args) {
29
+ const body = JSON.stringify(args.json)
30
+
31
+ this._response.addHeader("Content-Type", "application/json")
32
+ this._response.setBody(body)
33
+ }
34
+
35
+ renderView() {
19
36
  return new Promise((resolve, reject) => {
20
37
  const actionName = digg(this, "_params", "action")
21
38
  const controllerName = digg(this, "_params", "controller")
@@ -0,0 +1,17 @@
1
+ export default class VelociousDatabaseDriversBase {
2
+ constructor(args) {
3
+ this._args = args
4
+ }
5
+
6
+ getArgs() {
7
+ return this._args
8
+ }
9
+
10
+ getIdSeq() {
11
+ return this.idSeq
12
+ }
13
+
14
+ setIdSeq(id) {
15
+ this.idSeq = id
16
+ }
17
+ }
@@ -0,0 +1,5 @@
1
+ import Mysql from "../drivers/mysql/index.mjs"
2
+
3
+ export default {
4
+ Mysql
5
+ }
@@ -0,0 +1,12 @@
1
+ // Async function to connect a MySQL connection
2
+ export default function connectConnection(connection) {
3
+ return new Promise((resolve, reject) => {
4
+ connection.connect((error) => {
5
+ if (error) {
6
+ reject(error)
7
+ } else {
8
+ resolve()
9
+ }
10
+ })
11
+ })
12
+ }
@@ -0,0 +1,102 @@
1
+ import Base from "../base.mjs"
2
+ import connectConnection from "./connect-connection.mjs"
3
+ import CreateDatabase from "./sql/create-database.mjs"
4
+ import CreateTable from "./sql/create-table.mjs"
5
+ import Delete from "./sql/delete.mjs"
6
+ import {digg} from "diggerize"
7
+ import Insert from "./sql/insert.mjs"
8
+ import Options from "./options.mjs"
9
+ import mysql from "mysql"
10
+ import query from "./query.mjs"
11
+ import QueryParser from "./query-parser.mjs"
12
+ import Update from "./sql/update.mjs"
13
+
14
+ export default class VelociousDatabaseDriversMysql extends Base{
15
+ async connect() {
16
+ const connection = mysql.createConnection(this.connectArgs())
17
+
18
+ await connectConnection(connection)
19
+ this.connection = connection
20
+ }
21
+
22
+ disconnect() {
23
+ this.connection.end()
24
+ }
25
+
26
+ connectArgs() {
27
+ const args = this.getArgs()
28
+ const connectArgs = []
29
+ const forward = ["database", "host", "password"]
30
+
31
+ for (const forwardValue of forward) {
32
+ if (forwardValue in args) connectArgs[forwardValue] = digg(args, forwardValue)
33
+ }
34
+
35
+ if ("username" in args) connectArgs["user"] = args["username"]
36
+
37
+ return connectArgs
38
+ }
39
+
40
+ async close() {
41
+ await this.connection.end()
42
+ this.connection = undefined
43
+ }
44
+
45
+ createDatabaseSql(databaseName, args) {
46
+ const createArgs = Object.assign({databaseName, driver: this}, args)
47
+ const createDatabase = new CreateDatabase(createArgs)
48
+
49
+ return createDatabase.toSql()
50
+ }
51
+
52
+ createTableSql(tableData) {
53
+ const createArgs = Object.assign({tableData, driver: this})
54
+ const createTable = new CreateTable(createArgs)
55
+
56
+ return createTable.toSql()
57
+ }
58
+
59
+ async query(sql) {
60
+ return await query(this.connection, sql)
61
+ }
62
+
63
+ queryToSql(query) {
64
+ return new QueryParser({query}).toSql()
65
+ }
66
+
67
+ quote(string) {
68
+ if (!this.connection) throw new Error("Can't escape before connected")
69
+
70
+ return this.connection.escape(string)
71
+ }
72
+
73
+ quoteColumn(string) {
74
+ return `\`${string}\``
75
+ }
76
+
77
+ deleteSql({tableName, conditions}) {
78
+ const deleteInstruction = new Delete({conditions, driver: this, tableName})
79
+
80
+ return deleteInstruction.toSql()
81
+ }
82
+
83
+ insertSql({tableName, data}) {
84
+ const insert = new Insert({driver: this, tableName, data})
85
+
86
+ return insert.toSql()
87
+ }
88
+
89
+ options() {
90
+ if (!this._options) {
91
+ this._options = new Options({driver: this})
92
+ }
93
+
94
+ return this._options
95
+ }
96
+
97
+ updateSql({conditions, data, tableName}) {
98
+ const update = new Update({conditions, data, driver: this, tableName})
99
+
100
+ return update.toSql()
101
+ }
102
+ }
@@ -0,0 +1,17 @@
1
+ import QueryParserOptions from "../../query-parser/options.mjs"
2
+
3
+ export default class VelociousDatabaseDriversMysqlOptions extends QueryParserOptions {
4
+ constructor(options) {
5
+ options.columnQuote = "`"
6
+ options.stringQuote = "'"
7
+ options.tableQuote = "`"
8
+
9
+ super(options)
10
+ }
11
+
12
+ quote(string) {
13
+ if (!this.driver) throw new Error("Driver not set")
14
+
15
+ return this.driver.quote(string)
16
+ }
17
+ }
@@ -0,0 +1,25 @@
1
+ import {digs} from "diggerize"
2
+ import FromParser from "../../query-parser/from-parser.mjs"
3
+ import JoinsParser from "../../query-parser/joins-parser.mjs"
4
+ import SelectParser from "../../query-parser/select-parser.mjs"
5
+
6
+ export default class VelociousDatabaseConnectionDriversMysqlQueryParser {
7
+ constructor({pretty, query}) {
8
+ if (!query) throw new Error("No query given")
9
+
10
+ this.pretty = pretty
11
+ this.query = query
12
+ }
13
+
14
+ toSql() {
15
+ const {pretty, query} = digs(this, "pretty", "query")
16
+
17
+ let sql = ""
18
+
19
+ sql += new SelectParser({pretty, query}).toSql()
20
+ sql += new FromParser({pretty, query}).toSql()
21
+ sql += new JoinsParser({pretty, query}).toSql()
22
+
23
+ return sql
24
+ }
25
+ }
@@ -0,0 +1,26 @@
1
+ export default async function query(connection, sql) {
2
+ return new Promise((resolve, reject) => {
3
+ connection.query(sql, (error, results, fields) => {
4
+ if (error) {
5
+ reject(error)
6
+ } else {
7
+ const rows = []
8
+
9
+ for (const resultIndex in results) {
10
+ const result = {}
11
+
12
+ for (const fieldKey in fields) {
13
+ const field = fields[fieldKey].name
14
+ const value = results[resultIndex][field]
15
+
16
+ result[field] = value
17
+ }
18
+
19
+ rows.push(result)
20
+ }
21
+
22
+ resolve(rows)
23
+ }
24
+ })
25
+ })
26
+ }
@@ -0,0 +1,4 @@
1
+ import CreateDatabaseBase from "../../../query/create-database-base.mjs"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMysqlSqlCreateDatabase extends CreateDatabaseBase {
4
+ }
@@ -0,0 +1,4 @@
1
+ import CreateTableBase from "../../../query/create-table-base.mjs"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMysqlSqlCreateTable extends CreateTableBase {
4
+ }
@@ -0,0 +1,19 @@
1
+ import DeleteBase from "../../../query/delete-base.mjs"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMysqlSqlDelete extends DeleteBase {
4
+ toSql() {
5
+ let sql = `DELETE FROM ${this.getOptions().quoteTableName(this.tableName)} WHERE `
6
+ let count = 0
7
+
8
+ for (let columnName in this.conditions) {
9
+ if (count > 0) sql += " AND "
10
+
11
+ sql += this.getOptions().quoteColumnName(columnName)
12
+ sql += " = "
13
+ sql += this.getOptions().quote(this.conditions[columnName])
14
+ count++
15
+ }
16
+
17
+ return sql
18
+ }
19
+ }
@@ -0,0 +1,29 @@
1
+ import InsertBase from "../../../query/insert-base.mjs"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMysqlSqlInsert extends InsertBase {
4
+ toSql() {
5
+ let sql = `INSERT INTO ${this.getOptions().quoteTableName(this.tableName)} (`
6
+ let count = 0
7
+
8
+ for (let columnName in this.data) {
9
+ if (count > 0) sql += ", "
10
+
11
+ sql += this.getOptions().quoteColumnName(columnName)
12
+ count++
13
+ }
14
+
15
+ sql += ") VALUES ("
16
+ count = 0
17
+
18
+ for (let columnName in this.data) {
19
+ if (count > 0) sql += ", "
20
+
21
+ sql += this.getOptions().quote(this.data[columnName])
22
+ count++
23
+ }
24
+
25
+ sql += ")"
26
+
27
+ return sql
28
+ }
29
+ }
@@ -0,0 +1,31 @@
1
+ import UpdateBase from "../../../query/update-base.mjs"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMysqlSqlUpdate extends UpdateBase {
4
+ toSql() {
5
+ let sql = `UPDATE ${this.getOptions().quoteTableName(this.tableName)} SET `
6
+ let count = 0
7
+
8
+ for (let columnName in this.data) {
9
+ if (count > 0) sql += ", "
10
+
11
+ sql += this.getOptions().quoteColumnName(columnName)
12
+ sql += " = "
13
+ sql += this.getOptions().quote(this.data[columnName])
14
+ count++
15
+ }
16
+
17
+ sql += " WHERE "
18
+ count = 0
19
+
20
+ for (let columnName in this.conditions) {
21
+ if (count > 0) sql += " AND "
22
+
23
+ sql += this.getOptions().quoteColumnName(columnName)
24
+ sql += " = "
25
+ sql += this.getOptions().quote(this.conditions[columnName])
26
+ count++
27
+ }
28
+
29
+ return sql
30
+ }
31
+ }
@@ -0,0 +1,17 @@
1
+ import QueryParserOptions from "../../query-parser/options.mjs"
2
+
3
+ export default class VelociousDatabaseDriversMysqlOptions extends QueryParserOptions {
4
+ constructor(options) {
5
+ options.columnQuote = "`"
6
+ options.stringQuote = "'"
7
+ options.tableQuote = "`"
8
+
9
+ super(options)
10
+ }
11
+
12
+ quote(string) {
13
+ if (!this.driver) throw new Error("Driver not set")
14
+
15
+ return this.driver.quote(string)
16
+ }
17
+ }
@@ -0,0 +1,25 @@
1
+ import {digs} from "diggerize"
2
+ import FromParser from "../../query-parser/from-parser.mjs"
3
+ import JoinsParser from "../../query-parser/joins-parser.mjs"
4
+ import SelectParser from "../../query-parser/select-parser.mjs"
5
+
6
+ export default class VelociousDatabaseConnectionDriversMysqlQueryParser {
7
+ constructor({pretty, query}) {
8
+ if (!query) throw new Error("No query given")
9
+
10
+ this.pretty = pretty
11
+ this.query = query
12
+ }
13
+
14
+ toSql() {
15
+ const {pretty, query} = digs(this, "pretty", "query")
16
+
17
+ let sql = ""
18
+
19
+ sql += new SelectParser({pretty, query}).toSql()
20
+ sql += new FromParser({pretty, query}).toSql()
21
+ sql += new JoinsParser({pretty, query}).toSql()
22
+
23
+ return sql
24
+ }
25
+ }
@@ -0,0 +1,4 @@
1
+ import CreateDatabaseBase from "../../../query/create-database-base.mjs"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMysqlSqlCreateDatabase extends CreateDatabaseBase {
4
+ }
@@ -0,0 +1,4 @@
1
+ import CreateTableBase from "../../../query/create-table-base.mjs"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMysqlSqlCreateTable extends CreateTableBase {
4
+ }
@@ -0,0 +1,19 @@
1
+ import DeleteBase from "../../../query/delete-base.mjs"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMysqlSqlDelete extends DeleteBase {
4
+ toSql() {
5
+ let sql = `DELETE FROM ${this.getOptions().quoteTableName(this.tableName)} WHERE `
6
+ let count = 0
7
+
8
+ for (let columnName in this.conditions) {
9
+ if (count > 0) sql += " AND "
10
+
11
+ sql += this.getOptions().quoteColumnName(columnName)
12
+ sql += " = "
13
+ sql += this.getOptions().quote(this.conditions[columnName])
14
+ count++
15
+ }
16
+
17
+ return sql
18
+ }
19
+ }
@@ -0,0 +1,29 @@
1
+ import InsertBase from "../../../query/insert-base.mjs"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMysqlSqlInsert extends InsertBase {
4
+ toSql() {
5
+ let sql = `INSERT INTO ${this.getOptions().quoteTableName(this.tableName)} (`
6
+ let count = 0
7
+
8
+ for (let columnName in this.data) {
9
+ if (count > 0) sql += ", "
10
+
11
+ sql += this.getOptions().quoteColumnName(columnName)
12
+ count++
13
+ }
14
+
15
+ sql += ") VALUES ("
16
+ count = 0
17
+
18
+ for (let columnName in this.data) {
19
+ if (count > 0) sql += ", "
20
+
21
+ sql += this.getOptions().quote(this.data[columnName])
22
+ count++
23
+ }
24
+
25
+ sql += ")"
26
+
27
+ return sql
28
+ }
29
+ }
@@ -0,0 +1,31 @@
1
+ import UpdateBase from "../../../query/update-base.mjs"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMysqlSqlUpdate extends UpdateBase {
4
+ toSql() {
5
+ let sql = `UPDATE ${this.getOptions().quoteTableName(this.tableName)} SET `
6
+ let count = 0
7
+
8
+ for (let columnName in this.data) {
9
+ if (count > 0) sql += ", "
10
+
11
+ sql += this.getOptions().quoteColumnName(columnName)
12
+ sql += " = "
13
+ sql += this.getOptions().quote(this.data[columnName])
14
+ count++
15
+ }
16
+
17
+ sql += " WHERE "
18
+ count = 0
19
+
20
+ for (let columnName in this.conditions) {
21
+ if (count > 0) sql += " AND "
22
+
23
+ sql += this.getOptions().quoteColumnName(columnName)
24
+ sql += " = "
25
+ sql += this.getOptions().quote(this.conditions[columnName])
26
+ count++
27
+ }
28
+
29
+ return sql
30
+ }
31
+ }
@@ -0,0 +1,100 @@
1
+ import Base from "../base.mjs"
2
+ import CreateDatabase from "../sqlite/sql/create-database.mjs"
3
+ import CreateTable from "../sqlite/sql/create-table.mjs"
4
+ import Delete from "../sqlite/sql/delete.mjs"
5
+ import {digg} from "diggerize"
6
+ import Insert from "../sqlite/sql/insert.mjs"
7
+ import Options from "../sqlite/options.mjs"
8
+ import query from "./query.mjs"
9
+ import QueryParser from "../sqlite/query-parser.mjs"
10
+ import * as SQLite from "expo-sqlite"
11
+ import Update from "../sqlite/sql/update.mjs"
12
+
13
+ export default class VelociousDatabaseDriversMysql extends Base{
14
+ async connect() {
15
+ const connection = await SQLite.openDatabaseAsync(digg(this.connectArgs(), "name"))
16
+
17
+ this.connection = connection
18
+ }
19
+
20
+ disconnect() {
21
+ this.connection.end()
22
+ }
23
+
24
+ connectArgs() {
25
+ const args = this.getArgs()
26
+ const connectArgs = []
27
+ const forward = ["database", "host", "password"]
28
+
29
+ for (const forwardValue of forward) {
30
+ if (forwardValue in args) connectArgs[forwardValue] = digg(args, forwardValue)
31
+ }
32
+
33
+ if ("username" in args) connectArgs["user"] = args["username"]
34
+
35
+ return connectArgs
36
+ }
37
+
38
+ async close() {
39
+ await this.connection.end()
40
+ this.connection = undefined
41
+ }
42
+
43
+ createDatabaseSql(databaseName, args) {
44
+ const createArgs = Object.assign({databaseName, driver: this}, args)
45
+ const createDatabase = new CreateDatabase(createArgs)
46
+
47
+ return createDatabase.toSql()
48
+ }
49
+
50
+ createTableSql(tableData) {
51
+ const createArgs = Object.assign({tableData, driver: this})
52
+ const createTable = new CreateTable(createArgs)
53
+
54
+ return createTable.toSql()
55
+ }
56
+
57
+ async query(sql) {
58
+ return await query(this.connection, sql)
59
+ }
60
+
61
+ queryToSql(query) {
62
+ return new QueryParser({query}).toSql()
63
+ }
64
+
65
+ quote(string) {
66
+ if (!this.connection) throw new Error("Can't escape before connected")
67
+
68
+ return this.connection.escape(string)
69
+ }
70
+
71
+ quoteColumn(string) {
72
+ return `\`${string}\``
73
+ }
74
+
75
+ deleteSql({tableName, conditions}) {
76
+ const deleteInstruction = new Delete({conditions, driver: this, tableName})
77
+
78
+ return deleteInstruction.toSql()
79
+ }
80
+
81
+ insertSql({tableName, data}) {
82
+ const insert = new Insert({driver: this, tableName, data})
83
+
84
+ return insert.toSql()
85
+ }
86
+
87
+ options() {
88
+ if (!this._options) {
89
+ this._options = new Options({driver: this})
90
+ }
91
+
92
+ return this._options
93
+ }
94
+
95
+ updateSql({conditions, data, tableName}) {
96
+ const update = new Update({conditions, data, driver: this, tableName})
97
+
98
+ return update.toSql()
99
+ }
100
+ }
@@ -0,0 +1,9 @@
1
+ export default async function query(connection, sql) {
2
+ const rows = []
3
+
4
+ for await (const entry of connection.getEachAsync(sql)) {
5
+ rows.push(entry)
6
+ }
7
+
8
+ return rows
9
+ }
@@ -0,0 +1,7 @@
1
+ export default class VelociousDatabaseHandler {
2
+ clone() {
3
+ const newHandler = new VelociousDatabaseHandler()
4
+
5
+ return newHandler
6
+ }
7
+ }
@@ -0,0 +1,15 @@
1
+ import Drivers from "./drivers/index.mjs"
2
+ import Handler from "./handler.mjs"
3
+ import Migration from "./migration/index.mjs"
4
+ import Migrator from "./migrator/index.mjs"
5
+ import Query from "./query/index.mjs"
6
+ import Record from "./record/index.mjs"
7
+
8
+ export default {
9
+ Drivers,
10
+ Handler,
11
+ Migration,
12
+ Migrator,
13
+ Query,
14
+ Record
15
+ }
@@ -0,0 +1,18 @@
1
+ import TableData from "../table-data/index.mjs"
2
+
3
+ export default class VelociousDatabaseMigration {
4
+ constructor({configuration}) {
5
+ this.configuration = configuration
6
+ }
7
+
8
+ async createTable(tableName, callback) {
9
+ const tableData = new TableData(tableName)
10
+
11
+ callback(tableData)
12
+
13
+ const databasePool = this.configuration.databasePool
14
+ const sql = databasePool.createTableSql(tableData)
15
+
16
+ await databasePool.query(sql)
17
+ }
18
+ }
@@ -0,0 +1,15 @@
1
+ export default class VelociousDatabaseMigrator {
2
+ constructor({path}) {
3
+ if (!path) throw new Error("No 'path' given")
4
+
5
+ this.path = path
6
+ }
7
+
8
+ migrateUp() {
9
+ throw new Error("stub")
10
+ }
11
+
12
+ migrateDown() {
13
+ throw new Error("stub")
14
+ }
15
+ }