Switched to MariaDB/MySql setup (from SQLite).

This commit is contained in:
Achim D. Brucker 2017-09-03 01:23:12 +01:00
parent 14cf5c4ad6
commit 3b277f4397
14 changed files with 67 additions and 375 deletions

View File

@ -4,14 +4,7 @@ security and privacy related properties of the browser extensions (and Chrome
Apps) offered in the [Chrome Web Store](https://chrome.google.com/webstore/).
# Dependencies
Dependencies are managed by paket, with the exception of
* the SQLite libraries required by the SQLProvider. For Mono,
``configure.sh`` tries to set up everything nicely using a
system-wide installed ``Mono.Data.Sqlite.dll``. If this fails,
please follow the steps documented at the
[SQLProvider website](http://fsprojects.github.io/SQLProvider/core/sqlite.html).
* the ``sqlite3`` binary is used for creating an empty data base used
by the SQL type provider
Dependencies are managed by paket.
# Installation
* On Linux/MacOs using mono:
@ -26,7 +19,6 @@ Dependencies are managed by paket, with the exception of
* On Windows (untested), you need to set up the initial project
manually:
```
type src/resources/scholar-kpi-schema.sql | sqlite3 src/resources/scholar-kpi-schema.sqlite
.paket/paket.bootstrapper.exe
.paket/paket.exe install
````

View File

@ -21,22 +21,3 @@ exit_code=$?
if [ $exit_code -ne 0 ]; then
exit $exit_code
fi
if test "$OS" = "Windows_NT"
then
echo "Please install System.Data.SQLite.dll into packages/SQLProvider/lib."
else
if [ -f /usr/lib/mono/4.5/Mono.Data.Sqlite.dll ];
then
if [ ! -f packages/SQLProvider/lib/Mono.Data.Sqlite.dll ];
then
ln -s /usr/lib/mono/4.5/Mono.Data.Sqlite.dll packages/SQLProvider/lib
fi
else
echo "Please install Mono.Data.Sqlite.dll into packages/SQLProvider/lib."
fi
fi
echo "Creating empty database for type provider."
rm -f src/resources/extensions-schema.sqlite
sqlite3 src/resources/extensions-schema.sqlite < src/resources/extensions-schema.sql

View File

@ -10,8 +10,8 @@ source https://nuget.org/api/v2
nuget FSharp.Core ~> 4.0.0.1 redirects: force
nuget FsLab
nuget Mysql.Data
nuget SQLProvider
nuget System.Data.Sqlite
group Build
source https://nuget.org/api/v2

View File

@ -50,23 +50,6 @@
</Otherwise>
</Choose>
<Import Project="$(FSharpTargetsPath)" Condition="Exists('$(FSharpTargetsPath)')" />
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.5'">
<PropertyGroup>
<__paket__System_Data_SQLite_Core_targets>net45\System.Data.SQLite.Core</__paket__System_Data_SQLite_Core_targets>
</PropertyGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')">
<PropertyGroup>
<__paket__System_Data_SQLite_Core_targets>net451\System.Data.SQLite.Core</__paket__System_Data_SQLite_Core_targets>
</PropertyGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<PropertyGroup>
<__paket__System_Data_SQLite_Core_targets>net46\System.Data.SQLite.Core</__paket__System_Data_SQLite_Core_targets>
</PropertyGroup>
</When>
</Choose>
<Import Project="..\..\.paket\paket.targets" />
<ItemGroup>
<Compile Include="SqlConnector.fs" />
@ -75,14 +58,13 @@
<Content Include="Google.DataTable.Net.Wrapper.XML">
<Paket>True</Paket>
</Content>
<Content Include="App.config" />
<Content Include="app.config" />
</ItemGroup>
<ItemGroup>
<Reference Include="mscorlib" />
<Reference Include="System" />
<Reference Include="System.Core" />/
<Reference Include="System.Numerics" />
</ItemGroup>
<Reference Include="System.Numerics" /></ItemGroup>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
@ -116,25 +98,6 @@
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.ComponentModel.DataAnnotations">
<Paket>True</Paket>
</Reference>
<Reference Include="EntityFramework">
<HintPath>..\..\packages\EntityFramework\lib\net45\EntityFramework.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="EntityFramework.SqlServer">
<HintPath>..\..\packages\EntityFramework\lib\net45\EntityFramework.SqlServer.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
@ -266,6 +229,11 @@
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="MySql.Data">
<HintPath>..\..\packages\MySql.Data\lib\net45\MySql.Data.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
@ -280,93 +248,6 @@
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.5'">
<ItemGroup>
<Reference Include="System.Data.SQLite">
<HintPath>..\..\packages\System.Data.SQLite.Core\lib\net45\System.Data.SQLite.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')">
<ItemGroup>
<Reference Include="System.Data.SQLite">
<HintPath>..\..\packages\System.Data.SQLite.Core\lib\net451\System.Data.SQLite.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Data.SQLite">
<HintPath>..\..\packages\System.Data.SQLite.Core\lib\net46\System.Data.SQLite.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.5'">
<ItemGroup>
<Reference Include="System.Data.SQLite.EF6">
<HintPath>..\..\packages\System.Data.SQLite.EF6\lib\net45\System.Data.SQLite.EF6.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')">
<ItemGroup>
<Reference Include="System.Data.SQLite.EF6">
<HintPath>..\..\packages\System.Data.SQLite.EF6\lib\net451\System.Data.SQLite.EF6.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Data.SQLite.EF6">
<HintPath>..\..\packages\System.Data.SQLite.EF6\lib\net46\System.Data.SQLite.EF6.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.5'">
<ItemGroup>
<Reference Include="System.Data.SQLite.Linq">
<HintPath>..\..\packages\System.Data.SQLite.Linq\lib\net45\System.Data.SQLite.Linq.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')">
<ItemGroup>
<Reference Include="System.Data.SQLite.Linq">
<HintPath>..\..\packages\System.Data.SQLite.Linq\lib\net451\System.Data.SQLite.Linq.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Data.SQLite.Linq">
<HintPath>..\..\packages\System.Data.SQLite.Linq\lib\net46\System.Data.SQLite.Linq.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
@ -400,5 +281,4 @@
</ItemGroup>
</When>
</Choose>
<Import Project="..\..\packages\System.Data.SQLite.Core\build\$(__paket__System_Data_SQLite_Core_targets).targets" Condition="Exists('..\..\packages\System.Data.SQLite.Core\build\$(__paket__System_Data_SQLite_Core_targets).targets')" Label="Paket" />
</Project>

View File

@ -21,55 +21,35 @@ open FSharp.Data.Sql
open System.IO
module SqlConnector =
let [<Literal>] DevelopmentDB = "aa-ac.sqlite"
let [<Literal>] FullDB = "full.sqlite"
let [<Literal>] DatabaseDir = "archive/db"
// static (compile time) ConnectionString
let [<Literal>] ConnectionString = @"Data Source="
+ __SOURCE_DIRECTORY__
+ @"/../resources/extensions-schema.sqlite"
+ @";Version=3"
[<Literal>]
let ConnectionStringName = @"ProductionExtensionDB"
[<Literal>]
let ResolutionPath = __SOURCE_DIRECTORY__ + @"/../../packages/MySql.Data/lib/net45"
// create a type alias with the connection string and database vendor settings
type ExtensionDbProvider = SqlDataProvider<
ConnectionString = ConnectionString,
DatabaseVendor = Common.DatabaseProviderTypes.SQLITE,
// ResolutionPath = ResolutionPath,
DatabaseVendor = Common.DatabaseProviderTypes.MYSQL,
ConnectionStringName = ConnectionStringName,
ResolutionPath = ResolutionPath,
IndividualsAmount = 500,
UseOptionTypes = true >
type ExtensionDbType = ExtensionDbProvider.dataContext
type Db = Dev | Prod | Auto | Custom of string
let rec getCtx dir = let archiveDir = function
| None -> __SOURCE_DIRECTORY__ + @"/../.."
| Some s -> s
function
| Dev -> ExtensionDbProvider.GetDataContext(sprintf "Data Source=%s/%s/%s;Version=3"
(archiveDir dir) DatabaseDir DevelopmentDB)
| Prod -> ExtensionDbProvider.GetDataContext(sprintf "Data Source=%s/%s/%s;Version=3"
(archiveDir dir) DatabaseDir FullDB)
| Custom db -> ExtensionDbProvider.GetDataContext(sprintf "Data Source=%s/%s/%s;Version=3"
(archiveDir dir) DatabaseDir db)
| Auto -> if File.Exists(sprintf "%s/%s/%s" (archiveDir dir) DatabaseDir FullDB) then
getCtx dir Prod
else
getCtx dir Dev
let getDownloads (ctx:ExtensionDbType) extid =
query {
for order in ctx.Main.Extension do
where (order.Extid = Some extid)
for order in ctx.Extensions.Extension do
where (order.Extid = extid)
select (order.Date, order.Downloads)
} |> Seq.filter (fun (date, download) -> date.IsSome && download.IsSome)
|> Seq.map (fun (date, download) -> (System.DateTime.Parse(date.Value),
} |> Seq.filter (fun (_, download) -> download.IsSome)
|> Seq.map (fun (date, download) -> (date,
download.Value))
|> Seq.toArray
let getAllExtIds (ctx:ExtensionDbType) =
query {
for ext in ctx.Main.Extension do
select ext.Extid
} |> Seq.distinct
|> Seq.choose id
|> Seq.toList
for ext in ctx.Extensions.Extension do
select ext.Extid
distinct
} |> Seq.toList

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="ProductionExtensionDB" providerName="FSharp.Data.Sql.SqlTypeProvider"
connectionString="Server=dbknecht.mherzberg.de;Database=extensions;User=achim;Password=kNFuBiEJVu5DDKZ5"/>
</connectionStrings>
<runtime>
<assemblyBinding
xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<Paket>True</Paket>
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="4.4.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="ProductionExtensionDB" providerName="FSharp.Data.Sql.SqlTypeProvider"
connectionString="Server=<SERVER>;Database=extensions;User=<LOGIN>;Password=<PWD>"/>
</connectionStrings>
<runtime>
<assemblyBinding
xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<Paket>True</Paket>
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="4.4.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@ -1,4 +1,3 @@
FSharp.Core
FsLab
System.Data.Sqlite
SQLProvider

View File

@ -1,37 +0,0 @@
CREATE TABLE support(author, commentdate, extid, date, displayname, title, language, shortauthor, comment, PRIMARY KEY (author, commentdate, extid, date));
CREATE VIRTUAL TABLE support_fts using fts4(content="support", author, commentdate, extid, date, displayname, title, language, shortauthor, comment);
CREATE TABLE IF NOT EXISTS 'support_fts_segments'(blockid INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'support_fts_segdir'(level INTEGER,idx INTEGER,start_block INTEGER,leaves_end_block INTEGER,end_block INTEGER,root BLOB,PRIMARY KEY(level, idx));
CREATE TABLE IF NOT EXISTS 'support_fts_docsize'(docid INTEGER PRIMARY KEY, size BLOB);
CREATE TABLE IF NOT EXISTS 'support_fts_stat'(id INTEGER PRIMARY KEY, value BLOB);
CREATE TRIGGER support_bu BEFORE UPDATE ON support BEGIN DELETE FROM support_fts WHERE docid=old.rowid;END;
CREATE TRIGGER support_bd BEFORE DELETE ON support BEGIN DELETE FROM support_fts WHERE docid=old.rowid;END;
CREATE TRIGGER support_au AFTER UPDATE ON support BEGIN INSERT INTO support_fts(docid, author, commentdate, extid, date, displayname, title, language, shortauthor, comment) VALUES(new.rowid, new.author, new.commentdate, new.extid, new.date, new.displayname, new.title, new.language, new.shortauthor, new.comment);END;
CREATE TRIGGER support_ai AFTER INSERT ON support BEGIN INSERT INTO support_fts(docid, author, commentdate, extid, date, displayname, title, language, shortauthor, comment) VALUES(new.rowid, new.author, new.commentdate, new.extid, new.date, new.displayname, new.title, new.language, new.shortauthor, new.comment);END;
CREATE TABLE review(author, commentdate, extid, date, displayname, rating, language, shortauthor, comment, PRIMARY KEY (author, commentdate, extid, date));
CREATE VIRTUAL TABLE review_fts using fts4(content="review", author, commentdate, extid, date, displayname, rating, language, shortauthor, comment);
CREATE TABLE IF NOT EXISTS 'review_fts_segments'(blockid INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'review_fts_segdir'(level INTEGER,idx INTEGER,start_block INTEGER,leaves_end_block INTEGER,end_block INTEGER,root BLOB,PRIMARY KEY(level, idx));
CREATE TABLE IF NOT EXISTS 'review_fts_docsize'(docid INTEGER PRIMARY KEY, size BLOB);
CREATE TABLE IF NOT EXISTS 'review_fts_stat'(id INTEGER PRIMARY KEY, value BLOB);
CREATE TRIGGER review_bu BEFORE UPDATE ON review BEGIN DELETE FROM review_fts WHERE docid=old.rowid;END;
CREATE TRIGGER review_bd BEFORE DELETE ON review BEGIN DELETE FROM review_fts WHERE docid=old.rowid;END;
CREATE TRIGGER review_au AFTER UPDATE ON review BEGIN INSERT INTO review_fts(docid, author, commentdate, extid, date, displayname, rating, language, shortauthor, comment) VALUES(new.rowid, new.author, new.commentdate, new.extid, new.date, new.displayname, new.rating, new.language, new.shortauthor, new.comment);END;
CREATE TRIGGER review_ai AFTER INSERT ON review BEGIN INSERT INTO review_fts(docid, author, commentdate, extid, date, displayname, rating, language, shortauthor, comment) VALUES(new.rowid, new.author, new.commentdate, new.extid, new.date, new.displayname, new.rating, new.language, new.shortauthor, new.comment);END;
CREATE TABLE reply(author, commentdate, extid, date, displayname, replyto, language, shortauthor, comment, PRIMARY KEY (author, commentdate, extid, date));
CREATE VIRTUAL TABLE reply_fts using fts4(content="reply", author, commentdate, extid, date, displayname, replyto, language, shortauthor, comment);
CREATE TABLE IF NOT EXISTS 'reply_fts_segments'(blockid INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'reply_fts_segdir'(level INTEGER,idx INTEGER,start_block INTEGER,leaves_end_block INTEGER,end_block INTEGER,root BLOB,PRIMARY KEY(level, idx));
CREATE TABLE IF NOT EXISTS 'reply_fts_docsize'(docid INTEGER PRIMARY KEY, size BLOB);
CREATE TABLE IF NOT EXISTS 'reply_fts_stat'(id INTEGER PRIMARY KEY, value BLOB);
CREATE TRIGGER reply_bu BEFORE UPDATE ON reply BEGIN DELETE FROM reply_fts WHERE docid=old.rowid;END;
CREATE TRIGGER reply_bd BEFORE DELETE ON reply BEGIN DELETE FROM reply_fts WHERE docid=old.rowid;END;
CREATE TRIGGER reply_au AFTER UPDATE ON reply BEGIN INSERT INTO reply_fts(docid, author, commentdate, extid, date, displayname, replyto, language, shortauthor, comment) VALUES(new.rowid, new.author, new.commentdate, new.extid, new.date, new.displayname, new.replyto, new.language, new.shortauthor, new.comment);END;
CREATE TRIGGER reply_ai AFTER INSERT ON reply BEGIN INSERT INTO reply_fts(docid, author, commentdate, extid, date, displayname, replyto, language, shortauthor, comment) VALUES(new.rowid, new.author, new.commentdate, new.extid, new.date, new.displayname, new.replyto, new.language, new.shortauthor, new.comment);END;
CREATE TABLE category (extid TEXT,date TEXT,category TEXT,PRIMARY KEY (extid, date, category));
CREATE TABLE content_script_url (crx_etag TEXT,url TEXT,PRIMARY KEY (crx_etag, url));
CREATE TABLE permission (crx_etag TEXT,permission TEXT,PRIMARY KEY (crx_etag, permission));
CREATE TABLE crx (crx_etag TEXT PRIMARY KEY,filename TEXT,size INTEGER,publickey BLOB);
CREATE TABLE jsfile (crx_etag TEXT,path TEXT,size INTEGER,md5 TEXT,PRIMARY KEY (crx_etag, path));
CREATE TABLE status (extid TEXT,date TEXT,crx_status INTEGER,overview_status INTEGER,overview_exception TEXT,PRIMARY KEY (extid, date));
CREATE TABLE extension (extid TEXT,date TEXT,name TEXT,version TEXT,description TEXT,downloads INTEGER,rating REAL,ratingcount INTEGER,fulldescription TEXT,developer TEXT,itemcategory TEXT,crx_etag TEXT,lastupdated TEXT,PRIMARY KEY (extid, date),FOREIGN KEY (crx_etag) REFERENCES crx(crx_etag));

View File

@ -34,22 +34,20 @@ open XPlot.GoogleCharts.Deedle
open LogicalHacking.ExtensionDsLab.Archive.SqlConnector
let ctx = getCtx None Auto
let ctx = ExtensionDbProvider.GetDataContext()
let chartDownloads extIds = (List.map (fun e -> (series (getDownloads ctx e))) extIds)
|> Chart.Line
|> Chart.WithOptions (Options(legend=Legend(position="bottom")))
|> Chart.WithLabels extIds
chartDownloads (List.take 5 (getAllExtIds ctx))
chartDownloads ["lkllajgbhondgjjnhmmgbjndmogapinp"]
// chartDownloads (List.take 5 (getAllExtIds ctx))
let extData =
query {for x in ctx.Main.Extension do
query {for x in ctx.Extensions.Extension do
select (x.Date, x.Name, x.Downloads) }
|> Seq.filter (fun (date, name, download) -> date.IsSome && name.IsSome && download.IsSome)
|> Seq.map (fun (date, name, download) -> (System.DateTime.Parse(date.Value), name.Value,
download.Value))
|> Seq.filter (fun (date, name, download) -> name.IsSome && download.IsSome)
|> Seq.map (fun (date, name, download) -> (date, name.Value, download.Value))
|> Frame.ofRecords
|> Frame.indexColsWith ["Date"; "Name"; "Downloads"]

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<Paket>True</Paket>
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="4.4.0.0" />
</dependentAssembly>
</assemblyBinding></runtime></configuration>

View File

@ -53,23 +53,6 @@
</Otherwise>
</Choose>
<Import Project="$(FSharpTargetsPath)" />
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.5'">
<PropertyGroup>
<__paket__System_Data_SQLite_Core_targets>net45\System.Data.SQLite.Core</__paket__System_Data_SQLite_Core_targets>
</PropertyGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')">
<PropertyGroup>
<__paket__System_Data_SQLite_Core_targets>net451\System.Data.SQLite.Core</__paket__System_Data_SQLite_Core_targets>
</PropertyGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<PropertyGroup>
<__paket__System_Data_SQLite_Core_targets>net46\System.Data.SQLite.Core</__paket__System_Data_SQLite_Core_targets>
</PropertyGroup>
</When>
</Choose>
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
@ -85,7 +68,7 @@
<Content Include="Google.DataTable.Net.Wrapper.XML">
<Paket>True</Paket>
</Content>
<Content Include="App.config" />
<Content Include="app.config" />
</ItemGroup>
<ItemGroup>
<Reference Include="mscorlib" />
@ -131,25 +114,6 @@
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.ComponentModel.DataAnnotations">
<Paket>True</Paket>
</Reference>
<Reference Include="EntityFramework">
<HintPath>..\..\packages\EntityFramework\lib\net45\EntityFramework.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
<Reference Include="EntityFramework.SqlServer">
<HintPath>..\..\packages\EntityFramework\lib\net45\EntityFramework.SqlServer.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
@ -295,93 +259,6 @@
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.5'">
<ItemGroup>
<Reference Include="System.Data.SQLite">
<HintPath>..\..\packages\System.Data.SQLite.Core\lib\net45\System.Data.SQLite.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')">
<ItemGroup>
<Reference Include="System.Data.SQLite">
<HintPath>..\..\packages\System.Data.SQLite.Core\lib\net451\System.Data.SQLite.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Data.SQLite">
<HintPath>..\..\packages\System.Data.SQLite.Core\lib\net46\System.Data.SQLite.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.5'">
<ItemGroup>
<Reference Include="System.Data.SQLite.EF6">
<HintPath>..\..\packages\System.Data.SQLite.EF6\lib\net45\System.Data.SQLite.EF6.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')">
<ItemGroup>
<Reference Include="System.Data.SQLite.EF6">
<HintPath>..\..\packages\System.Data.SQLite.EF6\lib\net451\System.Data.SQLite.EF6.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Data.SQLite.EF6">
<HintPath>..\..\packages\System.Data.SQLite.EF6\lib\net46\System.Data.SQLite.EF6.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.5'">
<ItemGroup>
<Reference Include="System.Data.SQLite.Linq">
<HintPath>..\..\packages\System.Data.SQLite.Linq\lib\net45\System.Data.SQLite.Linq.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')">
<ItemGroup>
<Reference Include="System.Data.SQLite.Linq">
<HintPath>..\..\packages\System.Data.SQLite.Linq\lib\net451\System.Data.SQLite.Linq.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
<Reference Include="System.Data.SQLite.Linq">
<HintPath>..\..\packages\System.Data.SQLite.Linq\lib\net46\System.Data.SQLite.Linq.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
<ItemGroup>
@ -422,5 +299,4 @@
<Paket>True</Paket>
</Reference>
</ItemGroup>
<Import Project="..\..\packages\System.Data.SQLite.Core\build\$(__paket__System_Data_SQLite_Core_targets).targets" Condition="Exists('..\..\packages\System.Data.SQLite.Core\build\$(__paket__System_Data_SQLite_Core_targets).targets')" Label="Paket" />
</Project>
</Project>

View File

@ -1,6 +1,5 @@
FSharp.Core
FsLab
System.Data.Sqlite
SQLProvider
group Test
NUnit