Skip to content

Commit 64a8190

Browse files
committed
Merge branch 'main' into chore/update-android-minsdkversion
2 parents 1545e8d + a05dae6 commit 64a8190

8 files changed

+52
-36
lines changed

CHANGELOG.md

+12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# @journeyapps/react-native-quick-sqlite
22

3+
## 2.1.2
4+
5+
### Patch Changes
6+
7+
- a6e21ed: Use powersync-sqlite-core 0.3.6 to fix issue with dangling rows.
8+
9+
## 2.1.1
10+
11+
### Patch Changes
12+
13+
- 9ac4ce7: Result object keys are no longer ordered alphabetically, but rather maintain insertion order. The behaviour now matches other libraries.
14+
315
## 2.1.0
416

517
### Minor Changes

android/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ android {
113113
}
114114

115115
dependencies {
116-
implementation 'co.powersync:powersync-sqlite-core:0.3.0'
116+
implementation 'co.powersync:powersync-sqlite-core:0.3.6'
117117
//noinspection GradleDynamicVersion
118118
implementation 'com.facebook.react:react-android:+'
119119
}

cpp/JSIHelper.cpp

+32-28
Original file line numberDiff line numberDiff line change
@@ -143,40 +143,44 @@ jsi::Value createSequelQueryExecutionResult(jsi::Runtime &rt, SQLiteOPResult sta
143143
// Converting row results into objects
144144
size_t rowCount = results->size();
145145
jsi::Object rows = jsi::Object(rt);
146-
if (rowCount > 0)
146+
if (rowCount > 0 && metadata != NULL)
147147
{
148148
auto array = jsi::Array(rt, rowCount);
149149
for (int i = 0; i < rowCount; i++)
150150
{
151151
jsi::Object rowObject = jsi::Object(rt);
152-
auto row = results->at(i);
153-
for (auto const &entry : row)
152+
auto row = results -> at(i);
153+
// Iterate over metadata to maintain column order
154+
for (const auto &column : *metadata)
154155
{
155-
std::string columnName = entry.first;
156-
QuickValue value = entry.second;
157-
if (value.dataType == TEXT)
156+
std::string columnName = column.columnName;
157+
auto it = row.find(columnName);
158+
if (it != row.end())
158159
{
159-
// using value.textValue (std::string) directly allows jsi::String to use length property of std::string (allowing strings with NULLs in them like SQLite does)
160-
rowObject.setProperty(rt, columnName.c_str(), jsi::String::createFromUtf8(rt, value.textValue));
161-
}
162-
else if (value.dataType == INTEGER)
163-
{
164-
rowObject.setProperty(rt, columnName.c_str(), jsi::Value(value.doubleOrIntValue));
165-
}
166-
else if (value.dataType == DOUBLE)
167-
{
168-
rowObject.setProperty(rt, columnName.c_str(), jsi::Value(value.doubleOrIntValue));
169-
}
170-
else if (value.dataType == ARRAY_BUFFER)
171-
{
172-
jsi::Function array_buffer_ctor = rt.global().getPropertyAsFunction(rt, "ArrayBuffer");
173-
jsi::Object o = array_buffer_ctor.callAsConstructor(rt, (int)value.arrayBufferSize).getObject(rt);
174-
jsi::ArrayBuffer buf = o.getArrayBuffer(rt);
175-
// It's a shame we have to copy here: see https://github.com/facebook/hermes/pull/419 and https://github.com/facebook/hermes/issues/564.
176-
memcpy(buf.data(rt), value.arrayBufferValue.get(), value.arrayBufferSize);
177-
rowObject.setProperty(rt, columnName.c_str(), o);
178-
}
179-
else
160+
QuickValue value = it -> second;
161+
if (value.dataType == TEXT)
162+
{
163+
// using value.textValue (std::string) directly allows jsi::String to use length property of std::string (allowing strings with NULLs in them like SQLite does)
164+
rowObject.setProperty(rt, columnName.c_str(), jsi::String::createFromUtf8(rt, value.textValue));
165+
} else if (value.dataType == INTEGER)
166+
{
167+
rowObject.setProperty(rt, columnName.c_str(), jsi::Value(value.doubleOrIntValue));
168+
} else if (value.dataType == DOUBLE)
169+
{
170+
rowObject.setProperty(rt, columnName.c_str(), jsi::Value(value.doubleOrIntValue));
171+
} else if (value.dataType == ARRAY_BUFFER)
172+
{
173+
jsi::Function array_buffer_ctor = rt.global().getPropertyAsFunction(rt, "ArrayBuffer");
174+
jsi::Object o = array_buffer_ctor.callAsConstructor(rt, (int) value.arrayBufferSize).getObject(rt);
175+
jsi::ArrayBuffer buf = o.getArrayBuffer(rt);
176+
// It's a shame we have to copy here: see https://github.com/facebook/hermes/pull/419 and https://github.com/facebook/hermes/issues/564.
177+
memcpy(buf.data(rt), value.arrayBufferValue.get(), value.arrayBufferSize);
178+
rowObject.setProperty(rt, columnName.c_str(), o);
179+
} else
180+
{
181+
rowObject.setProperty(rt, columnName.c_str(), jsi::Value(nullptr));
182+
}
183+
} else
180184
{
181185
rowObject.setProperty(rt, columnName.c_str(), jsi::Value(nullptr));
182186
}
@@ -194,7 +198,7 @@ jsi::Value createSequelQueryExecutionResult(jsi::Runtime &rt, SQLiteOPResult sta
194198
for (int i = 0; i < column_count; i++) {
195199
auto column = metadata->at(i);
196200
jsi::Object column_object = jsi::Object(rt);
197-
column_object.setProperty(rt, "columnName", jsi::String::createFromUtf8(rt, column.colunmName.c_str()));
201+
column_object.setProperty(rt, "columnName", jsi::String::createFromUtf8(rt, column.columnName.c_str()));
198202
column_object.setProperty(rt, "columnDeclaredType", jsi::String::createFromUtf8(rt, column.columnDeclaredType.c_str()));
199203
column_object.setProperty(rt, "columnIndex", jsi::Value(column.columnIndex));
200204
column_array.setValueAtIndex(rt, i, move(column_object));

cpp/JSIHelper.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ struct SequelBatchOperationResult
9191
*/
9292
struct QuickColumnMetadata
9393
{
94-
string colunmName;
94+
string columnName;
9595
int columnIndex;
9696
string columnDeclaredType;
9797
};

cpp/sqliteExecute.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ sqliteExecuteWithDB(sqlite3 *db, std::string const &query,
139139
const char *tp = sqlite3_column_decltype(statement, i);
140140
column_declared_type = tp != NULL ? tp : "UNKNOWN";
141141
QuickColumnMetadata meta = {
142-
.colunmName = column_name,
142+
.columnName = column_name,
143143
.columnIndex = i,
144144
.columnDeclaredType = column_declared_type,
145145
};

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"registry": "https://registry.npmjs.org/",
55
"access": "public"
66
},
7-
"version": "2.1.0",
7+
"version": "2.1.2",
88
"description": "Fast SQLite for react-native",
99
"main": "lib/commonjs/index",
1010
"module": "lib/module/index",

react-native-quick-sqlite.podspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Pod::Spec.new do |s|
2828

2929
s.dependency "React-callinvoker"
3030
s.dependency "React"
31-
s.dependency "powersync-sqlite-core", "~> 0.3.0"
31+
s.dependency "powersync-sqlite-core", "~> 0.3.6"
3232
if defined?(install_modules_dependencies())
3333
install_modules_dependencies(s)
3434
else

tests/ios/Podfile.lock

+3-3
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ PODS:
5555
- hermes-engine/Pre-built (= 0.73.4)
5656
- hermes-engine/Pre-built (0.73.4)
5757
- libevent (2.1.12)
58-
- powersync-sqlite-core (0.3.0)
58+
- powersync-sqlite-core (0.3.6)
5959
- RCT-Folly (2022.05.16.00):
6060
- boost
6161
- DoubleConversion
@@ -1338,7 +1338,7 @@ SPEC CHECKSUMS:
13381338
glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2
13391339
hermes-engine: b2669ce35fc4ac14f523b307aff8896799829fe2
13401340
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
1341-
powersync-sqlite-core: ad0e70e23bacd858fe2e79032dc4aabdf972d1bd
1341+
powersync-sqlite-core: e6217cc9e89e8803550f1b5bb7fd5b00becc903a
13421342
RCT-Folly: 7169b2b1c44399c76a47b5deaaba715eeeb476c0
13431343
RCTRequired: ab7f915c15569f04a49669e573e6e319a53f9faa
13441344
RCTTypeSafety: 63b97ced7b766865057e7154db0e81ce4ee6cf1e
@@ -1389,4 +1389,4 @@ SPEC CHECKSUMS:
13891389

13901390
PODFILE CHECKSUM: 380495c28956d6f2126a6259a117145b198f247c
13911391

1392-
COCOAPODS: 1.12.1
1392+
COCOAPODS: 1.16.2

0 commit comments

Comments
 (0)