示例#1
0
        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;
                }
            }
        }
示例#2
0
        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;
                }
            }
        }