public void Save(Boolean SaveArticles = false)
{
String sqlInsertHosts = @"
INSERT INTO Hosts (uri, zoom)
SELECT $uri, 100
WHERE NOT EXISTS (
SELECT *
FROM Hosts
WHERE uri = $uri
);
";
String sqlGetHost = @"
SELECT host_id
FROM Hosts
WHERE uri = $uri
";
String sqlInsertFeeds = @"
INSERT INTO Feeds (
uri,
last_update,
title,
host_id
)
SELECT
$uri,
$last_update,
$title,
$host_id
WHERE NOT EXISTS (
SELECT *
FROM Feeds
WHERE uri = $uri
);
";
String sqlUpdateFeed = @"
UPDATE Feeds
SET last_update = $last_update,
title = $title
WHERE uri = $uri;
";
String sqlGetFeed = @"
SELECT feed_id
FROM Feeds
WHERE uri = $uri
";
if (Host == null)
Host = Location.Host;
if (Title == null)
Title = Location.ToString();
using (SQLiteConnection m_dbConnection = new SQLiteConnection(Repository.ConnectionString))
{
m_dbConnection.Open();
SQLiteTransaction tran = m_dbConnection.BeginTransaction();
try
{
SQLiteCommand command = new SQLiteCommand(sqlInsertHosts, m_dbConnection);
command.Parameters.AddWithValue("$uri", Host);
command.ExecuteNonQuery();
command = new SQLiteCommand(sqlGetHost, m_dbConnection);
command.Parameters.AddWithValue("$uri", Host);
var host_id = command.ExecuteScalar();
command = new SQLiteCommand(sqlInsertFeeds, m_dbConnection);
command.Parameters.AddWithValue("$uri", Location.ToString());
command.Parameters.AddWithValue("$last_update", LastUpdate.ToString("s"));
command.Parameters.AddWithValue("$title", Title);
command.Parameters.AddWithValue("$host_id", host_id);
int inserted = command.ExecuteNonQuery();
if(inserted <= 0)
{
command = new SQLiteCommand(sqlUpdateFeed, m_dbConnection);
command.Parameters.AddWithValue("$uri", Location.ToString());
command.Parameters.AddWithValue("$last_update", LastUpdate.ToString("s"));
command.Parameters.AddWithValue("$title", Title);
command.ExecuteNonQuery();
}
command = new SQLiteCommand(sqlGetFeed, m_dbConnection);
command.Parameters.AddWithValue("$uri", Location.ToString());
Id = (long)command.ExecuteScalar();
tran.Commit();
}
catch (Exception)
{
tran.Rollback();
throw;
}
}
if (SaveArticles)
{
foreach(Model.Article a in Articles)
{
Article dataArt = new Article(a);
dataArt.Save();
}
}
}