/// <summary> /// Writes MySql legacy options and their values to XML text stream. /// Skips options whose values are the same as default values of Phalanger. /// </summary> /// <param name="writer">XML writer.</param> /// <param name="options">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param> /// <param name="writePhpNames">Whether to add "phpName" attribute to option nodes.</param> public static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string> { if (writer == null) { throw new ArgumentNullException("writer"); } if (options == null) { throw new ArgumentNullException("options"); } MySqlLocalConfig local = new MySqlLocalConfig(); MySqlGlobalConfig global = new MySqlGlobalConfig(); PhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames); ow.StartSection("mysql"); // local: ow.WriteOption("mysql.default_port", "Port", 3306, local.Port); ow.WriteOption("mysql.default_host", "Server", null, local.Server); ow.WriteOption("mysql.default_user", "User", null, local.User); ow.WriteOption("mysql.default_password", "Password", null, local.Password); ow.WriteOption("mysql.connect_timeout", "ConnectTimeout", 0, local.ConnectTimeout); ow.WriteOption("mysql.default_command_timeout", "DefaultCommandTimeout", 0, local.DefaultCommandTimeout); // global: ow.WriteOption("mysql.max_links", "MaxConnections", -1, global.MaxConnections); ow.WriteEnd(); }
/// <summary> /// Gets, sets, or restores a value of a legacy configuration option. /// </summary> private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action) { MySqlLocalConfig local = (MySqlLocalConfig)config.GetLibraryConfig(MySqlLibraryDescriptor.Singleton); MySqlLocalConfig @default = DefaultLocal; MySqlGlobalConfig global = Global; switch (option) { // local: case "mysql.connect_timeout": return(PhpIni.GSR(ref local.ConnectTimeout, @default.ConnectTimeout, value, action)); case "mysql.default_port": return(PhpIni.GSR(ref local.Port, @default.Port, value, action)); case "mysql.default_host": return(PhpIni.GSR(ref local.Server, @default.Server, value, action)); case "mysql.default_user": return(PhpIni.GSR(ref local.User, @default.User, value, action)); case "mysql.default_password": return(PhpIni.GSR(ref local.Password, @default.Password, value, action)); case "mysql.default_command_timeout": return(PhpIni.GSR(ref local.DefaultCommandTimeout, @default.DefaultCommandTimeout, value, action)); case "mysql.connection_string": return(PhpIni.GSR(ref local.ConnectionString, null, value, action)); // global: case "mysql.max_links": Debug.Assert(action == IniAction.Get); return(PhpIni.GSR(ref global.MaxConnections, -1, null, action)); case "mysql.max_pool_size": return(PhpIni.GSR(ref global.MaxPoolSize, 100, value, action)); } Debug.Fail("Option '" + option + "' is supported but not implemented."); return(null); }
// GENERICS:<string,string> /// <summary> /// Writes MySql legacy options and their values to XML text stream. /// Skips options whose values are the same as default values of Phalanger. /// </summary> /// <param name="writer">XML writer.</param> /// <param name="options">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param> /// <param name="writePhpNames">Whether to add "phpName" attribute to option nodes.</param> public static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) { if (writer == null) throw new ArgumentNullException("writer"); if (options == null) throw new ArgumentNullException("options"); MySqlLocalConfig local = new MySqlLocalConfig(); MySqlGlobalConfig global = new MySqlGlobalConfig(); PhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames); ow.StartSection("mysql"); // local: ow.WriteOption("mysql.default_port", "Port", 3306, local.Port); ow.WriteOption("mysql.default_host", "Server", null, local.Server); ow.WriteOption("mysql.default_user", "User", null, local.User); ow.WriteOption("mysql.default_password", "Password", null, local.Password); ow.WriteOption("mysql.connect_timeout", "ConnectTimeout", 0, local.ConnectTimeout); ow.WriteOption("mysql.default_command_timeout", "DefaultCommandTimeout", 0, local.DefaultCommandTimeout); // global: ow.WriteOption("mysql.max_links", "MaxConnections", -1, global.MaxConnections); ow.WriteEnd(); }
private static string BuildConnectionString(MySqlLocalConfig local, MySqlGlobalConfig global, string server, string user, string password, ConnectFlags flags) { // connection strings: if (server == null && user == null && password == null && flags == ConnectFlags.None && !string.IsNullOrEmpty(local.ConnectionString)) return local.ConnectionString; // TODO: local.ConnectionStringName // build connection string: string pipe_name = null; int port = -1; if (server != null) ParseServerName(ref server, out port, out pipe_name); else server = local.Server; if (port == -1) port = local.Port; if (user == null) user = local.User; if (password == null) password = local.Password; // build the connection string to be used with MySQL Connector/.NET // see http://dev.mysql.com/doc/refman/5.5/en/connector-net-connection-options.html return PhpMyDbConnection.BuildConnectionString( server, user, password, String.Format("allowzerodatetime=true;allow user variables=true;connect timeout={0};Port={1};SSL Mode={2};Use Compression={3}{4}{5};Max Pool Size={6}", (local.ConnectTimeout > 0) ? local.ConnectTimeout : Int32.MaxValue, port, (flags & ConnectFlags.SSL) != 0 ? "Preferred" : "None", // (since Connector 6.2.1.) ssl mode={None|Preferred|Required|VerifyCA|VerifyFull} // (Jakub) use ssl={true|false} has been deprecated (flags & ConnectFlags.Compress) != 0 ? "true" : "false", // Use Compression={true|false} (pipe_name != null) ? ";Pipe=" + pipe_name : null, // Pipe={...} (flags & ConnectFlags.Interactive) != 0 ? ";Interactive=true" : null, // Interactive={true|false} global.MaxPoolSize // Max Pool Size=100 ) ); }