Skip to content

Commit c91bf89

Browse files
committed
Refactory of importSQLFile
- Method exported to its own file
1 parent b799900 commit c91bf89

4 files changed

Lines changed: 67 additions & 49 deletions

File tree

android/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ add_library(
4949
../cpp/JSIHelper.cpp
5050
../cpp/ThreadPool.h
5151
../cpp/ThreadPool.cpp
52+
../cpp/sqlfileloader.h
53+
../cpp/sqlfileloader.cpp
5254
cpp-adapter.cpp
5355
)
5456

cpp/installer.cpp

Lines changed: 1 addition & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "logs.h"
1313
#include "JSIHelper.h"
1414
#include "ThreadPool.h"
15+
#include "sqlfileloader.h"
1516
#include <vector>
1617
#include <iostream>
1718
#include <fstream>
@@ -23,55 +24,6 @@ using namespace facebook;
2324
string docPathStr;
2425
std::shared_ptr<react::CallInvoker> invoker;
2526

26-
/**
27-
* Local function to handle SQL File Import in order to reuse with Sync and Async operations
28-
*/
29-
SequelBatchOperationResult importSQLFile(string dbName, string fileLocation)
30-
{
31-
string line;
32-
ifstream sqFile(fileLocation);
33-
if (sqFile.is_open())
34-
{
35-
try
36-
{
37-
int affectedRows = 0;
38-
int commands = 0;
39-
sequel_execute_literal_update(dbName, "BEGIN EXCLUSIVE TRANSACTION");
40-
while (std::getline(sqFile, line, '\n'))
41-
{
42-
if (!line.empty())
43-
{
44-
SequelLiteralUpdateResult result = sequel_execute_literal_update(dbName, line);
45-
if (result.type == SequelResultError)
46-
{
47-
sequel_execute_literal_update(dbName, "ROLLBACK");
48-
sqFile.close();
49-
return {SequelResultError, result.message, 0, commands};
50-
}
51-
else
52-
{
53-
affectedRows += result.affectedRows;
54-
commands++;
55-
}
56-
}
57-
}
58-
sqFile.close();
59-
sequel_execute_literal_update(dbName, "COMMIT");
60-
return {SequelResultOk, "", affectedRows, commands};
61-
}
62-
catch (...)
63-
{
64-
sqFile.close();
65-
sequel_execute_literal_update(dbName, "ROLLBACK");
66-
return {SequelResultError, "[react-native-quick-sqlite][loadSQLFile] Unexpected error, transaction was rolledback", 0, 0};
67-
}
68-
}
69-
else
70-
{
71-
return {SequelResultError, "[react-native-quick-sqlite][loadSQLFile] Could not open file", 0, 0};
72-
}
73-
}
74-
7527
jsi::Object createError(jsi::Runtime &rt, string message)
7628
{
7729
auto res = jsi::Object(rt);

cpp/sqlfileloader.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/**
2+
* SQL File Loader implementation
3+
*/
4+
#include "sqlfileloader.h"
5+
#include <iostream>
6+
#include <fstream>
7+
8+
using namespace std;
9+
10+
SequelBatchOperationResult importSQLFile(string dbName, string fileLocation)
11+
{
12+
string line;
13+
ifstream sqFile(fileLocation);
14+
if (sqFile.is_open())
15+
{
16+
try
17+
{
18+
int affectedRows = 0;
19+
int commands = 0;
20+
sequel_execute_literal_update(dbName, "BEGIN EXCLUSIVE TRANSACTION");
21+
while (std::getline(sqFile, line, '\n'))
22+
{
23+
if (!line.empty())
24+
{
25+
SequelLiteralUpdateResult result = sequel_execute_literal_update(dbName, line);
26+
if (result.type == SequelResultError)
27+
{
28+
sequel_execute_literal_update(dbName, "ROLLBACK");
29+
sqFile.close();
30+
return {SequelResultError, result.message, 0, commands};
31+
}
32+
else
33+
{
34+
affectedRows += result.affectedRows;
35+
commands++;
36+
}
37+
}
38+
}
39+
sqFile.close();
40+
sequel_execute_literal_update(dbName, "COMMIT");
41+
return {SequelResultOk, "", affectedRows, commands};
42+
}
43+
catch (...)
44+
{
45+
sqFile.close();
46+
sequel_execute_literal_update(dbName, "ROLLBACK");
47+
return {SequelResultError, "[react-native-quick-sqlite][loadSQLFile] Unexpected error, transaction was rolledback", 0, 0};
48+
}
49+
}
50+
else
51+
{
52+
return {SequelResultError, "[react-native-quick-sqlite][loadSQLFile] Could not open file", 0, 0};
53+
}
54+
}

cpp/sqlfileloader.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
2+
/**
3+
* SQL File Loader
4+
* Utilizes the regular sqlite bridge to load an SQLFile inside a transaction
5+
*
6+
*/
7+
8+
#include "JSIHelper.h"
9+
#include "sqliteBridge.h"
10+
SequelBatchOperationResult importSQLFile(std::string dbName, std::string fileLocation);

0 commit comments

Comments
 (0)