





🌟 Special thanks to our amazing supporters:
✨ $10 Tier: [Geeks Love Detail]
🌈 $5 Tier: [Benedikt][David Martínez Martí]
TL;DR
#!csharp
#r "nuget: Microsoft.Data.Sqlite, 7.0.9"
#!csharp
using System.IO;
using Microsoft.Data.Sqlite;
#!csharp
// variable
string database_original_filepath = @"data_output\03-importSQLite\2023_07_08-godisacuvqube.sqlite";
string clean_folderpath = @"data_output\04-clean";
string database_clean_filepath = Path.Join(clean_folderpath, @"godisacuvqube-clean.sqlite");
string sqlite_filepath = @"C:\Program Files\SQLite\sqlite3.exe";
#!csharp
// environment
Directory.CreateDirectory(clean_folderpath);
#!csharp
File.Copy(database_original_filepath, database_clean_filepath);
#!csharp
public void ExecuteSql(string databasePath, string sqlCommand)
{
using (var connection = new SqliteConnection($"Data Source={databasePath}"))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = sqlCommand;
command.ExecuteNonQuery();
}
}
}
public void sql(string sqlCommand)
{
ExecuteSql(database_clean_filepath, sqlCommand);
}
#!csharp
public IEnumerable ExecuteQuery(string databasePath, string sqlCommand)
{
using (var connection = new SqliteConnection($"Data Source={databasePath}"))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = sqlCommand;
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
dynamic row = new ExpandoObject();
var rowDict = (IDictionary)row;
for (int i = 0; i < reader.FieldCount; i++)
{
string columnName = reader.GetName(i);
object columnValue = reader.GetValue(i);
rowDict[columnName] = columnValue;
}
yield return row;
}
}
}
}
}
public IEnumerable ExecuteQuery(string sqlCommand)
{
foreach(var x in ExecuteQuery(database_filepath, sqlCommand))
{
yield return x;
}
}
With the non query "drop table" I get rid of unnecessary data, and with the non query "VACUUM" I reduce the final size of the database.
#!csharp
string query = """
DROP TABLE IF EXISTS `LEVEL_RESULTS-ORIG`;
DROP TABLE IF EXISTS `LEVEL_RESULTS-V00-05_14_03`;
DROP TABLE IF EXISTS `LEVEL_RESULTS_DEV-ORIG`;
DROP TABLE IF EXISTS `LEVEL_FEEDBACKS-V00-05_14_03`;
DROP TABLE IF EXISTS `LEVEL_RESULTS-V00_05_13_00A`;
DROP TABLE IF EXISTS `LEVEL_SOLUTIONS-V00_05_13_00A`;
DROP TABLE IF EXISTS `LEVEL_FEEDBACKS-V00_05_13_00A`;
DROP TABLE IF EXISTS `LEVEL_SOLUTIONS-V00_05_00_11A`;
DROP TABLE IF EXISTS `LEVEL_RESULTS-V00_05_00_11A`;
DROP TABLE IF EXISTS `LEVEL_SOLUTIONS-ORIG`;
DROP TABLE IF EXISTS `LEVEL_SOLUTIONS-V00-05_14_03`;
DROP TABLE IF EXISTS `LEVEL_SOLUTIONS_DEV-ORIG`;
DROP TABLE IF EXISTS `LEVEL_SOLUTIONS_DEV_OLD`;
DROP TABLE IF EXISTS `LEVEL_FEEDBACKS-V00_05_00_11A`;
DROP TABLE IF EXISTS `LEVEL_RESULTS_DEV`;
DROP TABLE IF EXISTS `LEVEL_RESULTS_DEV_OLD`;
DROP TABLE IF EXISTS `CONNECTIONS_DEV`;
DROP TABLE IF EXISTS `LEVEL_FEEDBACKS_DEV`;
DROP TABLE IF EXISTS `LEVEL_SOLUTIONS_DEV`;
DROP TABLE IF EXISTS `CARDS_DEV`;
""";
sql(query);
#!csharp
sql("VACUUM");
Now the database is 57% smaller! This is the final file I am using to do all the stats I need.[ 6081 ]
[ 1481 ]
[ 2067 ]