Beispiel #1
0
        /// <summary>
        /// Handles the one-time migration of data from the binary file format to SQLite.
        /// </summary>
        public static void Main(string[] args)
        {
            const string databaseLocation = @"C:\git\csharp\hn-reader\data";
            const string dataLocation     = @"C:\git\csharp\hn-reader";

            var dbName = Path.Combine(databaseLocation, "hn-data.sqlite");

            if (File.Exists(dbName))
            {
                throw new InvalidOperationException("Database already exists! " + dbName);
            }

            using (var connection = Connector.ConnectToFile(dbName))
            {
                var command = new SQLiteCommand(Schema.Create, connection);

                command.ExecuteNonQuery();

                VersionTable.Write(1, connection);

                var backfilledFiles = Directory.GetFiles(dataLocation, "*-complete.bin");

                var trackers = new DataTrackers();

                using (var transaction = connection.BeginTransaction())
                {
                    foreach (var backfilledFile in backfilledFiles)
                    {
                        WriteFileIntoDatabase(backfilledFile, connection, trackers);
                        Console.WriteLine("Completed file: " + Path.GetFileName(backfilledFile));
                    }

                    transaction.Commit();
                }

                using (var transaction = connection.BeginTransaction())
                {
                    WriteFileIntoDatabase(Path.Combine(dataLocation, "hn.bin"), connection, trackers);
                    transaction.Commit();
                }

                LastWriteTable.Write(trackers.MaxId, connection);
                DateRangeTable.Write(trackers.MinDate, trackers.MaxDate, connection);
            }
        }
Beispiel #2
0
        private static void WriteFileIntoDatabase(string filename, SQLiteConnection connection, DataTrackers trackers)
        {
            using (var file = File.OpenRead(filename))
                using (var reader = new BinaryReader(file))
                {
                    while (file.Position < file.Length)
                    {
                        var entry = EntryExtensions.Read(reader);

                        trackers.Update(entry);

                        StoryTable.Write(entry, connection);
                    }
                }
        }