From 32a358b96cddd59a3ce4974c41cd78fe8efa08c7 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Tue, 18 Sep 2018 17:20:57 +0000 Subject: [PATCH] --- server/AyaNova/models/AyContext.cs | 2 ++ server/AyaNova/models/SearchDictionary.cs | 19 +++++++++++++++++ server/AyaNova/models/SearchKey.cs | 25 +++++++++++++++++++++++ server/AyaNova/util/AySchema.cs | 19 ++++++++++++++--- 4 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 server/AyaNova/models/SearchDictionary.cs create mode 100644 server/AyaNova/models/SearchKey.cs diff --git a/server/AyaNova/models/AyContext.cs b/server/AyaNova/models/AyContext.cs index 450e49f8..083a7f33 100644 --- a/server/AyaNova/models/AyContext.cs +++ b/server/AyaNova/models/AyContext.cs @@ -9,6 +9,8 @@ namespace AyaNova.Models public partial class AyContext : DbContext { public virtual DbSet Event { get; set; } + public virtual DbSet SearchDictionary { get; set; } + public virtual DbSet SearchKey { get; set; } public virtual DbSet User { get; set; } public virtual DbSet UserOptions { get; set; } public virtual DbSet License { get; set; } diff --git a/server/AyaNova/models/SearchDictionary.cs b/server/AyaNova/models/SearchDictionary.cs new file mode 100644 index 00000000..d84e84a2 --- /dev/null +++ b/server/AyaNova/models/SearchDictionary.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using AyaNova.Biz; + +using System.ComponentModel.DataAnnotations; + +namespace AyaNova.Models +{ + + public partial class SearchDictionary + { + public long Id { get; set; } + public uint ConcurrencyToken { get; set; } + + [Required, MaxLength(255)] + public string Word { get; set; }//max 255 characters ascii set + + } +} diff --git a/server/AyaNova/models/SearchKey.cs b/server/AyaNova/models/SearchKey.cs new file mode 100644 index 00000000..8d9aed8e --- /dev/null +++ b/server/AyaNova/models/SearchKey.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using AyaNova.Biz; + +using System.ComponentModel.DataAnnotations; + +namespace AyaNova.Models +{ + + public partial class SearchKey + { + public long Id { get; set; } + public uint ConcurrencyToken { get; set; } + + + [Required] + public long WordId { get; set; } + [Required] + public long ObjectId { get; set; } + [Required] + public AyaType ObjectType { get; set; } + public bool InName { get; set; } + + } +} diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index 079abd16..7d070a95 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -22,8 +22,8 @@ namespace AyaNova.Util //!!!!WARNING: BE SURE TO UPDATE THE DbUtil::PrepareDatabaseForSeeding WHEN NEW TABLES ADDED!!!! private const int DESIRED_SCHEMA_LEVEL = 9; - internal const long EXPECTED_COLUMN_COUNT = 90; - internal const long EXPECTED_INDEX_COUNT = 18; + internal const long EXPECTED_COLUMN_COUNT = 97; + internal const long EXPECTED_INDEX_COUNT = 20; //!!!!WARNING: BE SURE TO UPDATE THE DbUtil::PrepareDatabaseForSeeding WHEN NEW TABLES ADDED!!!! ///////////////////////////////////////////////////////////////// @@ -115,7 +115,8 @@ namespace AyaNova.Util //************* SCHEMA UPDATES ****************** ////////////////////////////////////////////////// - // USER table locale text and default data + // FOUNDATIONAL TABLES + // if (currentSchema < 2) { LogUpdateMessage(log); @@ -129,6 +130,15 @@ namespace AyaNova.Util // exec("CREATE INDEX ayid_idx ON aevent (ayid);"); // exec("CREATE INDEX aytype_idx ON aevent (aytype);"); + //Add the search key and dictionary tables + //TODO: Indexes determined through load testing and experimentation + //Too many indexes or unnecessary ones would be bad because this table is hit on every save / update of an object and would slow those ops + //too little is bad if search takes a dogs age to find anything + + exec("CREATE TABLE asearchdictionary (id BIGSERIAL PRIMARY KEY, word varchar(255) not null)"); + // exec("CREATE UNIQUE INDEX tagname_idx ON atag (name);"); + exec("CREATE TABLE asearchkey (id BIGSERIAL PRIMARY KEY, wordid bigint not null REFERENCES asearchdictionary (id), objectid bigint not null, objecttype integer not null, inname bool not null)"); + //create locale text tables exec("CREATE TABLE alocale (id BIGSERIAL PRIMARY KEY, ownerid bigint not null, name varchar(255) not null, stock bool)"); exec("CREATE UNIQUE INDEX localename_idx ON alocale (name)"); @@ -138,6 +148,9 @@ namespace AyaNova.Util //Load the default LOCALES AyaNova.Biz.PrimeData.PrimeLocales(ct); + + + //Add user table exec("CREATE TABLE auser (id BIGSERIAL PRIMARY KEY, ownerid bigint not null, active bool not null, name varchar(255) not null, " + "login text not null, password text not null, salt text not null, roles integer not null, localeid bigint not null REFERENCES alocale (id), " +