1 /**
2 DDBC - D DataBase Connector - abstraction layer for RDBMS access, with interface similar to JDBC. 
3 
4 Source file ddbc/package.d
5 
6 DDBC library attempts to provide implementation independent interface to different databases. API is similar to Java JDBC API.
7 http://docs.oracle.com/javase/7/docs/technotes/guides/jdbc/
8 
9 For using DDBC, import this file:
10 
11 
12     import dstruct.ddbc;
13 
14 
15 
16 Supported (built-in) RDBMS drivers: MySQL, PostgreSQL, SQLite
17 
18 Configuration name          Version constants                  Drivers included
19 --------------------------  ---------------------------------- ---------------------------------
20 full                        USE_MYSQL, USE_SQLITE, USE_PGSQL   mysql, sqlite, postgresql, odbc
21 MySQL                       USE_MYSQL                          mysql
22 SQLite                      USE_SQLITE                         sqlite
23 PGSQL                       USE_PGSQL                          postgresql
24 ODBC                        USE_ODBC                           odbc
25 API                         (none)                             (no drivers, API only)
26 
27 
28 When using in DUB based project, add "ddbc" dependency to your project's dub.json:
29 
30 "dependencies": {
31     "ddbc": "~>0.2.35"
32 }
33 
34 Default configuration is "full". You can choose other configuration by specifying subConfiguration for ddbc, e.g.:
35 
36 "subConfigurations": {
37     "ddbc": "SQLite"
38 }
39 
40 
41 If you want to support all DDBC configuration in your project, use configurations section:
42 
43 "configurations": [
44     {
45         "name": "default",
46         "subConfigurations": {
47             "ddbc": "full"
48         }
49     },
50     {
51         "name": "MySQL",
52         "subConfigurations": {
53             "ddbc": "MySQL"
54         }
55     },
56     {
57         "name": "SQLite",
58         "subConfigurations": {
59             "ddbc": "SQLite"
60         }
61     },
62     {
63         "name": "PGSQL",
64         "subConfigurations": {
65             "ddbc": "PGSQL"
66         }
67     },
68     {
69         "name": "API",
70         "subConfigurations": {
71             "ddbc": "API"
72         }
73     },
74 ]
75 
76 
77 DDBC URLs
78 =========
79 
80 For creation of DDBC drivers or data sources, you can use DDBC URL.
81 
82 Common form of DDBC URL: driver://host:port/dbname?param1=value1,param2=value2
83 
84 As well, you can prefix url with "ddbc:"
85     ddbc:driver://host:port/dbname?param1=value1,param2=value2
86 
87 Following helper function may be used to create URL
88 
89     string makeDDBCUrl(string driverName, string host, int port, string dbName, string[string] params = null);
90 
91 
92 For PostgreSQL, use following form of URL:
93 
94     postgresql://host:port/dbname
95 
96 Optionally you can put user name, password, and ssl option as url parameters:
97 
98     postgresql://host:port/dbname?user=username,password=userpassword,ssl=true
99 
100 
101 For MySQL, use following form of URL:
102 
103     mysql://host:port/dbname
104 
105 Optionally you can put user name and password as url parameters:
106 
107     mysql://host:port/dbname?user=username,password=userpassword
108 
109 
110 For SQLite, use following form of URL:
111 
112     sqlite:db_file_path_name
113 
114 Sample urls:
115 
116     string pgsqlurl = "postgresql://localhost:5432/ddbctestdb?user=ddbctest,password=ddbctestpass,ssl=true";
117     string mysqlurl = "mysql://localhost:3306/ddbctestdb?user=ddbctest,password=ddbctestpass";
118     string sqliteurl = "sqlite:testdb.sqlite";
119 
120 
121 Drivers, connections, data sources and connection pools.
122 =======================================================
123 
124 
125 Driver - factory interface for DB connections. This interface implements single method to create connections:
126 
127     Connection connect(string url, string[string] params);
128 
129 DataSource - factory interface for creating connections to specific DB instance, holds enough information to create connection using simple call of getConnection()
130 
131 ConnectionPool - DataSource which implements pool of opened connections to avoid slow connection establishment. It keeps several connections opened in pool.
132 
133 Connection - main object for dealing with DB.
134 
135 
136 Driver may be created using one of factory methods:
137 
138     /// create driver by name, e.g. "mysql", "postgresql", "sqlite"
139     DriverFactory.createDriver(string driverName);
140     /// create driver by url, e.g. "mysql://host:port/db", "postgresql://host:port/db", "sqlite://"
141     DriverFactory.createDriverForURL(string url);
142 
143 
144 There are helper functions to create Connection, DataSource or ConnectionPool from URL and parameters.
145 
146     /// Helper function to create DDBC connection, automatically selecting driver based on URL
147     Connection createConnection(string url, string[string]params = null);
148 
149     /// Helper function to create simple DDBC DataSource, automatically selecting driver based on URL
150     DataSource createDataSource(string url, string[string]params = null);
151 
152     /// Helper function to create connection pool data source, automatically selecting driver based on URL
153     DataSource createConnectionPool(string url, string[string]params = null, int maxPoolSize = 1, int timeToLive = 600, int waitTimeOut = 30);
154 
155 
156 If you are planning to create several connections, consider using DataSource or ConnectionPool.
157 
158 For simple cases, it's enough to create connection directly.
159 
160     Connection conn = createConnection("sqlite:testfile.sqlite");
161 
162 If you need to get / release connection multiple times, it makes sense to use ConnectionPool
163 
164     DataSource ds = createConnectionPool("ddbc:postgresql://localhost:5432/ddbctestdb?user=ddbctest,password=ddbctestpass,ssl=true");
165     // now we can take connection from pool when needed
166     auto conn = ds.getConnection();
167     // and then release it back to pool when no more needed
168     conn.close();
169     // if we call ds.getConnection() one more time, existing connection from pool will be used
170 
171 
172  Copyright: Copyright 2014
173  License:   $(LINK www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
174  Author:   Vadim Lopatin
175 */
176 module dstruct.ddbc;
177 
178 public import dstruct.ddbc.core;
179 public import dstruct.ddbc.common;
180 public import dstruct.ddbc.pods;
181 
182 version( USE_SQLITE )
183 {
184     // register SQLite driver
185     private import dstruct.ddbc.drivers.sqliteddbc;
186 }
187 version( USE_PGSQL )
188 {
189     // register Postgres driver
190     private import dstruct.ddbc.drivers.pgsqlddbc;
191 }