/** * Create a DSN string from a configuration. * * @param array $config * @return string */ protected string getDsn(ApplicationDatabaseConnectionConfig config) { Dictionary <string, string> arguments = new Dictionary <string, string>(); arguments["Server"] = this.buildHostString(config, ","); if (config.database != null) { arguments["Database"] = config.database; } if (config.appname != null) { arguments["APP"] = config.appname; } if (config.username != null) { arguments["User Id"] = config.username; } if (config.password != null) { arguments["Password"] = config.password; } if (config.extra.ContainsKey("readonly") && config.extra["readonly"] is bool && (bool)config.extra["readonly"] == true) { arguments["ApplicationIntent"] = "ReadOnly"; } return(this.buildConnectString(arguments)); }
/** * Parse and prepare the database configuration. * * @param array $config * @param string $name * @return array */ protected ApplicationDatabaseConnectionConfig parseConfig(ApplicationDatabaseConnectionConfig config, string name) { ApplicationDatabaseConnectionConfig newConfig = config; newConfig.prefix = ""; newConfig.name = name; return(newConfig); }
/** * Create a single database connection instance. * * @param array $config * @return \Illuminate\Database\Connection */ protected virtual Connection createSingleConnection(ApplicationDatabaseConnectionConfig config) { Func <object> pdo = () => { return(this.createConnector(config).connect(config)); }; return(this.createConnection(config.driver, pdo, config.database, config.prefix, config)); }
/** * Establish a PDO connection based on the configuration. * * @param array $config * @param string $name * @return \Illuminate\Database\Connection */ public virtual Connection make(ApplicationDatabaseConnectionConfig config1, string name = null) { ApplicationDatabaseConnectionConfig config = this.parseConfig(config1, name); if (config.read != null) { return(this.createReadWriteConnection(config)); } return(this.createSingleConnection(config)); }
/** * Build a host string from the given configuration. * * @param array $config * @param string $separator * @return string */ protected string buildHostString(ApplicationDatabaseConnectionConfig config, string separator) { if (config.port != null) { return(config.host + separator + config.port); } else { return(config.host); } }
/** * Establish a database connection. * * @param array $config * @return \PDO */ public object connect(ApplicationDatabaseConnectionConfig config) { SqlConnection conn = new SqlConnection(this.getDsn(config)); try{ conn.Open(); }catch (Exception e) { Console.WriteLine(e); throw e; } return(conn); }
/** * Get a read / write level configuration. * * @param array $config * @param string $type * @return array */ protected ApplicationDatabaseConnectionMergeableConfig getReadWriteConfig(ApplicationDatabaseConnectionConfig config, string type) { switch (type.ToLower()) { default: case "read": return((ApplicationDatabaseConnectionMergeableConfig)config.read); case "write": return((ApplicationDatabaseConnectionMergeableConfig)config.write); } }
/** * Create a connector instance based on the configuration. * * @param array $config * @return \Illuminate\Database\Connectors\ConnectorInterface * * @throws \InvalidArgumentException */ public ConnectorInterface createConnector(ApplicationDatabaseConnectionConfig config) { if (config.driver == null) { throw new Exception("A driver must be specified."); } switch (config.driver) { case "sqlsrv": return(new SqlServerConnector()); } throw new Exception("Unsupported driver [" + config.driver + "]"); }
/** * Merge a configuration for a read / write connection. * * @param array $config * @param array $merge * @return array */ protected ApplicationDatabaseConnectionConfig mergeReadWriteConfig(ApplicationDatabaseConnectionConfig config, ApplicationDatabaseConnectionMergeableConfig extendConfig) { ApplicationDatabaseConnectionConfig newConfig = config; if (extendConfig.name != null) { newConfig.name = extendConfig.name; } if (extendConfig.appname != null) { newConfig.appname = extendConfig.appname; } if (extendConfig.driver != null) { newConfig.driver = extendConfig.driver; } if (extendConfig.host != null) { newConfig.host = extendConfig.host; } if (extendConfig.port != null) { newConfig.port = extendConfig.port; } if (extendConfig.prefix != null) { newConfig.prefix = extendConfig.prefix; } if (extendConfig.database != null) { newConfig.database = extendConfig.database; } if (extendConfig.username != null) { newConfig.username = extendConfig.username; } if (extendConfig.password != null) { newConfig.password = extendConfig.password; } newConfig.read = null; newConfig.write = null; return(newConfig); }
/** * Get the read configuration for a read / write connection. * * @param array $config * @return array */ protected virtual ApplicationDatabaseConnectionConfig getWriteConfig(ApplicationDatabaseConnectionConfig config) { ApplicationDatabaseConnectionMergeableConfig writeConfig = this.getReadWriteConfig(config, "write"); return(this.mergeReadWriteConfig(config, writeConfig)); }
/** * Create a new PDO instance for reading. * * @param array $config * @return \PDO */ protected virtual object createReadPdo(ApplicationDatabaseConnectionConfig config) { ApplicationDatabaseConnectionConfig readConfig = this.getReadConfig(config); return(this.createConnector(readConfig).connect(readConfig)); }
/** * Create a single database connection instance. * * @param array $config * @return \Illuminate\Database\Connection */ protected virtual Connection createReadWriteConnection(ApplicationDatabaseConnectionConfig config) { Connection connection = this.createSingleConnection(this.getWriteConfig(config)); return(connection.setReadPdo(this.createReadPdo(config))); }
/** * Create a new connection instance. * * @param string $driver * @param \PDO|\Closure $connection * @param string $database * @param string $prefix * @param array $config * @return \Illuminate\Database\Connection * * @throws \InvalidArgumentException */ protected Connection createConnection(string driver, Func <object> connection, string database, string prefix = "", ApplicationDatabaseConnectionConfig config = default(ApplicationDatabaseConnectionConfig)) { switch (driver) { case "sqlsrv": return(new SqlServerConnection(connection, database, prefix, config)); } throw new NotImplementedException("Unsupported driver [" + driver + "]"); }