73 lines
2.7 KiB
C#
73 lines
2.7 KiB
C#
namespace bts.SilverPine {
|
|
using System;
|
|
using System.Data;
|
|
using System.Data.SQLite;
|
|
using System.Diagnostics;
|
|
using System.Collections;
|
|
|
|
|
|
using BCG;
|
|
|
|
[DataStreamUserRespresentation("SQLite")]
|
|
public class SQLiteStream : ViewStream {
|
|
private readonly string _connection_string, _query;
|
|
private Stopwatch _stopwatch = new Stopwatch();
|
|
|
|
private SQLiteStream(string connection_string, string query, bool noop) {
|
|
_connection_string = connection_string;
|
|
_query = query;
|
|
}
|
|
|
|
public SQLiteStream(string db_name, string query)
|
|
:
|
|
this($"Data Source={SQLiteHelper.location}{db_name};Version=3", query, true) { }
|
|
|
|
public SQLiteStream(string query)
|
|
:
|
|
this(SQLiteHelper.db_name, query) {
|
|
}
|
|
|
|
|
|
private void _read_from_sqlite_and_fire() {
|
|
_stopwatch.Start();
|
|
DataTable dt = SQLiteHelper.execute_select_query(_connection_string, _query);
|
|
_stopwatch.Stop();
|
|
Log.Gen.info($"SQLiteStream.ExecuteSelectQuery time to read db: {_stopwatch.ElapsedMilliseconds} msecs");
|
|
_stopwatch.Restart();
|
|
#region perf measures
|
|
// SQLiteHelper.get_table(_connection_string, _query);
|
|
// _stopwatch.Stop();
|
|
// Log.Gen.info($"SQLiteStream.get_table time to read db: {_stopwatch.ElapsedMilliseconds} msecs");
|
|
// _stopwatch.Restart();
|
|
// SQLiteHelper.ExecuteBulkRead(_connection_string, _query);
|
|
// _stopwatch.Stop();
|
|
// Log.Gen.info($"SQLiteStream.ExecuteBulkRead time to read db: {_stopwatch.ElapsedMilliseconds} msecs");
|
|
// _stopwatch.Restart();
|
|
// SQLiteHelper.get_table_2(_connection_string, _query);
|
|
// _stopwatch.Stop();
|
|
// Log.Gen.info($"SQLiteStream.get_table_2 time to read db: {_stopwatch.ElapsedMilliseconds} msecs");
|
|
// _stopwatch.Restart();
|
|
#endregion
|
|
IBlueRowCollection rows = BCG.BlueDataUtility.toIBlueRowCollection(dt);
|
|
//IBlueRowCollection rows = new DataTableWrapperTable(dt);
|
|
_stopwatch.Stop();
|
|
Log.Gen.info($"SQLiteStream._read_from_sqlite_and_fire time to load into IBlueRowCollection: {_stopwatch.ElapsedMilliseconds} msecs");
|
|
DataPacket dp = BlueDataUtility.build_dp_inc(rows, myLastValue as DataPacket);
|
|
myFireEvent(dp);
|
|
}
|
|
|
|
protected override void myOnFirstSubscriber() {
|
|
_read_from_sqlite_and_fire();
|
|
}
|
|
|
|
protected override void myOnLastSubscriber() {
|
|
// this value will be cleared by the base class
|
|
// but in this particular stream this behaviour
|
|
// is not usefull since any new subscribers
|
|
// would force the query to be recreated
|
|
//myLastDP = myLastValue;
|
|
}
|
|
|
|
}
|
|
|
|
} |