public DataDefinitionObject(DataDefinitionType defType, DbObjectType objType, DdlConfiguration conf = null) { _definitionType = defType; _objectType = objType; _configuration = conf; }
public static bool ValidateDDLArguments(IConfigurationSession session, string cluster, DataDefinitionType defType, DbObjectType objType, DdlConfiguration parsedConf, out ICloneable configuration, out Dictionary <string, object> confValues) { ConfigurationValidator validator = new ConfigurationValidator(session, cluster, defType, objType); if (validator.Validate(ToEqualityComparerDictionary(parsedConf.Configuration), out configuration, out confValues)) { return(true); } return(false); }
public ConfigurationValidator(IConfigurationSession session, string cluster, DataDefinitionType defType, DbObjectType objType) { DocumentValidator validator = new DocumentValidator(); _confobjectType = objType; _objType = defType; _session = session; _cluster = cluster; bool isNameRequired = true; switch (objType) { case DbObjectType.Database: switch (defType) { #region database configuration validator section. case DataDefinitionType.Alter: case DataDefinitionType.Create: #region Create or Alter Database Validation { _optionals.Add(ConfigType.MultiFile.ToString(), ArgumentValues[ExpectedType.Bool]); _optionals.Add(ConfigType.CacheSize.ToString(), ArgumentValues[ExpectedType.Number]); _optionals.Add(ConfigType.InitialSize.ToString(), ArgumentValues[ExpectedType.Number]); _optionals.Add(ConfigType.MaxFileSize.ToString(), ArgumentValues[ExpectedType.Number]); _optionals.Add(ConfigType.MaxCollections.ToString(), ArgumentValues[ExpectedType.Number]); _optionals.Add(ConfigType.Provider.ToString(), ArgumentValues[ExpectedType.String]); _validators.Add(validator); } break; #endregion case DataDefinitionType.Drop: #region DROP _validators.Add(validator); break; #endregion #region Alter Database /* * case DataDefinitionType.Alter: #region Alter Database * { * * _optionals.Add(ConfigType.SingleFiled.ToString(), ArgumentValues[ExpectedType.Bool]); * _optionals.Add(ConfigType.CacheSize.ToString(), ArgumentValues[ExpectedType.Number]); * _optionals.Add(ConfigType.InitialSize.ToString(), ArgumentValues[ExpectedType.Number]); * _optionals.Add(ConfigType.FinalSize.ToString(), ArgumentValues[ExpectedType.Number]); * _optionals.Add(ConfigType.MaxCollections.ToString(), ArgumentValues[ExpectedType.Number]); * _optionals.Add(ConfigType.Provider.ToString(), ArgumentValues[ExpectedType.String]); * * _optionals.Add(ConfigType.AttachmentsEnabled.ToString(), ArgumentValues[ExpectedType.Bool]); * _optionals.Add(ConfigType.AttachmentsPath.ToString(), ArgumentValues[ExpectedType.String]); * } * break; #endregion */ #endregion case DataDefinitionType.Backup: #region Backup configuration validator section. //we can use value validator to validate backuptype at once but need to change recovery configuration //prefere way at this point is to manually validate ValueValidator backupTypeValueValidator = new ValueValidator(); backupTypeValueValidator.AddValidation("Full", new TrueValidator()); validator.AddValidation(ConfigType.BackupType.ToString(), backupTypeValueValidator); validator.AddValidation(ConfigType.Path.ToString(), ArgumentValues[ExpectedType.String]); _optionals.Add(ConfigType.UserName.ToString(), ArgumentValues[ExpectedType.String]); _optionals.Add(ConfigType.Password.ToString(), ArgumentValues[ExpectedType.String]); _validators.Add(validator); break; #endregion case DataDefinitionType.Restore: #region Restore configuration validator section. ValueValidator restoreTypeValueValidator = new ValueValidator(); restoreTypeValueValidator.AddValidation("Full", new TrueValidator()); validator.AddValidation(ConfigType.RestoreType.ToString(), restoreTypeValueValidator); validator.AddValidation(ConfigType.Path.ToString(), ArgumentValues[ExpectedType.String]); _optionals.Add(ConfigType.SourceDatabase.ToString(), ArgumentValues[ExpectedType.String]); _optionals.Add(ConfigType.UserName.ToString(), ArgumentValues[ExpectedType.String]); _optionals.Add(ConfigType.Password.ToString(), ArgumentValues[ExpectedType.String]); //TODO Temporarilly added _validators.Add(validator); break; #endregion default: throw new DatabaseException(ErrorCodes.Query.NOT_SUPPORTED); #endregion } break; case DbObjectType.Collection: switch (defType) { #region collection configuration validator section. case DataDefinitionType.Alter: case DataDefinitionType.Create: #region Create OR Alter collection { _optionals.Add(ConfigType.Database.ToString(), ArgumentValues[ExpectedType.String]); //start: Distribution validator. DocumentValidator strategyDocument = new DocumentValidator(); DocumentValidator arrayRangeValues = new DocumentValidator(); //DocumentValidator nonShardedDocument = new DocumentValidator(); //start: Min and Max validator for range arrayRangeValues.AddValidation(ConfigType.MinRange.ToString(), ArgumentValues[ExpectedType.String]); arrayRangeValues.AddValidation(ConfigType.MaxRange.ToString(), ArgumentValues[ExpectedType.String]); arrayRangeValues.AddValidation(ConfigType.Shard.ToString(), ArgumentValues[ExpectedType.String]); ValueValidator strategyValValidator = new ValueValidator(); strategyValValidator.AddValidation(DistributionType.NonSharded.ToString(), new TrueValidator()); strategyDocument.AddValidation(ConfigType.Strategy.ToString(), strategyValValidator); _optionals.Add(ConfigType.Distribution.ToString(), strategyDocument); //end: Distribution validator. ValueValidator collectionTypeValValidator = new ValueValidator(); // temporary validations > Need to find another way to conditional validate capped size _optionals.Add(ConfigType.CappedSize.ToString(), ArgumentValues[ExpectedType.Number]); _optionals.Add(ConfigType.MaxDocuments.ToString(), ArgumentValues[ExpectedType.Number]); //start capcollection DocumentValidator capCollectionDocValidator = new DocumentValidator(); capCollectionDocValidator.AddOptionalValidation(ConfigType.CappedSize.ToString(), ArgumentValues[ExpectedType.Number]); capCollectionDocValidator.AddOptionalValidation(ConfigType.MaxDocuments.ToString(), ArgumentValues[ExpectedType.Number]); capCollectionDocValidator.AddOptionalValidation(ConfigType.Shard.ToString(), ArgumentValues[ExpectedType.String]); //end capcollection //start SingleShardCollection DocumentValidator singleShardDocValidator = new DocumentValidator(); singleShardDocValidator.AddOptionalValidation(ConfigType.Shard.ToString(), ArgumentValues[ExpectedType.String]); _optionals.Add(ConfigType.CollectionType.ToString(), collectionTypeValValidator); _optionals.Add(ConfigType.Shard.ToString(), ArgumentValues[ExpectedType.String]); _optionals.Add(ConfigType.EvictionEnabled.ToString(), ArgumentValues[ExpectedType.Bool]); _validators.Add(validator); } break; #endregion case DataDefinitionType.Drop: #region DROP _optionals.Add(ConfigType.Database.ToString(), ArgumentValues[ExpectedType.String]); _validators.Add(validator); break; #endregion default: throw new DatabaseException(ErrorCodes.Query.NOT_SUPPORTED); #endregion } break; case DbObjectType.Index: switch (defType) { #region index configuration validator section. case DataDefinitionType.Create: #region Create validator.AddValidation(ConfigType.Database.ToString(), ArgumentValues[ExpectedType.String]); validator.AddValidation(ConfigType.Collection.ToString(), ArgumentValues[ExpectedType.String]); DocumentValidator dv1 = new DocumentValidator(); dv1.AddValidation(ConfigType.Attribute.ToString(), ArgumentValues[ExpectedType.String]); dv1.AddValidation(ConfigType.SortOrder.ToString(), ArgumentValues[ExpectedType.String]); validator.AddValidation(ConfigType.Attributes.ToString(), (dv1)); _optionals.Add(ConfigType.JournalEnabled.ToString(), ArgumentValues[ExpectedType.Bool]); _optionals.Add(ConfigType.CachePolicy.ToString(), ArgumentValues[ExpectedType.String]); _validators.Add(validator); break; #endregion case DataDefinitionType.Drop: #region DROP validator.AddValidation(ConfigType.Database.ToString(), ArgumentValues[ExpectedType.String]); validator.AddValidation(ConfigType.Collection.ToString(), ArgumentValues[ExpectedType.String]); _validators.Add(validator); break; #endregion default: throw new DatabaseException(ErrorCodes.Query.NOT_SUPPORTED); #endregion } break; case DbObjectType.Function: switch (defType) { #region function configuration validator section. case DataDefinitionType.Create: #region Create validator.AddValidation(ConfigType.Database.ToString(), ArgumentValues[ExpectedType.String]); validator.AddValidation(ConfigType.AssemblyFile.ToString(), ArgumentValues[ExpectedType.String]); validator.AddValidation(ConfigType.ClassName.ToString(), ArgumentValues[ExpectedType.String]); validator.AddValidation(ConfigType.DeploymentId.ToString(), ArgumentValues[ExpectedType.String]); _validators.Add(validator); break; #endregion case DataDefinitionType.Drop: #region DROP validator.AddValidation(ConfigType.Database.ToString(), ArgumentValues[ExpectedType.String]); _validators.Add(validator); break; #endregion default: throw new DatabaseException(ErrorCodes.Query.NOT_SUPPORTED); #endregion } break; case DbObjectType.Role: switch (defType) { #region role configuration validator section. case DataDefinitionType.Create: #region Create validator.AddValidation(ConfigType.PermissionSet.ToString(), ArgumentValues[ExpectedType.StringArray]); _validators.Add(validator); break; #endregion case DataDefinitionType.Alter: #region Alter validator.AddValidation(ConfigType.AddPermissions.ToString(), ArgumentValues[ExpectedType.StringArray]); _validators.Add(validator); DocumentValidator validator2 = new DocumentValidator(); validator2.AddValidation(ConfigType.RemovePermissions.ToString(), ArgumentValues[ExpectedType.StringArray]); _validators.Add(validator2); break; #endregion case DataDefinitionType.Drop: #region DROP _validators.Add(validator); break; #endregion default: throw new DatabaseException(ErrorCodes.Query.NOT_SUPPORTED); #endregion } break; case DbObjectType.User: switch (defType) { #region user configuration validator section. case DataDefinitionType.Create: #region Create ValueValidator valueValidator = new ValueValidator(); valueValidator.AddValidation("Windows", new TrueValidator()); valueValidator.AddValidation("Custom", new TrueValidator()); validator.AddValidation(ConfigType.UserType.ToString(), valueValidator); _optionals.Add(ConfigType.Password.ToString(), ArgumentValues[ExpectedType.String]); _validators.Add(validator); break; #endregion case DataDefinitionType.Alter: #region Alter validator.AddValidation(ConfigType.OldPassword.ToString(), ArgumentValues[ExpectedType.String]); validator.AddValidation(ConfigType.NewPassword.ToString(), ArgumentValues[ExpectedType.String]); _validators.Add(validator); break; #endregion case DataDefinitionType.Drop: #region Drop validator.AddValidation(ConfigType.Password.ToString(), ArgumentValues[ExpectedType.String]); _validators.Add(validator); break; #endregion default: throw new DatabaseException(ErrorCodes.Query.NOT_SUPPORTED); #endregion } break; case DbObjectType.Login: switch (defType) { #region Login configuration validator section. case DataDefinitionType.Create: #region Create DocumentValidator customPasswordValidator = new DocumentValidator(); customPasswordValidator.AddValidation(ConfigType.Password.ToString(), ArgumentValues[ExpectedType.String]); ValueValidator valueValidator = new ValueValidator(); valueValidator.AddValidation("Windows", new TrueValidator()); valueValidator.AddValidation("Custom", customPasswordValidator); validator.AddValidation(ConfigType.UserType.ToString(), valueValidator); //TODO Temporarilly added _optionals.Add(ConfigType.Password.ToString(), ArgumentValues[ExpectedType.String]); _validators.Add(validator); break; #endregion case DataDefinitionType.Alter: #region Alter validator.AddValidation(ConfigType.OldPassword.ToString(), ArgumentValues[ExpectedType.String]); validator.AddValidation(ConfigType.NewPassword.ToString(), ArgumentValues[ExpectedType.String]); _validators.Add(validator); break; #endregion case DataDefinitionType.Drop: #region _validators.Add(validator); break; #endregion default: throw new DatabaseException(ErrorCodes.Query.NOT_SUPPORTED); #endregion } break; default: throw new DatabaseException(ErrorCodes.Query.NOT_SUPPORTED); } if (isNameRequired) { validator.AddValidation(ConfigType.Name.ToString(), ExtendedJSONDataTypes.String); } }