public virtual DatabaseModel Create(
            [NotNull] string connectionString, [NotNull] TableSelectionSet tableSelectionSet)
        {
            Check.NotEmpty(connectionString, nameof(connectionString));
            Check.NotNull(tableSelectionSet, nameof(tableSelectionSet));

            ResetState();

            using (_connection = new SqliteConnection(connectionString))
            {
                _connection.Open();
                _tableSelectionSet = tableSelectionSet;

                string databaseName = null;
                try
                {
                    databaseName = Path.GetFileNameWithoutExtension(_connection.DataSource);
                }
                catch (ArgumentException)
                {
                    // graceful fallback
                }

                _databaseModel.DatabaseName = !string.IsNullOrEmpty(databaseName) ? databaseName : _connection.DataSource;

                GetSqliteMaster();
                GetColumns();
                GetIndexes();

                foreach (var table in _databaseModel.Tables)
                {
                    SqliteDmlParser.ParseTableDefinition(table, _tableDefinitions[table.Name]);
                }

                GetForeignKeys();
                return(_databaseModel);
            }
        }
 public void It_safely_splits(char sep, string input, string[] results)
 {
     Assert.Equal(results, SqliteDmlParser.SafeSplit(input, sep));
 }
 public void It_unescapes_strings(string input, string result)
 {
     Assert.Equal(result, SqliteDmlParser.UnescapeString(input));
 }
 public void It_extracts_statements(string sql, string[] statements)
 {
     Assert.Equal(statements, SqliteDmlParser.ParseStatements(sql).ToArray());
 }