Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .clangd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
CompileFlags:
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shouldn't have been committed

Add:
- -Wall
- -Wextra
- --std=c++20
- -I/Users/aqrln/prisma/react-native-prisma/cpp
- -I/Users/aqrln/prisma/react-native-prisma/engines/ios/QueryEngine.xcframework/ios-arm64/Headers
- -I/Users/aqrln/prisma/react-native-prisma/example/ios/Pods/hermes-engine/destroot/include
- -I/Users/aqrln/prisma/react-native-prisma/example/ios/Pods/Headers/Public
- -I/Users/aqrln/prisma/react-native-prisma/example/ios/Pods/Headers/Private
- -I/Users/aqrln/prisma/react-native-prisma/node_modules/react-native/ReactCommon/callinvoker
2 changes: 1 addition & 1 deletion .versions/engine
Original file line number Diff line number Diff line change
@@ -1 +1 @@
c74f8976aaa3212c16a61537319f9024d0c21e85
11f085a2012c0f4778414c8db2651556ee0ef959
2 changes: 1 addition & 1 deletion .versions/prisma-dev
Original file line number Diff line number Diff line change
@@ -1 +1 @@
6.1.0-dev.17
6.1.0-dev.34
80 changes: 61 additions & 19 deletions cpp/react-native-prisma.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ void install_cxx(jsi::Runtime &rt,
std::string log_level =
params.getProperty(rt, "logLevel").asString(rt).utf8(rt);
bool log_queries = params.getProperty(rt, "logQueries").asBool();
bool enable_tracing = params.getProperty(rt, "enableTracing").asBool();
std::shared_ptr<jsi::Value> js_log_callback =
std::make_shared<jsi::Value>(params.getProperty(rt, "logCallback"));
bool ignore_env_var_errors =
Expand All @@ -63,6 +64,7 @@ void install_cxx(jsi::Runtime &rt,
.base_path = base_path.c_str(),
.log_level = log_level.c_str(),
.log_queries = log_queries,
.enable_tracing = enable_tracing,
.datasource_overrides = datasource_overrides.c_str(),
.env = env.c_str(),
.ignore_env_var_errors = ignore_env_var_errors,
Expand Down Expand Up @@ -98,14 +100,15 @@ void install_cxx(jsi::Runtime &rt,
return jsi::Object::createFromHostObject(rt, engine);
});

auto connect = HOSTFN("connect", 2) {
auto connect = HOSTFN("connect", 3) {
std::shared_ptr<QueryEngineHostObject> queryEngineHostObject =
args[0].asObject(rt).asHostObject<QueryEngineHostObject>(rt);
std::string trace = args[1].asString(rt).utf8(rt);
std::string request_id = args[2].asString(rt).utf8(rt);
char *error_ptr;

int result = prisma_connect(queryEngineHostObject->engine, trace.c_str(),
&error_ptr);
request_id.c_str(), &error_ptr);
if (result != PRISMA_OK) {
std::string error_message(error_ptr);
free(error_ptr);
Expand All @@ -114,15 +117,16 @@ void install_cxx(jsi::Runtime &rt,
return {};
});

auto execute = HOSTFN("execute", 4) {
auto execute = HOSTFN("execute", 5) {
std::shared_ptr<QueryEngineHostObject> queryEngineHostObject =
args[0].asObject(rt).asHostObject<QueryEngineHostObject>(rt);
std::string body = args[1].asString(rt).utf8(rt);
std::string trace = args[2].asString(rt).utf8(rt);
std::string tx_id;
if (count > 3 && args[3].isString()) {
if (args[3].isString()) {
tx_id = args[3].asString(rt).utf8(rt);
}
std::string request_id = args[4].asString(rt).utf8(rt);

auto promise_constructor = rt.global().getPropertyAsFunction(rt, "Promise");

Expand All @@ -131,17 +135,19 @@ void install_cxx(jsi::Runtime &rt,
auto reject = std::make_shared<jsi::Value>(rt, args[1]);

auto task = [&rt, &queryEngineHostObject, body = std::move(body),
trace = std::move(trace), tx_id = std::move(tx_id), resolve,
reject]() {
trace = std::move(trace), tx_id = std::move(tx_id),
request_id = std::move(request_id), resolve, reject]() {
const char *response;
char *error_ptr;

if (!tx_id.empty()) {
response = prisma_query(queryEngineHostObject->engine, body.c_str(),
trace.c_str(), tx_id.c_str(), &error_ptr);
trace.c_str(), tx_id.c_str(),
request_id.c_str(), &error_ptr);
} else {
response = prisma_query(queryEngineHostObject->engine, body.c_str(),
trace.c_str(), nullptr, &error_ptr);
trace.c_str(), nullptr, request_id.c_str(),
&error_ptr);
}

call_invoker->invokeAsync([&rt, response = std::move(response),
Expand Down Expand Up @@ -170,14 +176,16 @@ void install_cxx(jsi::Runtime &rt,
return promise;
});

auto start_transaction = HOSTFN("startTransaction", 3) {
auto start_transaction = HOSTFN("startTransaction", 4) {
std::shared_ptr<QueryEngineHostObject> queryEngineHostObject =
args[0].asObject(rt).asHostObject<QueryEngineHostObject>(rt);
std::string body = args[1].asString(rt).utf8(rt);
std::string trace = args[2].asString(rt).utf8(rt);
std::string request_id = args[3].asString(rt).utf8(rt);

const char *response = prisma_start_transaction(
queryEngineHostObject->engine, body.c_str(), trace.c_str());
const char *response =
prisma_start_transaction(queryEngineHostObject->engine, body.c_str(),
trace.c_str(), request_id.c_str());

if (response == nullptr) {
throw std::runtime_error("prisma engine did not start transaction");
Expand All @@ -186,14 +194,16 @@ void install_cxx(jsi::Runtime &rt,
return jsi::String::createFromUtf8(rt, std::string(response));
});

auto commit_transaction = HOSTFN("commitTransaction", 3) {
auto commit_transaction = HOSTFN("commitTransaction", 4) {
std::shared_ptr<QueryEngineHostObject> queryEngineHostObject =
args[0].asObject(rt).asHostObject<QueryEngineHostObject>(rt);
std::string body = args[1].asString(rt).utf8(rt);
std::string trace = args[2].asString(rt).utf8(rt);
std::string request_id = args[3].asString(rt).utf8(rt);

const char *response = prisma_commit_transaction(
queryEngineHostObject->engine, body.c_str(), trace.c_str());
const char *response =
prisma_commit_transaction(queryEngineHostObject->engine, body.c_str(),
trace.c_str(), request_id.c_str());

if (response == nullptr) {
throw std::runtime_error("prisma engine did not commit transaction");
Expand All @@ -202,14 +212,16 @@ void install_cxx(jsi::Runtime &rt,
return jsi::String::createFromUtf8(rt, std::string(response));
});

auto rollback_transaction = HOSTFN("rollbackTransaction", 3) {
auto rollback_transaction = HOSTFN("rollbackTransaction", 4) {
std::shared_ptr<QueryEngineHostObject> queryEngineHostObject =
args[0].asObject(rt).asHostObject<QueryEngineHostObject>(rt);
std::string body = args[1].asString(rt).utf8(rt);
std::string trace = args[2].asString(rt).utf8(rt);
std::string request_id = args[3].asString(rt).utf8(rt);

const char *response = prisma_rollback_transaction(
queryEngineHostObject->engine, body.c_str(), trace.c_str());
const char *response =
prisma_rollback_transaction(queryEngineHostObject->engine, body.c_str(),
trace.c_str(), request_id.c_str());

if (response == nullptr) {
throw std::runtime_error("prisma engine did not rollback transaction");
Expand All @@ -218,14 +230,16 @@ void install_cxx(jsi::Runtime &rt,
return jsi::String::createFromUtf8(rt, std::string(response));
});

auto disconnect = HOSTFN("disconnect", 2) {
auto disconnect = HOSTFN("disconnect", 3) {
std::shared_ptr<QueryEngineHostObject> queryEngineHostObject =
args[0].asObject(rt).asHostObject<QueryEngineHostObject>(rt);
std::string trace = args[1].asString(rt).utf8(rt);
std::string request_id = args[2].asString(rt).utf8(rt);

engine_map.erase(queryEngineHostObject->id);

int res = prisma_disconnect(queryEngineHostObject->engine, trace.c_str());
int res = prisma_disconnect(queryEngineHostObject->engine, trace.c_str(),
request_id.c_str());

if (res != PRISMA_OK) {
throw std::runtime_error("Could not disconnect from prisma query engine");
Expand All @@ -249,6 +263,33 @@ void install_cxx(jsi::Runtime &rt,
return {};
});

auto trace = HOSTFN("trace", 1) {
std::shared_ptr<QueryEngineHostObject> queryEngineHostObject =
args[0].asObject(rt).asHostObject<QueryEngineHostObject>(rt);
std::string request_id = args[0].asString(rt).utf8(rt);
char *error_ptr;

const char *response = prisma_trace(queryEngineHostObject->engine,
request_id.c_str(), &error_ptr);

if (error_ptr != nullptr) {
auto error_string = std::string(error_ptr);
free(error_ptr);
throw std::runtime_error(error_string);
}

std::string response_string;

if (response != nullptr) {
response_string = std::string(response);
free((void *)response);
} else {
response_string = std::string("{traces:[],logs:[]}");
}

return jsi::String::createFromUtf8(rt, response_string);
});

jsi::Object module = jsi::Object(rt);
module.setProperty(rt, "create", std::move(create));
module.setProperty(rt, "connect", std::move(connect));
Expand All @@ -260,6 +301,7 @@ void install_cxx(jsi::Runtime &rt,
module.setProperty(rt, "disconnect", std::move(disconnect));
module.setProperty(rt, "applyPendingMigrations",
std::move(apply_pending_migrations));
module.setProperty(rt, "trace", std::move(trace));

rt.global().setProperty(rt, "__PrismaProxy", std::move(module));
}
Expand Down
6 changes: 3 additions & 3 deletions example/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -894,7 +894,7 @@ PODS:
- React
- react-native-network-info (5.2.1):
- React
- react-native-prisma (0.2.1):
- react-native-prisma (6.1.0-dev.34):
- glog
- RCT-Folly (= 2022.05.16.00)
- React
Expand Down Expand Up @@ -1284,7 +1284,7 @@ SPEC CHECKSUMS:
React-Mapbuffer: 9ee041e1d7be96da6d76a251f92e72b711c651d6
react-native-http-bridge-refurbished: 88fe66aa55e63807bd8cbaa372c062bc76ed4962
react-native-network-info: d1290ffc0bd0709e11436f5b8d7f605dcc5c4530
react-native-prisma: abb2f1b788c7fde4f056fa7d125fa82e706fa8dd
react-native-prisma: b0f485ff192ca12276dd44adde65a34baf796b86
react-native-quick-base64: 777057ea4286f806b00259ede65dc79c7c706320
React-nativeconfig: d753fbbc8cecc8ae413d615599ac378bbf6999bb
React-NativeModulesApple: 964f4eeab1b4325e8b6a799cf4444c3fd4eb0a9c
Expand Down Expand Up @@ -1312,4 +1312,4 @@ SPEC CHECKSUMS:

PODFILE CHECKSUM: 0485f7e52cf89aa2ec3fcb550f67bb9b58bd9c2b

COCOAPODS: 1.15.2
COCOAPODS: 1.16.2
4 changes: 2 additions & 2 deletions example/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"prisma:generate": "prisma generate"
},
"dependencies": {
"@prisma/client": "6.1.0-dev.17",
"@prisma/client": "6.1.0-dev.34",
"chance": "^1.1.11",
"nativewind": "^4.0.23",
"react": "18.2.0",
Expand All @@ -38,7 +38,7 @@
"detox": "20.20.3",
"jest": "^29",
"pod-install": "0.2.0",
"prisma": "6.1.0-dev.17",
"prisma": "6.1.0-dev.34",
"tailwindcss": "^3.4.0"
},
"engines": {
Expand Down
43 changes: 37 additions & 6 deletions example/src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@ const server = new BridgeServer('http_service', true);
let engine: any;
let logs: string[] = [];

let NEXT_REQUEST_ID = 1n;
const MAX_REQUEST_ID = 2n ** 64n - 1n;

function nextRequestId(): string {
const requestId = NEXT_REQUEST_ID.toString();
NEXT_REQUEST_ID = (NEXT_REQUEST_ID + 1n) % MAX_REQUEST_ID;
return requestId;
}

async function sleep(ms: number): Promise<void> {
return new Promise<void>((resolve) => {
setTimeout(resolve, ms);
Expand All @@ -24,6 +33,7 @@ server.post('/connect', async (req, res) => {
datamodel: schema,
logLevel: 'ERROR',
logQueries: true,
enableTracing: false,
env: {},
ignoreEnvVarErrors: true,
datasourceOverrides: {},
Expand All @@ -32,7 +42,7 @@ server.post('/connect', async (req, res) => {
},
});

__PrismaProxy!.connect(engine, '{}');
__PrismaProxy!.connect(engine, '{}', nextRequestId());

res.send(200, 'application/json', '{}');
});
Expand All @@ -42,7 +52,13 @@ server.post('/query', async (req, res) => {
const body: string = req.postData?.body;
// @ts-expect-error
const txId: string = req.postData?.txId;
const queryRes = await __PrismaProxy!.execute(engine, body, '', txId);
const queryRes = await __PrismaProxy!.execute(
engine,
body,
'',
txId,
nextRequestId()
);
// sleep for a bit to allow for logs to be collected
await sleep(1);
res.send(
Expand All @@ -57,7 +73,12 @@ server.post('/start_transaction', async (req, res) => {
const body: string = req.postData?.body;
// @ts-expect-error
const trace: string = req.postData?.trace;
const queryRes = __PrismaProxy!.startTransaction(engine, body, trace);
const queryRes = __PrismaProxy!.startTransaction(
engine,
body,
trace,
nextRequestId()
);
res.send(200, 'application/text', JSON.stringify(queryRes));
});

Expand All @@ -66,7 +87,12 @@ server.post('/commit_transaction', async (req, res) => {
const txId: string = req.postData?.txId;
// @ts-expect-error
const trace: string = req.postData?.trace;
const queryRes = __PrismaProxy!.commitTransaction(engine, txId, trace);
const queryRes = __PrismaProxy!.commitTransaction(
engine,
txId,
trace,
nextRequestId()
);
res.send(200, 'application/text', JSON.stringify(queryRes));
});

Expand All @@ -75,7 +101,12 @@ server.post('/rollback_transaction', async (req, res) => {
const txId: string = req.postData?.txId;
// @ts-expect-error
const trace: string = req.postData?.trace;
const queryRes = __PrismaProxy!.rollbackTransaction(engine, txId, trace);
const queryRes = __PrismaProxy!.rollbackTransaction(
engine,
txId,
trace,
nextRequestId()
);
res.send(200, 'application/text', JSON.stringify(queryRes));
});

Expand All @@ -86,7 +117,7 @@ server.post('/disconnect', async (req, res) => {
}
// @ts-expect-error
const trace: string = req.postData?.trace;
__PrismaProxy!.disconnect(engine, trace);
__PrismaProxy!.disconnect(engine, trace, nextRequestId());
engine = null;
res.send(200, 'application/text', '');
});
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@prisma/react-native",
"version": "6.1.0-dev.17",
"version": "6.1.0-dev.34",
"description": "Prisma for react-native",
"main": "lib/commonjs/index",
"module": "lib/module/index",
Expand Down Expand Up @@ -68,7 +68,7 @@
},
"devDependencies": {
"@evilmartians/lefthook": "^1.5.0",
"@prisma/client": "6.1.0-dev.17",
"@prisma/client": "6.1.0-dev.34",
"@react-native/eslint-config": "^0.72.2",
"@tsconfig/react-native": "^3.0.5",
"@types/jest": "^28.1.2",
Expand All @@ -85,7 +85,7 @@
"p-retry": "^6.2.0",
"pod-install": "0.2.0",
"prettier": "^2.0.5",
"prisma": "6.1.0-dev.17",
"prisma": "6.1.0-dev.34",
"react": "18.2.0",
"react-native": "0.73.2",
"react-native-builder-bob": "0.23.2",
Expand Down
Loading
Loading