Re: How to execute a random postgresql-query.

2021-06-29 Thread someone via Digitalmars-d-learn

On Tuesday, 29 June 2021 at 23:32:21 UTC, SealabJaster wrote:


Not who you were asking but: they just don't work.


Doesn't matter, you're welcome :)


Maybe they don't support Windows for one reason or another.

Maybe their abstraction for whatever reason isn't able to 
handle basic types for the database backend (true story).


Maybe they have weird, non-nonsensical errors, or for some 
reason just can't connect when nothing else is wrong.


And maybe, sometimes they decide to just crash for random 
reasons. e.g. I tried to use the Hunt database library 
recently, and it's dtor would crash because it was missing a 
null check or something.


I would love to see D as a first-class citizen on postgreSQL like 
C ... just dreaming of. My first impressions so far (which I will 
eventually post here) are in the line of: terrific language, 
really-powerful, a joy to code with. So dreaming of seeing it 
integrated to something like postgreSQL is like ... well, 
faaantastic. I can imagine writing very sophisticated 
stored-procedures right within-the-database. Man, a killer 
feature, well-ahead of C.


So I (and likely others) decide to just write our own. In my 
own case I just wanted to run super simple queries with super 
simple results, so made a very tiny wrapper around postgres' C 
library: 
https://github.com/BradleyChatha/dubstats2/blob/master/d/database/source/database.d


What do you think of the possibility of making a coordinated 
effort to tackle a definitive pglib binding to D providing we 
start with very-well defined requirements and not going farther 
than needed to begin with ? I think we could start with x basic 
access, then make something intermediate access (not even 
touching the basic one), then advanced, whatever. I mean, not 
leaving the users of basic access spoiled when we are working a 
few steps higher and making the development mistakes every 
component will bring in. Just thinking.


I used a tool called DStep to automatically convert the headers 
I needed over to D, and with a few manual tweaks, everything 
just worked. No hassle, no random shenanigans, I could actually 
_start the project_ instead of wrestling with 20 different 
libraries.


There's a comment in the top of that file that describes my 
general feelings towards most dub libraries.


Just seen it. When I stop coding for a while (I mean, learning D 
with my test-bed demo -not even a project yet), I use to browse 
the forum more-or-less in random order to take a glimpse of how 
things work (or not) in D-land; and I encountered lots of 
complains like you say for dub libraries and the like, so I 
suppose taking away some very few major-ones they tend to be poor 
quality at the least, not a complain of mine, to be clear, just 
stating what I am seeing.


If you don't stick with the top libraries, you're basically in 
a barren wasteland in terms of "will this shit even work?" and 
"I could've just written my own version in the hours/days it's 
taken me to get this damn thing to do anything".


Top-libraries or else ... crystal-clear.


Re: How to execute a random postgresql-query.

2021-06-29 Thread SealabJaster via Digitalmars-d-learn

On Tuesday, 29 June 2021 at 18:25:52 UTC, someone wrote:
Can you elaborate why you went your own way coding your own 
bindings to pglib instead of using the existing ones ?


Not who you were asking but: they just don't work.

Maybe they don't support Windows for one reason or another.

Maybe their abstraction for whatever reason isn't able to handle 
basic types for the database backend (true story).


Maybe they have weird, non-nonsensical errors, or for some reason 
just can't connect when nothing else is wrong.


And maybe, sometimes they decide to just crash for random 
reasons. e.g. I tried to use the Hunt database library recently, 
and it's dtor would crash because it was missing a null check or 
something.


So I (and likely others) decide to just write our own. In my own 
case I just wanted to run super simple queries with super simple 
results, so made a very tiny wrapper around postgres' C library: 
https://github.com/BradleyChatha/dubstats2/blob/master/d/database/source/database.d


I used a tool called DStep to automatically convert the headers I 
needed over to D, and with a few manual tweaks, everything just 
worked. No hassle, no random shenanigans, I could actually _start 
the project_ instead of wrestling with 20 different libraries.


There's a comment in the top of that file that describes my 
general feelings towards most dub libraries.


If you don't stick with the top libraries, you're basically in a 
barren wasteland in terms of "will this shit even work?" and "I 
could've just written my own version in the hours/days it's taken 
me to get this damn thing to do anything".


Re: How to execute a random postgresql-query.

2021-06-29 Thread someone via Digitalmars-d-learn

On Tuesday, 29 June 2021 at 20:27:15 UTC, Alain De Vos wrote:


Some implementations take all queries full in memory.
But what when i need one record.
And the select result could be huge.


If the result is huge and you just need one record ... ain't you 
coding the query wrong to begin with ?


Select Top 1 ... From ... Where ... blah blah blah


Re: How to execute a random postgresql-query.

2021-06-29 Thread apz28 via Digitalmars-d-learn

On Tuesday, 29 June 2021 at 20:35:07 UTC, Alain De Vos wrote:


Some implementations take all queries full in memory.
But what when i need one record.
And the select result could be huge.

And we don't want swapping for this?


You can try my db package
https://github.com/apz28/dlang/tree/main/source/pham/db
For Postresql, it is in "pham.db.pgdatabase" module. The document 
is a bit lacking but if you open that module and search for 
"executeReader();" for sample usage.
The implementation follow .NET interface and currently it is 
working for both Firebird and Postgresql database engines.
You need to download entire D package: 
https://github.com/apz28/dlang

Happy Codings


Re: How to execute a random postgresql-query.

2021-06-29 Thread Alain De Vos via Digitalmars-d-learn

On Tuesday, 29 June 2021 at 20:27:15 UTC, Alain De Vos wrote:

On Tuesday, 29 June 2021 at 18:25:52 UTC, someone wrote:

On Tuesday, 29 June 2021 at 17:56:54 UTC, neuranuz wrote:

You could also try to find some ready to use bindings to 
PostgreSQL on code.dlang.org.


Can you elaborate why you went your own way coding your own 
bindings to pglib instead of using the existing ones ?


Is there something wrong with the existing ones ?

Do they lack features ?

Are them over-engineered ?

I didn't look at the code of the existing ones yet because I 
am knee-deep learning the language still, but since I will 
eventually need to access postgreSQL from D, your experience 
will help me for sure.


I haven't published my code on code.dlang yet, because it's 
not enough time ;-(


I did see your code; it looks pretty straight-forward, indeed.


Some implementations take all queries full in memory.
But what when i need one record.
And the select result could be huge.

And we don't want swapping for this?




Re: How to execute a random postgresql-query.

2021-06-29 Thread Alain De Vos via Digitalmars-d-learn

On Tuesday, 29 June 2021 at 18:25:52 UTC, someone wrote:

On Tuesday, 29 June 2021 at 17:56:54 UTC, neuranuz wrote:

You could also try to find some ready to use bindings to 
PostgreSQL on code.dlang.org.


Can you elaborate why you went your own way coding your own 
bindings to pglib instead of using the existing ones ?


Is there something wrong with the existing ones ?

Do they lack features ?

Are them over-engineered ?

I didn't look at the code of the existing ones yet because I am 
knee-deep learning the language still, but since I will 
eventually need to access postgreSQL from D, your experience 
will help me for sure.


I haven't published my code on code.dlang yet, because it's 
not enough time ;-(


I did see your code; it looks pretty straight-forward, indeed.


Some implementations take all queries full in memory.
But what when i need one record.
And the select result could be huge.


Re: How to execute a random postgresql-query.

2021-06-29 Thread someone via Digitalmars-d-learn

On Tuesday, 29 June 2021 at 17:56:54 UTC, neuranuz wrote:

You could also try to find some ready to use bindings to 
PostgreSQL on code.dlang.org.


Can you elaborate why you went your own way coding your own 
bindings to pglib instead of using the existing ones ?


Is there something wrong with the existing ones ?

Do they lack features ?

Are them over-engineered ?

I didn't look at the code of the existing ones yet because I am 
knee-deep learning the language still, but since I will 
eventually need to access postgreSQL from D, your experience will 
help me for sure.


I haven't published my code on code.dlang yet, because it's not 
enough time ;-(


I did see your code; it looks pretty straight-forward, indeed.


Re: How to execute a random postgresql-query.

2021-06-29 Thread neuranuz via Digitalmars-d-learn

insert into person (first_name, second_name)
select inp.* from inp
");


The last strings should be:
insert into person (first_name, second_name)
select inp.* from inp
", first_names, last_names);



Re: How to execute a random postgresql-query.

2021-06-29 Thread neuranuz via Digitalmars-d-learn

On Monday, 28 June 2021 at 19:16:40 UTC, Alain De Vos wrote:

How to execute a random postgresql-query ?
With random i mean execute any string as known by postgresql.


void myexecutefunction(string string_to_execute){
// Some code to Execute postgre-sq-string
}

...

void main(){
myexecutefunction("CREATE DATABASE test");
myexecutefunction("CREATE USER test");
...
myexecutefunction("SELECT * FROM testtable");
}


In case of my implentation the usage is:

auto db = new DBPostgreSQL("host=hostname port=5432 
dbname=databasename user=username password=secret");
auto qres = db.query("select first_name, second_name from 
person");

string first_name = qres.get(0, 0, null);
string second_name = qres.get(1, 0, null);

It's pretty simple;-)

There is also second function "queryParamsArray" that helps to 
pass query parameters in safe manner without string concatenation:


string[] first_names = ["John", "Sarah"];
string[] second_names = ["Doe", "Connor"];

db.queryParamsArray("with inp as(
   select
  unnest($1::text[]) first_name,
  unnest($2::text[]) second_name
)
insert into person (first_name, second_name)
select inp.* from inp
");




Re: How to execute a random postgresql-query.

2021-06-29 Thread someone via Digitalmars-d-learn

On Monday, 28 June 2021 at 19:16:40 UTC, Alain De Vos wrote:

How to execute a random postgresql-query ?
With random i mean execute any string as known by postgresql.


void myexecutefunction(string string_to_execute){
// Some code to Execute postgre-sq-string
}

...

void main(){
myexecutefunction("CREATE DATABASE test");
myexecutefunction("CREATE USER test");
...
myexecutefunction("SELECT * FROM testtable");
}


https://code.dlang.org/packages/dpq2


Re: How to execute a random postgresql-query.

2021-06-29 Thread neuranuz via Digitalmars-d-learn

On Monday, 28 June 2021 at 19:16:40 UTC, Alain De Vos wrote:

How to execute a random postgresql-query ?
With random i mean execute any string as known by postgresql.


void myexecutefunction(string string_to_execute){
// Some code to Execute postgre-sq-string
}

...

void main(){
myexecutefunction("CREATE DATABASE test");
myexecutefunction("CREATE USER test");
...
myexecutefunction("SELECT * FROM testtable");
}


Hello! If you want to make it "from scratch", then you basically 
need to install libpq library on your system. Then add some 
function bindings of basic methods of this library like there 
(this is my mode ;-)):

https://github.com/uranuz/webtank/blob/master/src/webtank/db/postgresql/bindings.d
Then you need to link libpq to your project. You could use *dub* 
options for instance to do it.
Establishing connection to database and making queries is 
described there:

https://github.com/uranuz/webtank/blob/master/src/webtank/db/postgresql/database.d
And getting data from result is described there:
https://github.com/uranuz/webtank/blob/master/src/webtank/db/postgresql/query_result.d

You could also try to find some ready to use bindings to 
PostgreSQL on code.dlang.org.
I haven't published my code on code.dlang yet, because it's not 
enough time ;-(


How to execute a random postgresql-query.

2021-06-28 Thread Alain De Vos via Digitalmars-d-learn

How to execute a random postgresql-query ?
With random i mean execute any string as known by postgresql.


void myexecutefunction(string string_to_execute){
// Some code to Execute postgre-sq-string
}

...

void main(){
myexecutefunction("CREATE DATABASE test");
myexecutefunction("CREATE USER test");
...
myexecutefunction("SELECT * FROM testtable");
}