• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

typeorm / typeorm / 15805338492

22 Jun 2025 09:51AM UTC coverage: 76.344% (-0.07%) from 76.418%
15805338492

push

github

web-flow
fix: add stricter type-checking and improve event loop handling (#11540)

* refactor: minor type improvements

* chore: add type-checked eslint rules

* fix: enable no-misused-promises

* fix: enable no-floating-promises

* fix: enable await-thenable

* fix: enable require-await

* fix: enable no-misused-new

* refactor: enable no-namespace

* refactor: enable tseslint eslint recommended

* code review

9281 of 12872 branches covered (72.1%)

Branch coverage included in aggregate %.

117 of 210 new or added lines in 18 files covered. (55.71%)

19 existing lines in 9 files now uncovered.

18996 of 24167 relevant lines covered (78.6%)

119161.42 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

11.11
/src/driver/nativescript/NativescriptQueryRunner.ts
1
import { ObjectLiteral } from "../../common/ObjectLiteral"
2
import { QueryFailedError } from "../../error/QueryFailedError"
24✔
3
import { QueryRunnerAlreadyReleasedError } from "../../error/QueryRunnerAlreadyReleasedError"
24✔
4
import { QueryResult } from "../../query-runner/QueryResult"
24✔
5
import { Broadcaster } from "../../subscriber/Broadcaster"
24✔
6
import { AbstractSqliteQueryRunner } from "../sqlite-abstract/AbstractSqliteQueryRunner"
24✔
7
import { NativescriptDriver } from "./NativescriptDriver"
8

9
/**
10
 * Runs queries on a single sqlite database connection.
11
 */
12
export class NativescriptQueryRunner extends AbstractSqliteQueryRunner {
24✔
13
    /**
14
     * Database driver used by connection.
15
     */
16
    driver: NativescriptDriver
17

18
    // -------------------------------------------------------------------------
19
    // Constructor
20
    // -------------------------------------------------------------------------
21

22
    constructor(driver: NativescriptDriver) {
23
        super()
×
24
        this.driver = driver
×
25
        this.connection = driver.connection
×
26
        this.broadcaster = new Broadcaster(this)
×
27
    }
28

29
    /**
30
     * Called before migrations are run.
31
     */
32
    async beforeMigration(): Promise<void> {
33
        await this.query(`PRAGMA foreign_keys = OFF`)
×
34
    }
35

36
    /**
37
     * Called after migrations are run.
38
     */
39
    async afterMigration(): Promise<void> {
40
        await this.query(`PRAGMA foreign_keys = ON`)
×
41
    }
42

43
    /**
44
     * Executes a given SQL query.
45
     */
46
    async query(
47
        query: string,
48
        parameters?: any[],
49
        useStructuredResult = false,
×
50
    ): Promise<any> {
51
        if (this.isReleased) {
×
52
            throw new QueryRunnerAlreadyReleasedError()
×
53
        }
54

55
        const connection = this.driver.connection
×
56

57
        const databaseConnection = await this.connect()
×
58

NEW
59
        return new Promise((ok, fail) => {
×
60
            const isInsertQuery = query.substr(0, 11) === "INSERT INTO"
×
61
            connection.logger.logQuery(query, parameters, this)
×
62

63
            const handler = (err: any, raw: any) => {
×
64
                // log slow queries if maxQueryExecution time is set
65
                const maxQueryExecutionTime =
66
                    this.driver.options.maxQueryExecutionTime
×
67
                const queryEndTime = Date.now()
×
68
                const queryExecutionTime = queryEndTime - queryStartTime
×
69

70
                if (
×
71
                    maxQueryExecutionTime &&
×
72
                    queryExecutionTime > maxQueryExecutionTime
73
                ) {
74
                    connection.logger.logQuerySlow(
×
75
                        queryExecutionTime,
76
                        query,
77
                        parameters,
78
                        this,
79
                    )
80
                }
81

82
                if (err) {
×
83
                    connection.logger.logQueryError(
×
84
                        err,
85
                        query,
86
                        parameters,
87
                        this,
88
                    )
89
                    fail(new QueryFailedError(query, parameters, err))
×
90
                }
91

92
                const result = new QueryResult()
×
93
                result.raw = raw
×
94

95
                if (!isInsertQuery && Array.isArray(raw)) {
×
96
                    result.records = raw
×
97
                }
98

99
                if (useStructuredResult) {
×
100
                    ok(result)
×
101
                } else {
102
                    ok(result.raw)
×
103
                }
104
            }
105
            const queryStartTime = Date.now()
×
106

107
            if (isInsertQuery) {
×
108
                databaseConnection.execSQL(query, parameters, handler)
×
109
            } else {
110
                databaseConnection.all(query, parameters, handler)
×
111
            }
112
        })
113
    }
114

115
    // -------------------------------------------------------------------------
116
    // Protected Methods
117
    // -------------------------------------------------------------------------
118

119
    /**
120
     * Parametrizes given object of values. Used to create column=value queries.
121
     */
122
    protected parametrize(
123
        objectLiteral: ObjectLiteral,
124
        startIndex: number = 0,
×
125
    ): string[] {
126
        return Object.keys(objectLiteral).map((key, index) => `"${key}"` + "=?")
×
127
    }
128
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc