Skip to content

Commit fb5e99f

Browse files
committed
work on different database engines
1 parent b47a11c commit fb5e99f

22 files changed

+1157
-21
lines changed

Lucene.Net.Sql.MySql/Lucene.Net.Sql.MySql.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>
1717
<PackageProjectUrl>https://github.com/GowenGit/Lucene-net-sql</PackageProjectUrl>
1818
<RepositoryUrl>https://github.com/GowenGit/Lucene-net-sql</RepositoryUrl>
19-
<PackageTags>Lucene; SQL; MySQL; Storage; Directory; MySql</PackageTags>
19+
<PackageTags>Lucene; SQL; Storage; Directory; MySql</PackageTags>
2020
<PackageIcon>icon.png</PackageIcon>
2121
<PublishRepositoryUrl>true</PublishRepositoryUrl>
2222

@@ -29,8 +29,8 @@
2929

3030
<ItemGroup>
3131
<PackageReference Include="Lucene.Net" Version="4.8.0-beta00012" />
32-
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.0-beta-20204-02" PrivateAssets="All" />
33-
<PackageReference Include="MySqlConnector" Version="1.1.0" />
32+
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
33+
<PackageReference Include="MySqlConnector" Version="1.2.1" />
3434
<PackageReference Include="Obsessive.Defender" Version="1.0.1">
3535
<PrivateAssets>all</PrivateAssets>
3636
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

Lucene.Net.Sql.Postgre/Friends.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
using System.Runtime.CompilerServices;
2+
3+
[assembly: InternalsVisibleTo("Lucene.Net.Sql.Tests")]
4+
[assembly: InternalsVisibleTo("Lucene.Net.Sql.Performance")]
5+
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netstandard2.0</TargetFramework>
5+
<NoWarn>1701;1702;1591;0649</NoWarn>
6+
7+
<version>$(VersionSuffix)</version>
8+
<GenerateDocumentationFile>true</GenerateDocumentationFile>
9+
10+
<Authors>Modestas Petravicius</Authors>
11+
<Product>Lucene.Net SQL</Product>
12+
<Title>Lucene.Net SQL</Title>
13+
<Description>Lucene.NET SQL is a library that enables persistance of Lucene index files to SQL databases.</Description>
14+
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
15+
<Copyright>GPL-3.0-or-later</Copyright>
16+
<PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>
17+
<PackageProjectUrl>https://github.com/GowenGit/Lucene-net-sql</PackageProjectUrl>
18+
<RepositoryUrl>https://github.com/GowenGit/Lucene-net-sql</RepositoryUrl>
19+
<PackageTags>Lucene; SQL; Storage; Directory; Postgre</PackageTags>
20+
<PackageIcon>icon.png</PackageIcon>
21+
<PublishRepositoryUrl>true</PublishRepositoryUrl>
22+
23+
<IncludeSymbols>true</IncludeSymbols>
24+
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
25+
26+
<LangVersion>8.0</LangVersion>
27+
<Nullable>enable</Nullable>
28+
</PropertyGroup>
29+
30+
<ItemGroup>
31+
<PackageReference Include="Lucene.Net" Version="4.8.0-beta00012" />
32+
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
33+
<PackageReference Include="Npgsql" Version="5.0.1.1" />
34+
<PackageReference Include="Obsessive.Defender" Version="1.0.1">
35+
<PrivateAssets>all</PrivateAssets>
36+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
37+
</PackageReference>
38+
</ItemGroup>
39+
40+
<ItemGroup>
41+
<ProjectReference Include="..\Lucene.Net.Sql\Lucene.Net.Sql.csproj" />
42+
</ItemGroup>
43+
44+
<ItemGroup>
45+
<None Include="../assets/icon.png" Pack="true" PackagePath="\" />
46+
</ItemGroup>
47+
</Project>
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
namespace Lucene.Net.Sql.Postgre
2+
{
3+
internal static class PostgreSqlCommands
4+
{
5+
public const string SetupTablesCommand = @"
6+
CREATE TABLE IF NOT EXISTS `{0}_data_blocks` (
7+
`node` bigint(20) NOT NULL,
8+
`seq` int unsigned NOT NULL,
9+
`data` blob,
10+
PRIMARY KEY (`node`, `seq`),
11+
KEY `seq` (`seq`)
12+
) ENGINE=InnoDB DEFAULT CHARSET=binary;
13+
14+
CREATE TABLE IF NOT EXISTS `{0}_nodes` (
15+
`node` bigint(20) NOT NULL auto_increment,
16+
`name` varchar(255) NOT NULL,
17+
`directory` varchar(255) NOT NULL,
18+
`size` bigint(20) NOT NULL default '0',
19+
UNIQUE KEY `name` (`name`,`directory`),
20+
KEY `node` (`node`),
21+
KEY `directory` (`directory`)
22+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
23+
24+
CREATE TABLE IF NOT EXISTS `{0}_locks` (
25+
`anchor` varchar(255) NOT NULL,
26+
`lock_id` varchar(128) NOT NULL,
27+
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
28+
PRIMARY KEY (`anchor`)
29+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
30+
";
31+
32+
public const string PurgeTablesCommand = @"
33+
BEGIN;
34+
35+
DROP TABLE IF EXISTS `{0}_data_blocks`;
36+
DROP TABLE IF EXISTS `{0}_nodes`;
37+
DROP TABLE IF EXISTS `{0}_locks`;
38+
39+
COMMIT;
40+
";
41+
42+
public const string ListNodesQuery = @"
43+
SELECT `name` FROM `{0}_nodes`
44+
WHERE `directory` = @directory;
45+
";
46+
47+
public const string CreateIfNotExistsAndGetNodeQuery = @"
48+
INSERT IGNORE INTO `{0}_nodes`
49+
(
50+
`name`, `directory`
51+
)
52+
VALUES
53+
(
54+
@name, @directory
55+
);
56+
57+
SELECT
58+
`node` as `id`,
59+
`name`,
60+
`size`
61+
FROM `{0}_nodes`
62+
WHERE `name` = @name AND `directory` = @directory;
63+
";
64+
65+
public const string RemoveNodeCommand = @"
66+
BEGIN;
67+
68+
SELECT `node` INTO @node FROM `{0}_nodes` WHERE `name` = @name AND `directory` = @directory;
69+
70+
DELETE FROM `{0}_data_blocks` WHERE `node` = @node;
71+
DELETE FROM `{0}_nodes` WHERE `node` = @node;
72+
73+
COMMIT;
74+
";
75+
76+
public const string AddLockCommand = @"
77+
INSERT IGNORE INTO `{0}_locks`
78+
(
79+
`anchor`, `lock_id`, `created`
80+
)
81+
VALUES
82+
(
83+
@anchor, @lock_id, now()
84+
)
85+
ON DUPLICATE KEY UPDATE
86+
`lock_id` = if(`created` < now() - interval @max_lock_time_in_seconds second, values(`lock_id`), `lock_id`),
87+
`created` = if(`lock_id` = values(`lock_id`), values(`created`), `created`);
88+
89+
SELECT `lock_id` FROM `{0}_locks` WHERE `anchor` = @anchor;
90+
";
91+
92+
public const string LockExistsQuery = @"
93+
SELECT EXISTS(SELECT * FROM `{0}_locks` WHERE `anchor` = @anchor);
94+
";
95+
96+
public const string DeleteLockCommand = @"
97+
DELETE FROM `{0}_locks` WHERE `anchor` = @anchor;
98+
";
99+
100+
public const string GetBlockCommand = @"
101+
SELECT `data` FROM `{0}_data_blocks` WHERE `node` = @node_id AND `seq` = @block;
102+
";
103+
104+
public const string WriteBlockCommand = @"
105+
BEGIN;
106+
107+
INSERT INTO `{0}_data_blocks`
108+
(
109+
`node`, `seq`, `data`
110+
)
111+
VALUES
112+
(
113+
@node_id, @block, @data
114+
)
115+
ON DUPLICATE KEY UPDATE
116+
`data` = @data;
117+
118+
UPDATE `{0}_nodes`
119+
SET `size` = @size
120+
WHERE `node` = @node_id;
121+
122+
COMMIT;
123+
";
124+
}
125+
}

0 commit comments

Comments
 (0)