Как подсчитать поля в запросе к базе данных? - PullRequest
1 голос
/ 15 мая 2019

Я получил две таблицы, присоединился к ним, и теперь я просто хочу сосчитать одну из них

Select(count(myOtherTable.name), from: myTable).join(myOtherTable).on(myTable.name == myOtherTable.someName)

При выполнении запроса я получаю

Операция не может быть завершена,(SwiftKuery: QueryError 2.)

Некоторые идеи, в чем заключается моя ошибка?

1 Ответ

1 голос
/ 16 мая 2019

Я подозреваю, что проблема в том, что вы должны использовать count(myOtherTable.someName).

Ниже приведен пример кода, который демонстрирует, что запрос в вашем вопросе функционирует должным образом на основе полученной из него схемы базы данных.

import Foundation
import Dispatch

import SwiftKueryMySQL
import SwiftKuery

let semaphore = DispatchSemaphore(value: 0)


func handleError(_ error: String) {
    print(error)
    semaphore.signal()
}

class Person : Table {
    let tableName = "infos"
    let name = Column("name", String.self)
}

class Customer : Table {
    let tableName = "customers"
    let name = Column("name", String.self)
    let nickname = Column("nickname", String.self)
}

let mySQLPool = MySQLConnection.createPool(user: "root", database: "playground", poolOptions: ConnectionPoolOptions(initialCapacity: 1, maxCapacity: 10))

let infos = Person()
let customers = Customer()

let insertInfo = Insert(into: infos, rows: [["personone"],["persontwo"],["personthree"]])
let insertCustomer = Insert(into: customers, rows: [["p2","persontwo"]])

let select = Select(count(customers.name), from: infos).join(customers).on(infos.name == customers.nickname)

mySQLPool.getConnection() { connection, error in
    guard let connection = connection else {
        guard let error = error else {
            return handleError("Unable to get connection: Unknown error")
        }
        return handleError("Unable to get connection: \(error.localizedDescription)")
    }

    infos.create(connection: connection) { result in
        guard result.success else {
            guard let error = result.asError else {
                return handleError("Unable to create table: Unknown error")
            }
            return handleError("Unable to create table: \(error.localizedDescription)")
        }

        customers.create(connection: connection) { result in
            guard result.success else {
                guard let error = result.asError else {
                    return handleError("Unable to create second table: Unknown error")
                }
                return handleError("Unable to create table: \(error.localizedDescription)")
            }

            connection.execute(query: insertInfo) { result in
                guard result.success else {
                    guard let error = result.asError else {
                        return handleError("Unable to insert info: Unknown error")
                    }
                    return handleError("Unable to insert info: \(error.localizedDescription)")
                }

                connection.execute(query: insertCustomer) { result in
                    guard result.success else {
                        guard let error = result.asError else {
                            return handleError("Unable to insert customer: Unknown error")
                        }
                        return handleError("Unable to insert customer: \(error.localizedDescription)")
                    }

                    connection.execute(query: select) { result in
                        guard result.success else {
                            guard let error = result.asError else {
                                return handleError("Unable to create table: Unknown error")
                            }
                            return handleError("Unable to create table: \(error.localizedDescription)")
                        }

                        result.asRows() { rows, error in
                            guard let rows = rows else {
                                guard let error = error else {
                                    return handleError("Unable to get rows: Unknown error")
                                }
                                return handleError("Unable to get rows: \(error.localizedDescription)")
                            }

                            for row in rows {
                                print("row: \(row)")
                            }
                            semaphore.signal()
                        }
                    }
                }
            }
        }
    }
}

semaphore.wait()
...