예제 #1
0
 public DataDefinitionObject(DataDefinitionType defType, DbObjectType objType,
                             DdlConfiguration conf = null)
 {
     _definitionType = defType;
     _objectType     = objType;
     _configuration  = conf;
 }
예제 #2
0
        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);
        }
예제 #3
0
        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);
            }
        }