@@ -11,10 +11,39 @@ namespace margelo::nitro::rnnitrosqlite {
1111class HybridNitroSQLiteQueryResult : public HybridNitroSQLiteQueryResultSpec {
1212public:
1313 HybridNitroSQLiteQueryResult () : HybridObject(TAG) {}
14- HybridNitroSQLiteQueryResult (SQLiteExecuteQueryResult&& result) : HybridObject(TAG), _result(std::move(result)) {}
14+ HybridNitroSQLiteQueryResult (SQLiteQueryResults results, std::optional<double > insertId, double rowsAffected,
15+ std::optional<SQLiteQueryTableMetadata> metadata)
16+ : HybridObject(TAG), _insertId(insertId), _rowsAffected(rowsAffected), _results(std::move(results)), _metadata(metadata) {
17+ if (_results.empty ()) {
18+ // Empty rows: empty vector, length 0, item callback always returns null
19+ auto emptyItem = [](double /* idx */ ) -> std::shared_ptr<Promise<std::optional<SQLiteQueryResultRow>>> {
20+ return Promise<std::optional<SQLiteQueryResultRow>>::async ([]() -> std::optional<SQLiteQueryResultRow> { return std::nullopt ; });
21+ };
22+ _rows = NitroSQLiteQueryResultRows (SQLiteQueryResults{}, 0.0 , std::move (emptyItem));
23+ return ;
24+ }
25+
26+ auto rows = _results;
27+ auto itemFunction = [rows](double idx) -> std::shared_ptr<Promise<std::optional<SQLiteQueryResultRow>>> {
28+ return Promise<std::optional<SQLiteQueryResultRow>>::async ([rows, idx]() -> std::optional<SQLiteQueryResultRow> {
29+ const auto index = static_cast <size_t >(idx);
30+ if (index >= rows.size ()) {
31+ return std::nullopt ;
32+ }
33+ return rows[index];
34+ });
35+ };
36+
37+ const auto length = static_cast <double >(rows.size ());
38+ _rows = NitroSQLiteQueryResultRows (std::move (rows), length, std::move (itemFunction));
39+ }
1540
1641private:
17- SQLiteExecuteQueryResult _result;
42+ std::optional<double > _insertId;
43+ double _rowsAffected;
44+ SQLiteQueryResults _results;
45+ std::optional<NitroSQLiteQueryResultRows> _rows;
46+ std::optional<SQLiteQueryTableMetadata> _metadata;
1847
1948public:
2049 // Properties
0 commit comments