public static PageDataReaderAdapter Create(string location) { if (location == null) { throw new ArgumentNullException("location"); } if (location.Contains("://")) { var uri = new Uri(location); switch (uri.Scheme.ToUpperInvariant()) { case "MYSQL": case "MYSQL-TCP": case "MYSQL-MEMORY": case "MYSQL-PIPE": var impl = new MySqlConnectionPageDataReader(UriToMySqlConnectionString(uri)); string[] pathComponents = uri.AbsolutePath.Split('/'); if (pathComponents.Length > 2) { impl.PageName = String.Join("/", pathComponents, 2, pathComponents.Length - 2); } return(new PageDataReaderAdapter(impl)); default: throw new NotImplementedException(String.Format("Unsupported URL scheme {0}", uri.Scheme)); } } else { Stream stream = null; XmlReader xml = null; try { stream = DataFileTools.OpenInputFile(location); xml = XmlReader.Create(stream, new XmlReaderSettings { XmlResolver = null }); return(new PageDataReaderAdapter(new RevisionXmlDumpParser(xml), stream, xml)); } catch { if (xml != null) { xml.Close(); } if (stream != null) { stream.Dispose(); } throw; } } }
public static TableReaderAdapter Create(string location) { if (location == null) { throw new ArgumentNullException("location"); } if (location.Contains("://")) { var uri = new Uri(location); switch (uri.Scheme.ToUpperInvariant()) { case "MYSQL": case "MYSQL-TCP": case "MYSQL-MEMORY": case "MYSQL-PIPE": string[] pathComponents = uri.AbsolutePath.Split('/'); if (pathComponents.Length <= 2) { throw new ArgumentException("Table name is required"); } var impl = new MySqlConnectionTableReader(UriToMySqlConnectionString(uri), String.Join("/", pathComponents, 2, pathComponents.Length - 2)); return(new TableReaderAdapter(impl)); default: throw new NotImplementedException(String.Format("Unsupported URL scheme {0}", uri.Scheme)); } } else { Stream stream = null; CountingStreamReader reader = null; try { stream = DataFileTools.OpenInputFile(location); reader = new CountingStreamReader(location, stream, Encoding.UTF8); return(new TableReaderAdapter(new MySqlDumpParser(reader), stream, reader)); } catch { if (reader != null) { reader.Close(); } if (stream != null) { stream.Dispose(); } throw; } } }