1- module std.database.front ;
1+ module std.database.BasicDatabase ;
22import std.experimental.logger ;
33import std.database.exception ;
44import std.datetime ;
@@ -17,19 +17,33 @@ import std.variant;
1717import std.range.primitives ;
1818import std.database.option ;
1919
20- public import std.database.array ;
20+ /**
21+ BasicDatabase: a common and generic front-end for database access
22+
23+ Typically, this interface is impliclity used when import a specific database
24+ driver as shown in this simple example:
25+
26+ ---
27+ import std.database.sqlite;
28+ auto db = createDatabase("file:///testdb");
29+ auto rows = db.connection.query("select name,score from score").rows;
30+ foreach (r; rows) {
31+ writeln(r[0].as!string,",",r[1].as!int);
32+ }
33+ ---
2134
22- /*
23- require a specific minimum version of DMD (2.071)
24- can't use yet because DMD is reporting wrong version
35+ For advanced usage, you can also explicitly instantiate a BasicDatabase
36+ with a driver:
37+ ---
38+ import std.database;
39+ alias DB = BasicDatabase!(MyDriver!MyPolicy, MyPolicy);
40+ ---
2541
26- import std.compiler;
27- static assert(
28- name != "Digital Mars D" ||
29- (version_major == 2 && version_minor == 70));
30- */
42+ */
3143
3244
45+ public import std.database.array ;
46+
3347enum ValueType {
3448 Int,
3549 String,
@@ -53,6 +67,10 @@ enum Feature {
5367
5468alias FeatureArray = Feature[];
5569
70+ /**
71+ A root type for interacting with databases. It's primary purpose is act as
72+ a factory for database connections. This type can be shared across threads.
73+ */
5674struct BasicDatabase (D,P) {
5775 alias Driver = D;
5876 alias Policy = P;
@@ -125,6 +143,9 @@ auto ref driverDatabase() {return data_.database;}
125143 }
126144}
127145
146+ /**
147+ Holds a connection to the database.
148+ */
128149struct BasicConnection (D,P) {
129150 alias Driver = D;
130151 alias Policy = P;
@@ -205,6 +226,9 @@ data_ = Data(&db.data_.refCountedPayload(),uri);
205226
206227}
207228
229+ /**
230+ Manages statement details such as query execution and input binding.
231+ */
208232struct BasicStatement (D,P) {
209233 alias Driver = D;
210234 alias Policy = P;
@@ -314,6 +338,10 @@ struct BasicStatement(D,P) {
314338}
315339
316340
341+ /**
342+ An internal class for result access and iteration. See the RowSet type for range based access
343+ to results
344+ */
317345struct BasicResult (D,P) {
318346 alias Driver = D;
319347 alias Policy = P;
@@ -371,6 +399,9 @@ package:
371399 }
372400}
373401
402+ /**
403+ A range over result column information
404+ */
374405struct BasicColumnSet (D,P) {
375406 alias Driver = D;
376407 alias Policy = P;
@@ -415,6 +446,9 @@ struct BasicColumn(D,P) {
415446}
416447
417448
449+ /**
450+ A input range over the results of a query.
451+ */
418452struct BasicRowSet (D,P) {
419453 alias Driver = D;
420454 alias Policy = P;
@@ -485,6 +519,9 @@ struct BasicRowSet(D,P) {
485519 void popFront () {result_.next();}
486520}
487521
522+ /**
523+ A row accessor for the current row in a RowSet input range.
524+ */
488525struct BasicRow (D,P) {
489526 alias Driver = D;
490527 alias Policy = P;
@@ -524,6 +561,9 @@ struct BasicRow(D,P) {
524561}
525562
526563
564+ /**
565+ A value accessor for an indexed value in the current row in a RowSet input range.
566+ */
527567struct BasicValue (D,P) {
528568 alias Driver = D;
529569 alias Policy = P;
0 commit comments