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.
- package/README.md +36 -0
- package/bin/velocious.mjs +8 -0
- package/index.mjs +21 -0
- package/package.json +15 -7
- package/peak_flow.yml +12 -5
- package/spec/cli/commands/db/create-spec.mjs +25 -0
- package/spec/cli/commands/db/migrate-spec.mjs +37 -0
- package/spec/cli/commands/destroy/migration-spec.mjs +15 -0
- package/spec/cli/commands/generate/migration-spec.mjs +18 -0
- package/spec/cli/commands/init-spec.mjs +19 -0
- package/spec/cli/commands/test/test-files-finder-spec.mjs +12 -0
- package/spec/database/connection/drivers/mysql/{query-parser-spec.cjs → query-parser-spec.mjs} +12 -8
- package/spec/database/drivers/mysql/connection-spec.mjs +21 -0
- package/spec/database/record/create-spec.mjs +14 -0
- package/spec/database/record/destroy-spec.mjs +17 -0
- package/spec/database/record/find-spec.mjs +29 -0
- package/spec/database/record/update-spec.mjs +15 -0
- package/spec/dummy/dummy-directory.mjs +11 -0
- package/spec/dummy/index.mjs +63 -0
- package/spec/dummy/src/config/configuration.example.mjs +19 -0
- package/spec/dummy/src/config/configuration.peakflow.mjs +20 -0
- package/spec/dummy/src/{routes.cjs → config/routes.mjs} +3 -2
- package/spec/dummy/src/database/migrations/20230728075328-create-projects.mjs +11 -0
- package/spec/dummy/src/database/migrations/20230728075329-create-tasks.mjs +13 -0
- package/spec/dummy/src/models/task.mjs +4 -0
- package/spec/dummy/src/routes/tasks/controller.mjs +26 -0
- package/spec/http-server/{client-spec.cjs → client-spec.mjs} +7 -10
- package/spec/http-server/{get-spec.cjs → get-spec.mjs} +2 -2
- package/spec/http-server/post-spec.mjs +72 -0
- package/spec/support/jasmine.json +4 -3
- package/src/application.mjs +50 -0
- package/src/cli/base-command.mjs +11 -0
- package/src/cli/commands/db/create.mjs +50 -0
- package/src/cli/commands/db/migrate.mjs +58 -0
- package/src/cli/commands/destroy/migration.mjs +35 -0
- package/src/cli/commands/generate/migration.mjs +36 -0
- package/src/cli/commands/init.mjs +60 -0
- package/src/cli/commands/test/index.mjs +14 -0
- package/src/cli/commands/test/test-files-finder.mjs +99 -0
- package/src/cli/commands/test/test-runner.mjs +19 -0
- package/src/cli/index.mjs +59 -0
- package/src/configuration-resolver.mjs +26 -0
- package/src/configuration.mjs +49 -0
- package/src/{controller.cjs → controller.mjs} +21 -4
- package/src/database/drivers/base.mjs +17 -0
- package/src/database/drivers/index.mjs +5 -0
- package/src/database/drivers/mysql/connect-connection.mjs +12 -0
- package/src/database/drivers/mysql/index.mjs +102 -0
- package/src/database/drivers/mysql/options.mjs +17 -0
- package/src/database/drivers/mysql/query-parser.mjs +25 -0
- package/src/database/drivers/mysql/query.mjs +26 -0
- package/src/database/drivers/mysql/sql/create-database.mjs +4 -0
- package/src/database/drivers/mysql/sql/create-table.mjs +4 -0
- package/src/database/drivers/mysql/sql/delete.mjs +19 -0
- package/src/database/drivers/mysql/sql/insert.mjs +29 -0
- package/src/database/drivers/mysql/sql/update.mjs +31 -0
- package/src/database/drivers/sqlite/options.mjs +17 -0
- package/src/database/drivers/sqlite/query-parser.mjs +25 -0
- package/src/database/drivers/sqlite/sql/create-database.mjs +4 -0
- package/src/database/drivers/sqlite/sql/create-table.mjs +4 -0
- package/src/database/drivers/sqlite/sql/delete.mjs +19 -0
- package/src/database/drivers/sqlite/sql/insert.mjs +29 -0
- package/src/database/drivers/sqlite/sql/update.mjs +31 -0
- package/src/database/drivers/sqlite-expo/index.mjs +100 -0
- package/src/database/drivers/sqlite-expo/query.mjs +9 -0
- package/src/database/handler.mjs +7 -0
- package/src/database/index.mjs +15 -0
- package/src/database/migration/index.mjs +18 -0
- package/src/database/migrator/index.mjs +15 -0
- package/src/database/pool/index.mjs +112 -0
- package/src/database/query/base.mjs +11 -0
- package/src/database/query/create-database-base.mjs +20 -0
- package/src/database/query/create-table-base.mjs +69 -0
- package/src/database/query/delete-base.mjs +9 -0
- package/src/database/query/from-base.mjs +9 -0
- package/src/database/query/from-plain.mjs +10 -0
- package/src/database/query/from-table.mjs +12 -0
- package/src/database/query/index.mjs +144 -0
- package/src/database/query/insert-base.mjs +15 -0
- package/src/database/query/join-base.mjs +9 -0
- package/src/database/query/join-plain.mjs +12 -0
- package/src/database/query/order-base.mjs +9 -0
- package/src/database/query/order-plain.mjs +21 -0
- package/src/database/query/select-base.mjs +9 -0
- package/src/database/query/select-plain.mjs +12 -0
- package/src/database/query/{select-table-and-column.cjs → select-table-and-column.mjs} +4 -4
- package/src/database/query/update-base.mjs +16 -0
- package/src/database/query-parser/{from-parser.cjs → from-parser.mjs} +3 -6
- package/src/database/query-parser/{joins-parser.cjs → joins-parser.mjs} +3 -6
- package/src/database/query-parser/{options.cjs → options.mjs} +13 -2
- package/src/database/query-parser/{select-parser.cjs → select-parser.mjs} +7 -6
- package/src/database/record/index.mjs +187 -0
- package/src/database/record/record-not-found-error.mjs +1 -0
- package/src/database/table-data/index.mjs +83 -0
- package/src/{error-logger.js → error-logger.mjs} +1 -1
- package/src/http-server/client/{index.cjs → index.mjs} +10 -11
- package/src/http-server/client/params-to-object.mjs +68 -0
- package/src/http-server/client/request-buffer/form-data-part.mjs +42 -0
- package/src/http-server/client/request-buffer/header.mjs +7 -0
- package/src/http-server/client/request-buffer/index.mjs +229 -0
- package/src/http-server/client/request-parser.mjs +47 -0
- package/src/http-server/client/{request-runner.cjs → request-runner.mjs} +5 -5
- package/src/http-server/client/request.mjs +15 -0
- package/src/http-server/client/{response.cjs → response.mjs} +1 -1
- package/src/http-server/index.mjs +137 -0
- package/src/http-server/server-client.mjs +47 -0
- package/src/http-server/worker-handler/index.mjs +79 -0
- package/src/http-server/worker-handler/worker-script.mjs +4 -0
- package/src/http-server/worker-handler/worker-thread.mjs +65 -0
- package/src/{logger.cjs → logger.mjs} +2 -2
- package/src/routes/base-route.mjs +34 -0
- package/src/routes/{get-route.cjs → get-route.mjs} +5 -3
- package/src/routes/index.mjs +9 -0
- package/src/routes/{resolver.cjs → resolver.mjs} +17 -9
- package/src/routes/{resource-route.cjs → resource-route.mjs} +9 -5
- package/src/routes/root-route.mjs +6 -0
- package/src/spec/index.mjs +5 -0
- package/src/templates/configuration.mjs +17 -0
- package/src/templates/generate-migration.mjs +11 -0
- package/src/templates/routes.mjs +11 -0
- package/src/utils/file-exists.mjs +13 -0
- package/bin/velocious +0 -14
- package/index.cjs +0 -13
- package/spec/dummy/config/databases.example.json +0 -10
- package/spec/dummy/config/databases.json +0 -0
- package/spec/dummy/config/databases.peakflow.json +0 -11
- package/spec/dummy/index.cjs +0 -40
- package/spec/dummy/src/models/task.cjs +0 -4
- package/spec/dummy/src/routes/tasks/controller.cjs +0 -18
- package/src/application.cjs +0 -36
- package/src/configuration.cjs +0 -14
- package/src/database/connection/drivers/mysql/index.cjs +0 -5
- package/src/database/connection/drivers/mysql/options.cjs +0 -7
- package/src/database/connection/drivers/mysql/query-parser.cjs +0 -26
- package/src/database/connection/index.cjs +0 -2
- package/src/database/handler.cjs +0 -5
- package/src/database/index.cjs +0 -9
- package/src/database/pool/index.cjs +0 -2
- package/src/database/query/from-base.cjs +0 -15
- package/src/database/query/from-plain.cjs +0 -12
- package/src/database/query/from-table.cjs +0 -12
- package/src/database/query/index.cjs +0 -59
- package/src/database/query/join-base.cjs +0 -15
- package/src/database/query/join-plain.cjs +0 -12
- package/src/database/query/select-base.cjs +0 -15
- package/src/database/query/select-plain.cjs +0 -12
- package/src/database/record/index.cjs +0 -5
- package/src/http-server/client/request-parser.cjs +0 -92
- package/src/http-server/client/request.cjs +0 -25
- package/src/http-server/index.cjs +0 -78
- package/src/http-server/worker-handler/index.cjs +0 -78
- package/src/http-server/worker-handler/socket-handler.cjs +0 -35
- package/src/http-server/worker-handler/worker-script.cjs +0 -4
- package/src/http-server/worker-handler/worker-thread.cjs +0 -49
- package/src/routes/base-route.cjs +0 -25
- package/src/routes/index.cjs +0 -9
- package/src/routes/root-route.cjs +0 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import {digg, digs} from "diggerize"
|
|
2
|
+
import ejs from "ejs"
|
|
3
3
|
|
|
4
|
-
|
|
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
|
-
|
|
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,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,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,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,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
|
+
}
|