Skip to content

Commit

Permalink
Working on MVC
Browse files Browse the repository at this point in the history
  • Loading branch information
UIMSolutions committed Nov 14, 2024
1 parent cd084c8 commit d134e2e
Show file tree
Hide file tree
Showing 11 changed files with 279 additions and 28 deletions.
79 changes: 57 additions & 22 deletions databases/uim/databases/classes/drivers/driver.d
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
/****************************************************************************************************************
* Copyright: © 2017-2024 Ozan Nurettin Süel (aka UIManufaktur) *
* License: Subject to the terms of the Apache 2.0 license, as written in the included LICENSE.txt file. *
* Authors: Ozan Nurettin Süel (aka UIManufaktur) *
*****************************************************************************************************************/
module uim.databases.classes.drivers.driver;

import uim.databases;
Expand All @@ -12,31 +17,61 @@ class DDriver : UIMObject, IDriver {
return this;
}

// String used to start a database identifier quoting to make it safe
string startQuote() {
return null;
}
// #region startQuote
// String used to start a database identifier quoting to make it safe
protected string _startQuote;
string startQuote() {
return _startQuote;
}

IDriver startQuote(string quote) {
return this;
}
IDriver startQuote(string quote) {
_startQuote = quote;
return this;
}
// #endregion startQuote

// String used to end a database identifier quoting to make it safe
string endQuote() {
return null;
}
// #region endQuote
// String used to end a database identifier quoting to make it safe
protected string _endQuote;
string endQuote() {
return _endQuote;
}

IDriver endQuote(string quote) {
return this;
}
IDriver endQuote(string quote) {
_endQuote = quote;
return this;
}
// #endregion endQuote

// Returns correct connection resource or object that is internally used.
IConnection connection() {
return null;
}
// #region connection
// Returns correct connection resource or object that is internally used.
IDatabaseConnection connection() {
return null;
}

// Set the internal connection object.
IDriver connection(IConnection connection) {
return this;
// Set the internal connection object.
IDriver connection(IDatabaseConnection connection) {
return this;
}
// #endregion connection

// true if it is valid to use this driver
bool enabled() {
return false;
}
}

// #region SQL
string sqlReleaseSavePoint(string name) {
// SQLServer has no release save point operation.
return null;
}

string sqlDisableForeignKey() {
return null;
}

string sqlEnableForeignKey() {
return null;
}
// #endregion SQL
}
23 changes: 22 additions & 1 deletion databases/uim/databases/classes/drivers/mysql.d
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
/****************************************************************************************************************
* Copyright: © 2017-2024 Ozan Nurettin Süel (aka UIManufaktur) *
* License: Subject to the terms of the Apache 2.0 license, as written in the included LICENSE.txt file. *
* Authors: Ozan Nurettin Süel (aka UIManufaktur) *
*****************************************************************************************************************/
module uim.databases.classes.drivers.mysql;

import uim.databases;
Expand Down Expand Up @@ -29,13 +34,29 @@ class DMysqlDriver : DDriver {
.merge("port", "3306")
.merge("flags", Json.emptyArray)
.merge("encoding", "utf8mb4")
.merge("timezone", null)
.merge("timezone", Json(null))
.merge("init", Json.emptyArray);

startQuote("`");
endQuote("`");

return true;
}

// #region SQL
// Get the SQL for disabling foreign keys.
override string sqlDisableForeignKey() {
return "SET foreign_key_checks = 0";
}

override string sqlEnableForeignKey() {
return "SET foreign_key_checks = 1";
}
// #endregion SQL
}

mixin(DriverCalls!("Mysql"));

unittest {
assert(MysqlDriver);
}
9 changes: 8 additions & 1 deletion databases/uim/databases/classes/drivers/package.d
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
module uim.databases.classes.drivers;

public {
public { // Main
import uim.databases.classes.drivers.driver;
}

public { // Sub
import uim.databases.classes.drivers.mysql;
import uim.databases.classes.drivers.postgres;
import uim.databases.classes.drivers.sqlite;
import uim.databases.classes.drivers.sqlserver;
}
54 changes: 54 additions & 0 deletions databases/uim/databases/classes/drivers/postgres.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
module uim.databases.classes.drivers.postgres;

import uim.databases;

@safe:
class DPostgresDriver : DDriver {
mixin(DriverThis!("Postgres"));

// #region consts
protected const MAX_ALIAS_LENGTH = 63;
// #endregion consts

override bool initialize(Json[string] initData = null) {
if (!super.initialize(initData)) {
return false;
}

configuration
.setDefault("persistent", true)
.setDefault("host", "localhost")
.setDefault("username", "root")
.setDefault("password", "")
.setDefault("database", "uim")
.setDefault("schema", "public")
.setDefault("port", 5432)
.setDefault("encoding", "utf8")
.setDefault("timezone", Json(null))
.setDefault("flags", Json.emptyArray)
.setDefault("init", Json.emptyArray);

// String used to start a database identifier quoting to make it safe
startQuote("\"");
endQuote("\"");

return true;
}

// #region SQL
// Get the SQL for disabling foreign keys.
override string sqlDisableForeignKey() {
return "SET CONSTRAINTS ALL DEFERRED";
}

override string sqlEnableForeignKey() {
return "SET CONSTRAINTS ALL IMMEDIATE";
}
// #endregion SQL

}
mixin(DriverCalls!("Postgres"));

unittest {
assert(PostgresDriver);
}
54 changes: 54 additions & 0 deletions databases/uim/databases/classes/drivers/sqlite.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/****************************************************************************************************************
* Copyright: © 2017-2024 Ozan Nurettin Süel (aka UIManufaktur) *
* License: Subject to the terms of the Apache 2.0 license, as written in the included LICENSE.txt file. *
* Authors: Ozan Nurettin Süel (aka UIManufaktur) *
*****************************************************************************************************************/
module uim.databases.classes.drivers.sqlite;

import uim.databases;

@safe:

class DSqliteDriver : DDriver {
mixin(DriverThis!("Sqlite"));

override bool initialize(Json[string] initData = null) {
if (!super.initialize(initData)) {
return false;
}

// `mask` The mask used for created database
configuration
.merge("persistent", false.toJson)
.merge("username", "".toJson)
.merge("password", "".toJson)
.merge("database", Json(": memory:"))
.merge("encoding", Json("utf8"),)
.merge("mask", Json(/*0*/644))
.merge("cache", Json(null))
.merge("mode", Json(null))
.merge("flags", Json.emptyArray)
.merge("init", Json.emptyArray);

startQuote("\"");
endQuote("\"");

return true;
}

// #region foreignKeySQL
// Get the SQL for disabling foreign keys.
override string sqlDisableForeignKey() {
return "PRAGMA foreign_keys = OFF";
}

override string sqlEnableForeignKey() {
return "PRAGMA foreign_keys = ON";
}
// #endregion foreignKeySQL
}
mixin(DriverCalls!("Sqlite"));

unittest {
assert(SqliteDriver);
}
65 changes: 65 additions & 0 deletions databases/uim/databases/classes/drivers/sqlserver.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/****************************************************************************************************************
* Copyright: © 2017-2024 Ozan Nurettin Süel (aka UIManufaktur) *
* License: Subject to the terms of the Apache 2.0 license, as written in the included LICENSE.txt file. *
* Authors: Ozan Nurettin Süel (aka UIManufaktur) *
*****************************************************************************************************************/
module uim.databases.classes.drivers.sqlserver;

import uim.databases;

@safe:
class DSqlserverDriver : DDriver {
mixin(DriverThis!("Sqlserver"));

override bool initialize(Json[string] initData = null) {
if (!super.initialize(initData)) {
return false;
}

configuration
.merge("host", "localhost\\SQLEXPRESS")
.merge("username", "")
.merge("password", "")
.merge("database", "uim")
.merge("port", "") // PDO.SQLSRV_ENCODING_UTF8
.merge("encoding", 65_001)
.merge(
["flags", "init", "settings", "attributes"], Json.emptyArray
)
.merge(
[
"app", "connectionPooling", "failoverPartner", "loginTimeout",
"multiSubnetFailover", "encrypt", "trustServerCertificate"
],
Json(null));

startQuote("[");
endQuote("]");

return true;
}

protected const MAX_ALIAS_LENGTH = 128;

string sqlRollbackSavePoint(string name) {
return "ROLLBACK TRANSACTION t" ~ name;
}

override string sqlDisableForeignKey() {
return "EXEC sp_MSforeachtable \"ALTER TABLE ? NOCHECK CONSTRAINT all\"";
}

override string sqlEnableForeignKey() {
return "EXEC sp_MSforeachtable \"ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all\"";
}

string sqlSavePoint(string name) {
return "SAVE TRANSACTION t" ~ name;
}
}

mixin(DriverCalls!("Sqlserver"));

unittest {
assert(SqlserverDriver);
}
10 changes: 8 additions & 2 deletions databases/uim/databases/interfaces/driver.d
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,15 @@ interface IDriver {
IDriver endQuote(string quote);

// Returns correct connection resource or object that is internally used.
IConnection connection();
IDatabaseConnection connection();

// Set the internal connection object.
IDriver connection(IConnection connection);
IDriver connection(IDatabaseConnection connection);

// true if it is valid to use this driver
bool enabled();

string sqlDisableForeignKey();

string sqlEnableForeignKey();
}
4 changes: 3 additions & 1 deletion databases/uim/databases/interfaces/expression.d
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ import uim.databases;

@safe:

interface IExpression {}
interface IExpression {

}
1 change: 1 addition & 0 deletions databases/uim/databases/interfaces/package.d
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ public {
import uim.databases.interfaces.connection;
import uim.databases.interfaces.driver;
import uim.databases.interfaces.expression;
import uim.databases.interfaces.query;
import uim.databases.interfaces.statement;
}
6 changes: 6 additions & 0 deletions databases/uim/databases/interfaces/query.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module uim.databases.interfaces.query;

import uim.databases;

@safe:
interface ISQLQuery {}
2 changes: 1 addition & 1 deletion databases/uim/databases/mixins/query.d
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* License: Subject to the terms of the Apache 2.0 license, as written in the included LICENSE.txt file. *
* Authors: Ozan Nurettin Süel (aka UIManufaktur) *
*****************************************************************************************************************/
module databases.uim.databases.mixins.query;
module uim.databases.mixins.query;

import uim.databases;
@safe:
Expand Down

0 comments on commit d134e2e

Please sign in to comment.