Skip to content

Commit c525400

Browse files
committed
Ticket #13 : Fix empty key
1 parent 42d0202 commit c525400

File tree

8 files changed

+41
-25
lines changed

8 files changed

+41
-25
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project>
22
<PropertyGroup>
3-
<VersionPrefix>2.0.3</VersionPrefix>
3+
<VersionPrefix>2.0.4</VersionPrefix>
44
<Authors>SimpleIdServer</Authors>
55
<Owners>SimpleIdServer</Owners>
66
</PropertyGroup>

samples/EFCore.Cassandra.Samples/FakeDbContext.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ namespace EFCore.Cassandra.Samples
1010
{
1111
public class FakeDbContext : DbContext
1212
{
13+
private const string CV_KEYSPACE = "cv";
1314
public DbSet<Applicant> Applicants { get; set; }
1415

1516
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
1617
{
17-
optionsBuilder.UseCassandra("Contact Points=127.0.0.1;", opt =>
18+
optionsBuilder.UseCassandra($"Contact Points=127.0.0.1", CV_KEYSPACE, opt =>
1819
{
19-
opt.MigrationsHistoryTable(HistoryRepository.DefaultTableName, "cv");
20+
opt.MigrationsHistoryTable(HistoryRepository.DefaultTableName, CV_KEYSPACE);
2021
}, b =>
2122
{
2223
b.WithQueryOptions(new QueryOptions().SetConsistencyLevel(ConsistencyLevel.LocalOne))
@@ -38,9 +39,9 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
3839
protected override void OnModelCreating(ModelBuilder modelBuilder)
3940
{
4041
var timeUuidConverter = new TimeUuidToGuidConverter();
41-
modelBuilder.ForCassandraAddKeyspace("cv", new KeyspaceReplicationSimpleStrategyClass(2));
42+
modelBuilder.ForCassandraAddKeyspace(CV_KEYSPACE, new KeyspaceReplicationSimpleStrategyClass(2));
4243
modelBuilder.Entity<Applicant>()
43-
.ToTable("applicants", "cv")
44+
.ToTable("applicants", CV_KEYSPACE)
4445
.HasKey(p => new { p.Id, p.Order });
4546
modelBuilder.Entity<Applicant>()
4647
.ForCassandraSetClusterColumns(_ => _.Order)
@@ -52,10 +53,10 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
5253
.Property(p => p.Id)
5354
.HasColumnName("id");
5455
modelBuilder.Entity<CV>()
55-
.ToTable("cvs", "cv")
56+
.ToTable("cvs", CV_KEYSPACE)
5657
.HasKey(c => c.Id);
5758
modelBuilder.Entity<ApplicantAddress>()
58-
.ToUserDefinedType("applicant_addr", "cv")
59+
.ToUserDefinedType("applicant_addr", CV_KEYSPACE)
5960
.HasNoKey();
6061
}
6162
}

src/EFCore.Cassandra.Benchmarks/FakeDbContext.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ namespace EFCore.Cassandra.Benchmarks
1010
{
1111
public class FakeDbContext : DbContext
1212
{
13+
private const string CV_KEYSPACE = "cv";
1314
public DbSet<Applicant> Applicants { get; set; }
1415

1516
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
1617
{
17-
optionsBuilder.UseCassandra("Contact Points=127.0.0.1;", opt =>
18+
optionsBuilder.UseCassandra("Contact Points=127.0.0.1;", CV_KEYSPACE, opt =>
1819
{
19-
opt.MigrationsHistoryTable(HistoryRepository.DefaultTableName, "cv");
20+
opt.MigrationsHistoryTable(HistoryRepository.DefaultTableName, CV_KEYSPACE);
2021
}, o => {
2122

2223
o.WithQueryOptions(new QueryOptions().SetConsistencyLevel(ConsistencyLevel.LocalOne))
@@ -38,9 +39,9 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
3839
protected override void OnModelCreating(ModelBuilder modelBuilder)
3940
{
4041
var timeUuidConverter = new TimeUuidToGuidConverter();
41-
modelBuilder.ForCassandraAddKeyspace("cv", new KeyspaceReplicationSimpleStrategyClass(2));
42+
modelBuilder.ForCassandraAddKeyspace("CV_KEYSPACE", new KeyspaceReplicationSimpleStrategyClass(2));
4243
modelBuilder.Entity<Applicant>()
43-
.ToTable("applicants", "cv")
44+
.ToTable("applicants", CV_KEYSPACE)
4445
.HasKey(p => new { p.Id, p.Order });
4546
modelBuilder.Entity<Applicant>()
4647
.ForCassandraSetClusterColumns(_ => _.Order)
@@ -52,7 +53,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
5253
.Property(p => p.Id)
5354
.HasColumnName("id");
5455
modelBuilder.Entity<ApplicantAddress>()
55-
.ToUserDefinedType("applicant_addr", "cv")
56+
.ToUserDefinedType("applicant_addr", CV_KEYSPACE)
5657
.HasNoKey();
5758
}
5859
}

src/EFCore.Cassandra/CassandraDbContextOptionsExtensions.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,19 @@ namespace Microsoft.EntityFrameworkCore
99
{
1010
public static class CassandraDbContextOptionsExtensions
1111
{
12-
public static DbContextOptionsBuilder UseCassandra(this DbContextOptionsBuilder optionsBuilder, string connectionString, Action<CassandraDbContextOptionsBuilder> cassandraOptionsAction = null)
12+
public static DbContextOptionsBuilder UseCassandra(this DbContextOptionsBuilder optionsBuilder, string connectionString, string defaultKeyspace, Action<CassandraDbContextOptionsBuilder> cassandraOptionsAction = null)
1313
{
14-
return UseCassandra(optionsBuilder, connectionString, cassandraOptionsAction, null);
14+
return UseCassandra(optionsBuilder, connectionString, defaultKeyspace, cassandraOptionsAction, null);
1515
}
1616

17-
public static DbContextOptionsBuilder UseCassandra(this DbContextOptionsBuilder optionsBuilder, string connectionString, Action<CassandraDbContextOptionsBuilder> cassandraOptionsAction = null, Action<Builder> clusterBuilderCallback = null)
17+
public static DbContextOptionsBuilder UseCassandra(this DbContextOptionsBuilder optionsBuilder, string connectionString, string defaultKeyspace, Action<CassandraDbContextOptionsBuilder> cassandraOptionsAction = null, Action<Builder> clusterBuilderCallback = null)
1818
{
1919
var extension = (CassandraOptionsExtension)GetOrCreateExtension(optionsBuilder).WithConnectionString(connectionString);
20+
if (!string.IsNullOrWhiteSpace(defaultKeyspace))
21+
{
22+
extension = extension.WithDefaultKeyspace(defaultKeyspace);
23+
}
24+
2025
if (clusterBuilderCallback != null)
2126
{
2227
extension = extension.WithCallbackClusterBuilder(clusterBuilderCallback);

src/EFCore.Cassandra/Infrastructure/Internal/CassandraOptionsExtension.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ namespace Microsoft.EntityFrameworkCore.Cassandra.Infrastructure.Internal
1313
public class CassandraOptionsExtension : RelationalOptionsExtension
1414
{
1515
private Action<Builder> _callback;
16+
private string _defaultKeyspace;
1617

1718
public CassandraOptionsExtension() { }
1819

@@ -21,6 +22,7 @@ protected CassandraOptionsExtension(CassandraOptionsExtension copyFrom) : base(c
2122
public override DbContextOptionsExtensionInfo Info => new ExtensionInfo(this);
2223

2324
public virtual Action<Builder> ClusterBuilder => _callback;
25+
public virtual string DefaultKeyspace => _defaultKeyspace;
2426

2527
public override void ApplyServices(IServiceCollection services)
2628
{
@@ -34,10 +36,18 @@ public CassandraOptionsExtension WithCallbackClusterBuilder(Action<Builder> call
3436
return clone;
3537
}
3638

39+
public CassandraOptionsExtension WithDefaultKeyspace(string keyspace)
40+
{
41+
var clone = (CassandraOptionsExtension)Clone();
42+
clone._defaultKeyspace = keyspace;
43+
return clone;
44+
}
45+
3746

3847
protected override RelationalOptionsExtension Clone() => new CassandraOptionsExtension(this)
3948
{
40-
_callback = _callback
49+
_callback = _callback,
50+
_defaultKeyspace = _defaultKeyspace
4151
};
4252

4353
public new static CassandraOptionsExtension Extract(IDbContextOptions options)

src/EFCore.Cassandra/Migrations/CassandraHistoryRepository.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,10 @@
44
using Microsoft.EntityFrameworkCore.Metadata;
55
using Microsoft.EntityFrameworkCore.Metadata.Builders;
66
using Microsoft.EntityFrameworkCore.Metadata.Conventions;
7-
using Microsoft.EntityFrameworkCore.Metadata.Internal;
87
using Microsoft.EntityFrameworkCore.Migrations;
9-
using Microsoft.EntityFrameworkCore.Migrations.Operations;
108
using Microsoft.EntityFrameworkCore.Storage;
11-
using Newtonsoft.Json;
129
using System;
1310
using System.Collections.Generic;
14-
using System.Diagnostics;
1511
using System.Linq;
1612
using System.Text;
1713
using System.Threading;

src/EFCore.Cassandra/Storage/Internal/CassandraDatabaseCreator.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// Copyright (c) SimpleIdServer. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
using Microsoft.EntityFrameworkCore.Cassandra.Infrastructure.Internal;
34
using Microsoft.EntityFrameworkCore.Storage;
45
using System;
56

@@ -9,11 +10,13 @@ public class CassandraDatabaseCreator : RelationalDatabaseCreator
910
{
1011
private readonly IRelationalConnection _relationalConnection;
1112
private readonly IRawSqlCommandBuilder _rawSqlCommandBuilder;
13+
private readonly RelationalConnectionDependencies _relationalConnectionDependencies;
1214

13-
public CassandraDatabaseCreator(IRelationalConnection relationalConnection, IRawSqlCommandBuilder rawCommandBuilder, RelationalDatabaseCreatorDependencies dependencies) : base(dependencies)
15+
public CassandraDatabaseCreator(IRelationalConnection relationalConnection, IRawSqlCommandBuilder rawCommandBuilder, RelationalConnectionDependencies relationalConnectionDependencies, RelationalDatabaseCreatorDependencies dependencies) : base(dependencies)
1416
{
1517
_relationalConnection = relationalConnection;
1618
_rawSqlCommandBuilder = rawCommandBuilder;
19+
_relationalConnectionDependencies = relationalConnectionDependencies;
1720
}
1821

1922
public override void Create() { }
@@ -38,9 +41,9 @@ public override bool Exists()
3841

3942
public override bool HasTables()
4043
{
41-
var database = Dependencies.Connection.DbConnection.Database;
42-
var sql = $"SELECT count(*) FROM system_schema.tables WHERE keyspace_name='{database}'";
43-
return Dependencies.ExecutionStrategyFactory.Create().Execute(_relationalConnection, connection => (int)_rawSqlCommandBuilder.Build(sql).ExecuteScalar(
44+
var optionsExtensions = CassandraOptionsExtension.Extract(_relationalConnectionDependencies.ContextOptions);
45+
var sql = $"SELECT count(*) FROM system_schema.tables WHERE keyspace_name='{optionsExtensions.DefaultKeyspace}'";
46+
return Dependencies.ExecutionStrategyFactory.Create().Execute(_relationalConnection, connection => (long)_rawSqlCommandBuilder.Build(sql).ExecuteScalar(
4447
new RelationalCommandParameterObject(connection, null, null, null, null)
4548
) > 0);
4649
}

tests/EFCore.Cassandra.Tests/FakeDbContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public FakeDbContext(Action<ModelBuilder> modelCreatingCallback)
2323

2424
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
2525
{
26-
optionsBuilder.UseCassandra("connectionstring", _cassandraOptionsAction);
26+
optionsBuilder.UseCassandra("connectionstring", "cv", _cassandraOptionsAction);
2727
}
2828

2929
protected override void OnModelCreating(ModelBuilder modelBuilder)

0 commit comments

Comments
 (0)