2 using ByteFX.Data.Common;
\r
4 namespace ByteFX.Data.MySqlClient
\r
9 internal sealed class MySqlInternalConnection
\r
11 MySqlConnectionString settings;
\r
13 DateTime createTime;
\r
14 bool serverVariablesSet;
\r
16 public MySqlInternalConnection( MySqlConnectionString connectString )
\r
18 settings = connectString;
\r
19 serverVariablesSet = false;
\r
23 public MySqlConnectionString Settings
\r
25 get { return settings; }
\r
26 set { settings = value; }
\r
29 internal Driver Driver
\r
31 get { return driver; }
\r
38 public bool IsAlive()
\r
42 CommandResult result = driver.Send( DBCmd.PING, (byte[])null );
\r
43 // we don't care about the result. The fact that it responded is enough
\r
52 public bool IsTooOld()
\r
54 TimeSpan ts = DateTime.Now.Subtract( createTime );
\r
55 if (ts.Seconds > settings.ConnectionLifetime)
\r
61 /// I don't like this setup but can't think of a better way of doing
\r
64 /// <param name="connection"></param>
\r
65 public void SetServerVariables(MySqlConnection connection)
\r
67 if (serverVariablesSet) return;
\r
69 // retrieve the encoding that should be used for character data
\r
70 MySqlCommand cmd = new MySqlCommand("show variables like 'max_allowed_packet'", connection);
\r
73 MySqlDataReader reader = cmd.ExecuteReader();
\r
75 driver.MaxPacketSize = reader.GetInt64( 1 );
\r
80 driver.MaxPacketSize = 1047552;
\r
83 cmd.CommandText = "show variables like 'character_set'";
\r
84 driver.Encoding = System.Text.Encoding.Default;
\r
88 MySqlDataReader reader = cmd.ExecuteReader();
\r
90 driver.Encoding = CharSetMap.GetEncoding( reader.GetString(1) );
\r
95 throw new MySqlException("Failure to initialize connection");
\r
98 serverVariablesSet = true;
\r
101 public void Open()
\r
103 driver = new Driver();
\r
104 driver.Open( settings );
\r
106 createTime = DateTime.Now;
\r
109 public void Close()
\r