www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - ddbc with Vibe-d

reply Steve <fakename fakeaddress.com> writes:
Hi,

I'm trying D for the first time and so far I'm really impressed 
with both D and vibe-d.

My test project is an application server and I want to use 
SQLite3 as its database. I understand Vibe.d uses an async model 
under the hood and so my question is are Vibe-d and ddbc 
compatible?

Thanks.
Feb 12 2023
parent reply Steven Schveighoffer <schveiguy gmail.com> writes:
On 2/12/23 6:05 AM, Steve wrote:
 Hi,
 
 I'm trying D for the first time and so far I'm really impressed with 
 both D and vibe-d.
 
 My test project is an application server and I want to use SQLite3 as 
 its database. I understand Vibe.d uses an async model under the hood and 
 so my question is are Vibe-d and ddbc compatible?
 
 Thanks.
Any synchronous calls will just be synchronous. They aren't going to participate in the async i/o that vibe uses. In other words, when you block on a call to sqlite, it will block everything else in your web server until that completes. There are several projects that are built to work with vibe-d sockets. mysql-native is one, and vibe-d-postgresql is another. I don't know if there is an sqlite project that is vibe-specific. But sqlite typically is using files anyway, or maybe even memory, so you aren't waiting on network i/o. -Steve
Feb 12 2023
parent reply Steve <fakename fakeaddress.com> writes:
On Sunday, 12 February 2023 at 15:24:14 UTC, Steven Schveighoffer 
wrote:
 Any synchronous calls will just be synchronous. They aren't 
 going to participate in the async i/o that vibe uses.

 In other words, when you block on a call to sqlite, it will 
 block everything else in your web server until that completes.
Would this be the correct approach to stop it blocking?: ```d auto result = async(&doSqliteStuff, args...).getResult(); ```
Feb 12 2023
parent reply Steven Schveighoffer <schveiguy gmail.com> writes:
On 2/12/23 1:01 PM, Steve wrote:
 On Sunday, 12 February 2023 at 15:24:14 UTC, Steven Schveighoffer wrote:
 Any synchronous calls will just be synchronous. They aren't going to 
 participate in the async i/o that vibe uses.

 In other words, when you block on a call to sqlite, it will block 
 everything else in your web server until that completes.
Would this be the correct approach to stop it blocking?: ```d auto result = async(&doSqliteStuff, args...).getResult(); ```
That might work, depending on args. As documented in the API, if anything in args are mutable references, then it is run as a task, and the same problem still applies (it will use a fiber, and count on the concurrency of vibe's fibers to deal with the asynchronicity). If it is possible, it will run in a worker thread, and then it can execute concurrently. I believe you can do: isWeaklyIsolated!(typeof(args)) to see if it will run in another thread. I admit not having any experience with this function. -Steve
Feb 12 2023
parent reply Steve <fakename fakeaddress.com> writes:
On Sunday, 12 February 2023 at 19:38:47 UTC, Steven Schveighoffer 
wrote:
 That might work, depending on args. As documented in the API, 
 if anything in args are mutable references, then it is run as a 
 task, and the same problem still applies (it will use a fiber, 
 and count on the concurrency of vibe's fibers to deal with the 
 asynchronicity).

 If it is possible, it will run in a worker thread, and then it 
 can execute concurrently.

 I believe you can do:

 isWeaklyIsolated!(typeof(args))

 to see if it will run in another thread.

 I admit not having any experience with this function.

 -Steve
In my case args will just be the body of the HTTPServerRequest which is JSON. How can I get that JSON and pass it to async() in a manner that ensures I get a worker thread?
Feb 12 2023
parent reply Steven Schveighoffer <schveiguy gmail.com> writes:
On 2/12/23 3:29 PM, Steve wrote:

 In my case args will just be the body of the HTTPServerRequest which is 
 JSON. How can I get that JSON and pass it to async() in a manner that 
 ensures I get a worker thread?
I think it needs to be immutable if it's a reference. -Steve
Feb 12 2023
parent Steve <fakename fakeaddress.com> writes:
On Monday, 13 February 2023 at 01:43:38 UTC, Steven Schveighoffer 
wrote:
 I think it needs to be immutable if it's a reference.

 -Steve
I have tested args with isWeaklyIsolated!(typeof(arg)) and it looks like good news 👍️ Thanks for your help, Steve.
Feb 13 2023