示例#1
0
        public Migrator(
            [NotNull] IMigrationsAssembly migrationsAssembly,
            [NotNull] IHistoryRepository historyRepository,
            [NotNull] IDatabaseCreator databaseCreator,
            [NotNull] IMigrationsSqlGenerator migrationsSqlGenerator,
            [NotNull] ISqlCommandBuilder sqlCommandBuilder,
            [NotNull] IRelationalConnection connection,
            [NotNull] ISqlGenerator sqlGenerator,
            [NotNull] ILogger<Migrator> logger,
            [NotNull] IDatabaseProviderServices providerServices)
        {
            Check.NotNull(migrationsAssembly, nameof(migrationsAssembly));
            Check.NotNull(historyRepository, nameof(historyRepository));
            Check.NotNull(databaseCreator, nameof(databaseCreator));
            Check.NotNull(migrationsSqlGenerator, nameof(migrationsSqlGenerator));
            Check.NotNull(sqlCommandBuilder, nameof(sqlCommandBuilder));
            Check.NotNull(connection, nameof(connection));
            Check.NotNull(sqlGenerator, nameof(sqlGenerator));
            Check.NotNull(logger, nameof(logger));
            Check.NotNull(providerServices, nameof(providerServices));

            _migrationsAssembly = migrationsAssembly;
            _historyRepository = historyRepository;
            _databaseCreator = (IRelationalDatabaseCreator)databaseCreator;
            _migrationsSqlGenerator = migrationsSqlGenerator;
            _sqlCommandBuilder = sqlCommandBuilder;
            _sqlCommandBuilder = sqlCommandBuilder;
            _connection = connection;
            _sqlGenerator = sqlGenerator;
            _logger = logger;
            _activeProvider = providerServices.InvariantName;
        }
示例#2
0
        public Migrator(
            [NotNull] MigrationAssembly migrationAssembly,
            [NotNull] IHistoryRepository historyRepository,
            [NotNull] IDataStoreCreator dataStoreCreator,
            [NotNull] IMigrationSqlGenerator migrationSqlGenerator,
            [NotNull] SqlStatementExecutor executor,
            [NotNull] IRelationalConnection connection,
            [NotNull] IModelDiffer modelDiffer,
            [NotNull] IModel model,
            [NotNull] MigrationIdGenerator idGenerator,
            [NotNull] ISqlGenerator sqlGenerator)
        {
            Check.NotNull(migrationAssembly, nameof(migrationAssembly));
            Check.NotNull(historyRepository, nameof(historyRepository));
            Check.NotNull(dataStoreCreator, nameof(dataStoreCreator));
            Check.NotNull(migrationSqlGenerator, nameof(migrationSqlGenerator));
            Check.NotNull(executor, nameof(executor));
            Check.NotNull(connection, nameof(connection));
            Check.NotNull(modelDiffer, nameof(modelDiffer));
            Check.NotNull(model, nameof(model));
            Check.NotNull(idGenerator, nameof(idGenerator));
            Check.NotNull(sqlGenerator, nameof(sqlGenerator));

            _migrationAssembly = migrationAssembly;
            _historyRepository = historyRepository;
            _dataStoreCreator = (IRelationalDataStoreCreator)dataStoreCreator;
            _migrationSqlGenerator = migrationSqlGenerator;
            _executor = executor;
            _connection = connection;
            _modelDiffer = modelDiffer;
            _model = model;
            _idGenerator = idGenerator;
            _sqlGenerator = sqlGenerator;
        }
示例#3
0
 /// <summary>
 /// 初始化 <see cref="Database"/> 类的新实例。
 /// </summary>
 /// <param name="loggerFactory">日志工厂接口。</param>
 /// <param name="factory">数据库提供者工厂类。</param>
 /// <param name="options">配置选项。</param>
 /// <param name="sqlGenerator">SQL辅助接口。</param>
 protected Database(ILoggerFactory loggerFactory, DbProviderFactory factory, IOptions<DataSourceOptions> options, ISqlGenerator sqlGenerator)
 {
     _factory = factory;
     _sqlGenerator = sqlGenerator;
     _connectionString = options.Value.ConnectionString;
     _prefix = options.Value.Prefix.EscapePrefix();
     Logger = loggerFactory.CreateLogger<Database>();
 }
        protected DrapperManager(ISqlGenerator generator, IDbConnection dbConnection, ISqlDialect dialect)
        {
            Dialect = dialect;
            Generator = generator;
            DbConnection = dbConnection;
            Database = new Database(dbConnection, generator);

            Init();
        }
 void test(string tableText, string expected, ISqlGenerator sqlGenerator)
 {
     SqlGenerator.G.SqlGenerator = sqlGenerator;
     ParseTable parseTable = new ParseTable();
     Table table = parseTable.ParseTableData(tableText);
     string result = table.ToCreateScript();
     if (result != expected)
         throw new ApplicationException("Test failed");
 }
        public SqliteQuerySqlGeneratorFactory(
            [NotNull] IRelationalCommandBuilderFactory commandBuilderFactory,
            [NotNull] ISqlGenerator sqlGenerator,
            [NotNull] IParameterNameGeneratorFactory parameterNameGeneratorFactory)
        {
            Check.NotNull(commandBuilderFactory, nameof(commandBuilderFactory));
            Check.NotNull(sqlGenerator, nameof(sqlGenerator));
            Check.NotNull(parameterNameGeneratorFactory, nameof(parameterNameGeneratorFactory));

            _commandBuilderFactory = commandBuilderFactory;
            _sqlGenerator = sqlGenerator;
            _parameterNameGeneratorFactory = parameterNameGeneratorFactory;
        }
 public string GetSql(ISqlGenerator sqlGenerator, IDictionary<string, object> parameters)
 {
     string seperator = Operator == GroupOperator.And ? " AND " : " OR ";
     return "(" + Predicates.Aggregate(new StringBuilder(),
         (sb, p) => (sb.Length == 0 ? sb : sb.Append(seperator)).Append(p.GetSql(sqlGenerator, parameters)),
         sb =>
         {
             var s = sb.ToString();
             if (s.Length == 0) return sqlGenerator.Configuration.Dialect.EmptyExpression; 
             return s;
         }
         ) + ")";
 }
        public SqliteModificationCommandBatchFactory(
            [NotNull] IRelationalCommandBuilderFactory commandBuilderFactory,
            [NotNull] ISqlGenerator sqlGenerator,
            [NotNull] IUpdateSqlGenerator updateSqlGenerator,
            [NotNull] IRelationalValueBufferFactoryFactory valueBufferFactoryFactory)
        {
            Check.NotNull(commandBuilderFactory, nameof(commandBuilderFactory));
            Check.NotNull(sqlGenerator, nameof(sqlGenerator));
            Check.NotNull(updateSqlGenerator, nameof(updateSqlGenerator));
            Check.NotNull(valueBufferFactoryFactory, nameof(valueBufferFactoryFactory));

            _commandBuilderFactory = commandBuilderFactory;
            _sqlGenerator = sqlGenerator;
            _updateSqlGenerator = updateSqlGenerator;
            _valueBufferFactoryFactory = valueBufferFactoryFactory;
        }
        protected virtual string GetColumnName(Type entityType, ISqlGenerator sqlGenerator, string propertyName)
        {
            IClassMapper map = sqlGenerator.Configuration.GetMap(entityType);
            if (map == null)
            {
                throw new NullReferenceException(string.Format("Map was not found for {0}", entityType));
            }

            IPropertyMap propertyMap = map.Properties.SingleOrDefault(p => p.Name == propertyName);
            if (propertyMap == null)
            {
                throw new NullReferenceException(string.Format("{0} was not found for {1}", propertyName, entityType));
            }

            return sqlGenerator.GetColumnName(map, propertyMap, false);
        }
        public SqlServerModificationCommandBatchFactory(
            [NotNull] IRelationalCommandBuilderFactory commandBuilderFactory,
            [NotNull] ISqlGenerator sqlGenerator,
            [NotNull] ISqlServerUpdateSqlGenerator updateSqlGenerator,
            [NotNull] IRelationalValueBufferFactoryFactory valueBufferFactoryFactory,
            [NotNull] IDbContextOptions options)
        {
            Check.NotNull(commandBuilderFactory, nameof(commandBuilderFactory));
            Check.NotNull(sqlGenerator, nameof(sqlGenerator));
            Check.NotNull(updateSqlGenerator, nameof(updateSqlGenerator));
            Check.NotNull(valueBufferFactoryFactory, nameof(valueBufferFactoryFactory));
            Check.NotNull(options, nameof(options));

            _commandBuilderFactory = commandBuilderFactory;
            _sqlGenerator = sqlGenerator;
            _updateSqlGenerator = updateSqlGenerator;
            _valueBufferFactoryFactory = valueBufferFactoryFactory;
            _options = options;
        }
示例#11
0
 public virtual void SetSqlGenerator()
 {
     Generator = new SqlServerSqlGenerator();
 }
示例#12
0
 /// <summary>
 /// Gets the join type value.
 /// </summary>
 /// <param name="j">The j.</param>
 /// <param name="generator"></param>
 /// <returns></returns>
 public static string GetJoinTypeValue(ISqlGenerator generator, JoinType j)
 {
     string result = generator.sqlFragment.INNER_JOIN;
     switch(j)
     {
         case JoinType.Outer:
             result = generator.sqlFragment.OUTER_JOIN;
             break;
         case JoinType.LeftInner:
             /*
              * 修 改 人:Empty(AllEmpty)
              * QQ    群:327360708
              * 博客地址:http://www.cnblogs.com/EmptyFS/
              * 修改时间:2013-09-23
              * 修改说明:将generator.sqlFragment.LEFT_INNER_JOIN改为generator.sqlFragment.LEFT_JOIN
              *			 修改后生成的SQL外连接语句就从错误的LEFT INNER JOIN变为LEFT JOIN
              *********************************************/
             result = generator.sqlFragment.LEFT_JOIN;
             break;
         case JoinType.LeftOuter:
             result = generator.sqlFragment.LEFT_OUTER_JOIN;
             break;
         case JoinType.RightInner:
             /*
              * 修 改 人:Empty(AllEmpty)
              * QQ    群:327360708
              * 博客地址:http://www.cnblogs.com/EmptyFS/
              * 修改时间:2013-09-23
              * 修改说明:将generator.sqlFragment.RIGHT_INNER_JOIN改为generator.sqlFragment.RIGHT_JOIN
              *			 修改后生成的SQL外连接语句就从错误的RIGHT INNER JOIN变为RIGHT JOIN
              *********************************************/
             result = generator.sqlFragment.RIGHT_JOIN;
             break;
         case JoinType.RightOuter:
             result = generator.sqlFragment.RIGHT_OUTER_JOIN;
             break;
         case JoinType.Cross:
             result = generator.sqlFragment.CROSS_JOIN;
             break;
         case JoinType.NotEqual:
             result = generator.sqlFragment.UNEQUAL_JOIN;
             break;
     }
     return result;
 }
示例#13
0
 //NOTE: Because this is a "Dependency Injection Oriented Package"
 //we need to pass the database connection and the SQL Generator as parameters
 public ObuhvatSektoraRepository(OracleConnection connection,
                                 ISqlGenerator <ObuhvatSektora> sqlGenerator)
     : base(connection, sqlGenerator)
 {
 }
示例#14
0
 public PackageWriter([NotNull] IFileSystem fileSystemProvider, [NotNull] ISqlGenerator sqlGenerator, [NotNull] string outputPath)
 {
     this.fileSystemProvider = fileSystemProvider;
     this.sqlGenerator       = sqlGenerator;
     this.outputPath         = outputPath;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="DapperAsyncImplementor"/> class.
 /// </summary>
 /// <param name="sqlGenerator">The SQL generator.</param>
 public DapperAsyncImplementor(ISqlGenerator sqlGenerator)
     : base(sqlGenerator)
 {
 }
示例#16
0
 private void readUI()
 {
     SelectedGenerator = ((SqlGeneratorItem)cmbGenerator.SelectedItem).Generator;
     selectedTypeMap = ((TypeMapItem)cmbTypeMap.SelectedItem).TypeMap;
     SelectedGenerator.TypeMap = selectedTypeMap;
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="connection"></param>
 protected DataRepository(IDbConnection connection, ISqlGenerator <TEntity> sqlGenerator)
     : base(connection)
 {
     SqlGenerator = sqlGenerator;
 }
        protected MigrationSqlGenerator([NotNull] ISqlGenerator sqlGenerator)
        {
            Check.NotNull(sqlGenerator, nameof(sqlGenerator));

            _sql = sqlGenerator;
        }
示例#19
0
 /// <summary>
 ///     Constructor
 /// </summary>
 public DapperRepository(IDbConnection connection, ISqlGenerator <TEntity> sqlGenerator)
     : base(connection, sqlGenerator)
 {
 }
示例#20
0
 /// <summary>
 ///     Constructor
 /// </summary>
 public DapperRepository(IDbConnection connection, IMapper mapper, ISqlGenerator <TEntity> sqlGenerator)
 {
     Connection   = connection;
     SqlGenerator = sqlGenerator;
     _mapper      = mapper;
 }
 /// <summary>
 ///     Constructor
 /// </summary>
 public DapperRepository(IDbConnection connection, SqlGeneratorConfig config)
 {
     Connection   = connection;
     SqlGenerator = new SqlGenerator <TEntity>(config);
 }
 /// <summary>
 ///     Constructor
 /// </summary>
 public DapperRepository(IDbConnection connection, ESqlConnector sqlConnector)
 {
     Connection   = connection;
     SqlGenerator = new SqlGenerator <TEntity>(sqlConnector);
 }
 /// <summary>
 ///     Constructor
 /// </summary>
 public DapperRepository(IDbConnection connection)
 {
     Connection   = connection;
     SqlGenerator = new SqlGenerator <TEntity>(ESqlConnector.MSSQL);
 }
示例#24
0
        /// <summary>
        ///     Generates a SELECT query
        /// </summary>
        /// <param name="criteria"></param>
        /// <returns></returns>
        internal ExecutionQuery GenerateWithoutJoin(QueryCriteria criteria)
        {
            ISqlGenerator         isql           = null;
            List <IDataParameter> listParameters = null;
            ExecutionQuery        execQuery;
            SqlGenerator          generator = new SqlGenerator();

            DataFactory factory = new DataFactory();

            try
            {
                listParameters = new List <IDataParameter>();
                StringBuilder sbuild = new StringBuilder();

                execQuery = new ExecutionQuery();

                if (generatorType == QueryCriteriaGeneratorType.Select)
                {
                    execQuery = generator.GenerateSelectQuery(DatabaseServer.Access, criteria);
                }
                else if (generatorType == QueryCriteriaGeneratorType.Update)
                {
                    execQuery = generator.GenerateUpdateQuery(DatabaseServer.Access, criteria.TableName, criteria.Fields, false);
                }
                else if (generatorType == QueryCriteriaGeneratorType.Delete)
                {
                    execQuery = generator.GenerateDeleteQuery(DatabaseServer.Access, criteria.TableName);
                }

                //add to the intermediary objects
                if (execQuery.Parameters != null)
                {
                    foreach (IDataParameter var in execQuery.Parameters)
                    {
                        listParameters.Add(var);
                    }
                }
                sbuild.Append(execQuery.Query);

                //initialize generator
                isql = factory.InitializeSqlGenerator(DatabaseServer.Access);

                //append where clause
                sbuild.Append(" WHERE ");

                //generate the condition based on criteria
                string condition = GenerateCondition(criteria.TableName, criteria.CriteriaConditions, ref sbuild, ref listParameters);

                //more checks

                if (sbuild.ToString().EndsWith(" WHERE ") && condition.StartsWith(" ORDER BY "))
                {
                    if (condition.StartsWith(" ORDER BY"))
                    {
                        sbuild.Remove(sbuild.Length - WHERE_FIELD_LENGTH, WHERE_FIELD_LENGTH);
                    }
                }

                sbuild.Append(condition);

                //last check to prevent invalid sql queries
                if (sbuild.ToString().EndsWith(" WHERE "))
                {
                    sbuild.Remove(sbuild.Length - WHERE_FIELD_LENGTH, WHERE_FIELD_LENGTH);
                }

                execQuery       = new ExecutionQuery();
                execQuery.Query = sbuild.ToString();
                IDataParameter[] pmc = new IDataParameter[listParameters.Count];
                listParameters.CopyTo(pmc);
                execQuery.Parameters = pmc;

                return(execQuery);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (listParameters != null)
                {
                    listParameters.Clear();
                    listParameters = null;
                }
            }
        }
示例#25
0
 //NOTE: Because this is a "Dependency Injection Oriented Package"
 //we need to pass the database connection and the SQL Generator as parameters
 public HkoSifreRepository(OracleConnection connection, ISqlGenerator <HkoSifre> sqlGenerator)
     : base(connection, sqlGenerator)
 {
 }
 public TestModificationCommandBatchFactory(
     IRelationalCommandBuilderFactory commandBuilderfactory,
     ISqlGenerator sqlGenerator,
     IUpdateSqlGenerator updateSqlGenerator,
     IRelationalValueBufferFactoryFactory valueBufferFactoryFactory)
 {
     _commandBuilderFactory = commandBuilderfactory;
     _sqlGenerator = sqlGenerator;
     _updateSqlGenerator = updateSqlGenerator;
     _valueBufferFactoryFactory = valueBufferFactoryFactory;
 }
 public ConcreteMigrationSqlGenerator(
     IRelationalCommandBuilderFactory commandBuilderFactory,
     ISqlGenerator sqlGenerator,
     IRelationalTypeMapper typeMapper,
     IRelationalAnnotationProvider annotations)
     : base(commandBuilderFactory, sqlGenerator, typeMapper, annotations)
 {
 }
示例#28
0
        /// <summary>
        /// Builds the SQL statement.
        /// </summary>
        /// <returns></returns>
        public string BuildSqlStatement(MigrationDirection direction)
        {
            if (Provider == null)
            {
                Provider = DataService.Provider;
            }

            ISqlGenerator generator = DataService.GetGenerator(Provider);
            StringBuilder sql       = new StringBuilder();

            // based on direction build migration steps only when dealing with a
            // decendent class, there is no overridden Up or Down if doing a
            // migrate on dispose style so the step.Clear() would destroy all
            // our hard work.
            if (!migrateOnDispose)
            {
                steps.Clear();

                switch (direction)
                {
                case MigrationDirection.Up:
                    Up();
                    break;

                case MigrationDirection.Down:
                    Down();
                    break;
                }
            }

            //build sql
            foreach (MigrationStep step in steps)
            {
                switch (step.StepType)
                {
                case MigrationStepType.CreateTable:
                    // need to make sure this table has a pk defined
                    // if not, add one
                    // we'll do yer job for ya :)
                    if (step.Table.PrimaryKey == null)
                    {
                        step.Table.AddPrimaryKeyColumn();
                    }
                    sql.Append(generator.BuildCreateTableStatement(step.Table));
                    break;

                case MigrationStepType.DropTable:
                    sql.Append(generator.BuildDropTableStatement(step.Table));
                    break;

                case MigrationStepType.AddForeignKey:
                    sql.Append(generator.BuildForeignKeyStatement(step.Column, step.Column2));
                    break;

                case MigrationStepType.DropForeignKey:
                    sql.Append(generator.BuildForeignKeyDropStatement(step.Column, step.Column2));
                    break;

                case MigrationStepType.AddColumn:
                    sql.Append(generator.BuildAddColumnStatement(step.Table, step.Column));
                    break;

                case MigrationStepType.AlterColumn:
                    sql.Append(generator.BuildAlterColumnStatement(step.Column));
                    break;

                case MigrationStepType.DropColumn:
                    sql.Append(generator.BuildDropColumnStatement(step.Table, step.Column));
                    break;

                case MigrationStepType.ExecuteSql:
                    sql.Append(step.Sql);
                    break;

                default:
                    break;
                }

                sql.Append(";\r\n");
            }

            return(sql.ToString());
        }
示例#29
0
 /// <summary>
 /// 初始化类<see cref="QueryContext{TModel}"/>。
 /// </summary>
 /// <param name="model">模型接口。</param>
 /// <param name="sqlHelper">SQL辅助接口。</param>
 /// <param name="visitorFactory">表达式解析工厂接口。</param>
 /// <param name="sqlGenerator">SQL脚本生成接口。</param>
 /// <param name="db">数据库接口。</param>
 public QueryContext(IModel model, ISqlHelper sqlHelper, IExpressionVisitorFactory visitorFactory, ISqlGenerator sqlGenerator, IDatabase db)
 {
     _visitorFactory = visitorFactory;
     _sqlGenerator   = sqlGenerator;
     _db             = db;
     Model           = model;
     SqlHelper       = sqlHelper;
     Entity          = Model.GetEntity(typeof(TModel));
 }
示例#30
0
 //NOTE: Because this is a "Dependency Injection Oriented Package"
 //we need to pass the database connection and the SQL Generator as parameters
 public Nkz7Repository(OracleConnection connection, ISqlGenerator <Nkz7> sqlGenerator)
     : base(connection, sqlGenerator)
 {
 }
示例#31
0
 public Command(ICommandManager cmdManager, ISqlGenerator <T> sqlGenerator)
 {
     _cmdManager   = cmdManager;
     _sqlGenerator = sqlGenerator;
 }
示例#32
0
 public GenericSqlGenerator(ISqlGenerator concreteGenerator, MessageAdapter messages)
 {
     this.concreteGenerator = concreteGenerator;
     this.messages          = messages;
 }
示例#33
0
 public SqLite3Executer(NamedConnectionString connectionString, ISqlGenerator sqlGenerator = null)
     : base(connectionString, sqlGenerator)
 {
 }
示例#34
0
 public DapperImplementor(ISqlGenerator sqlGenerator, DataBaseType dbType)
 {
     SqlGenerator = sqlGenerator;
     DbType       = dbType;
 }
示例#35
0
        protected ModificationCommandBatch([NotNull] ISqlGenerator sqlGenerator)
        {
            Check.NotNull(sqlGenerator, nameof(sqlGenerator));

            SqlGenerator = sqlGenerator;
        }
 public abstract string GetSql(ISqlGenerator sqlGenerator, IDictionary <string, object> parameters);
示例#37
0
 public SchemaTransitionGenerator(ISqlGenerator concreteGenerator, NDO.Mapping.NDOMapping mappings)
 {
     provider = NDOProviderFactory.Instance[concreteGenerator.ProviderName];
     this.concreteGenerator = concreteGenerator;
     this.mappings          = mappings;
 }
 /// <summary>
 /// 初始化类<see cref="SqlServerMigrationsSqlGenerator"/>。
 /// </summary>
 /// <param name="sql">SQL辅助实例。</param>
 public SqlServerMigrationsSqlGenerator(ISqlGenerator sql) : base(sql)
 {
 }
 public AccountRepository(IDbConnection connection, ISqlGenerator <Account> sqlGenerator) : base(connection, sqlGenerator)
 {
 }
示例#40
0
 public DapperImplementor(ISqlGenerator sqlGenerator)
 {
     SqlGenerator = sqlGenerator;
 }
 public SqliteMigrationSqlGenerator(
     [NotNull] ISqlGenerator sqlGenerator)
     : base(sqlGenerator)
 {
     _sql = sqlGenerator;
 }
示例#42
0
 public StudentRepository(IDbConnection connection, ISqlGenerator <Students> sqlGenerator)
     : base(connection, sqlGenerator)
 {
 }
示例#43
0
 public SqlGeneratorItem(string Name, ISqlGenerator Generator)
 {
     this.Name = Name;
     this.Generator = Generator;
 }
示例#44
0
        /// <summary>
        ///     Generates the sql query condition
        /// </summary>
        /// <param name="tableName">Name of the datbase table</param>
        /// <param name="conditions">Criteria conditions </param>
        /// <param name="sbSqlHeader">StringBuilder which contains the SELECT part of the sql query build so far</param>
        /// <param name="listParameters">List with used parameters</param>
        /// <returns></returns>
        internal string GenerateCondition(string tableName, CriteriaCondition[] conditions, ref StringBuilder sbSqlHeader, ref List <IDataParameter> listParameters)
        {
            //keeps the order by part of the query
            StringBuilder sbOrderByCriteria = new StringBuilder();
            //holds the generated query
            StringBuilder sbuild = new StringBuilder();
            ISqlGenerator isql   = null;

            SqlGenerator generator = new SqlGenerator();

            DataConvertor converter = new DataConvertor();

            //temporary vars
            string fieldName  = string.Empty;
            int    index      = -1;
            string tempString = string.Empty;

            List <string> listParameterNames = null;

            DataFactory factory = new DataFactory();

            try
            {
                listParameterNames = new List <string>();

                //initialize generator
                isql = factory.InitializeSqlGenerator(DatabaseServer.Access);

                //generate conditions
                for (int i = 0; i < conditions.Length; i++)
                {
                    //check if we generate "AND" operator
                    if (i > 0)
                    {
                        if ((conditions[i].CriteriaOperator != CriteriaOperator.OrderBy) && (conditions[i].CriteriaOperator != CriteriaOperator.Or) &&
                            (conditions[i - 1].CriteriaOperator != CriteriaOperator.Or) && (conditions[i - 1].CriteriaOperator != CriteriaOperator.Not))
                        {
                            sbuild.Append(" AND ");
                        }
                    }

                    DatabaseField field = conditions[i].Field;

                    switch (conditions[i].CriteriaOperator)
                    {
                    case CriteriaOperator.Between:
                        //here we must have 2 parameters with two diffferent values and name. These
                        //parameters must be generated based on a single name.

                        IDataParameter paramBetweenFirst  = converter.ConvertToDataParameter(DatabaseServer.Access, tableName, field, ref listParameterNames);
                        IDataParameter paramBetweenSecond = converter.ConvertToDataParameter(DatabaseServer.Access, tableName, field, ref listParameterNames);

                        paramBetweenFirst.ParameterName  = paramBetweenFirst.ParameterName + "First";
                        paramBetweenSecond.ParameterName = paramBetweenSecond.ParameterName + "Second";

                        //set the parameter's value and add it to the list
                        paramBetweenFirst.Value = conditions[i].Values[0];
                        listParameters.Add(paramBetweenFirst);

                        sbuild.Append(" " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + conditions[i].Field.fieldName + " BETWEEN " +
                                      isql.GetValue(paramBetweenFirst));
                        sbuild.Append(" AND ");

                        //set the  value of the second parameter
                        paramBetweenSecond.Value = conditions[i].Values[1];
                        listParameters.Add(paramBetweenSecond);
                        sbuild.Append(isql.GetValue(paramBetweenSecond));
                        break;

                    case CriteriaOperator.Not:
                        sbuild.Append(" NOT");
                        break;

                    case CriteriaOperator.Different:
                        field.fieldValue = conditions[i].Values[0];
                        IDataParameter paramDifferent = converter.ConvertToDataParameter(DatabaseServer.Access, tableName, field, ref listParameterNames);
                        listParameters.Add(paramDifferent);
                        sbuild.Append(" " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + field.fieldName + "<>" + isql.GetValue(paramDifferent));
                        break;

                    case CriteriaOperator.Like:
                        field.fieldValue = "*" + conditions[i].Values[0] + "*";
                        IDataParameter paramLike = converter.ConvertToDataParameter(DatabaseServer.Access, tableName, field, ref listParameterNames);
                        listParameters.Add(paramLike);
                        sbuild.Append(" " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + field.fieldName + " LIKE " + isql.GetValue(paramLike));
                        break;

                    case CriteriaOperator.LikeEnd:
                        field.fieldValue = "*" + conditions[i].Values[0];
                        IDataParameter paramLikeEnd = converter.ConvertToDataParameter(DatabaseServer.Access, tableName, field, ref listParameterNames);
                        listParameters.Add(paramLikeEnd);
                        sbuild.Append(" " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + field.fieldName + " LIKE " + isql.GetValue(paramLikeEnd));
                        break;

                    case CriteriaOperator.LikeStart:
                        field.fieldValue = conditions[i].Values[0] + "*";
                        IDataParameter paramLikeStart = converter.ConvertToDataParameter(DatabaseServer.Access, tableName, field, ref listParameterNames);
                        listParameters.Add(paramLikeStart);
                        sbuild.Append(" " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + field.fieldName + " LIKE " + isql.GetValue(paramLikeStart));
                        break;

                    case CriteriaOperator.Equality:
                        field.fieldValue = conditions[i].Values[0];
                        IDataParameter paramEquality = converter.ConvertToDataParameter(DatabaseServer.Access, tableName, field, ref listParameterNames);
                        listParameters.Add(paramEquality);
                        sbuild.Append(" " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + field.fieldName + "=" + isql.GetValue(paramEquality));
                        break;

                    case CriteriaOperator.IsNull:
                        sbuild.Append(" " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + field.fieldName + " is null");
                        break;

                    case CriteriaOperator.IsNotNull:
                        sbuild.Append(" " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + field.fieldName + " is not null");
                        break;

                    case CriteriaOperator.Or:
                        sbuild.Append(" OR");
                        break;

                    case CriteriaOperator.Smaller:
                        field.fieldValue = conditions[i].Values[0];

                        IDataParameter paramSmaller = converter.ConvertToDataParameter(DatabaseServer.Access, tableName, field, ref listParameterNames);
                        listParameters.Add(paramSmaller);

                        sbuild.Append(" " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + field.fieldName + " < " + isql.GetValue(paramSmaller));
                        break;

                    case CriteriaOperator.SmallerOrEqual:
                        field.fieldValue = conditions[i].Values[0];

                        IDataParameter paramSmallerOrEqual = converter.ConvertToDataParameter(DatabaseServer.Access, tableName, field, ref listParameterNames);
                        listParameters.Add(paramSmallerOrEqual);

                        sbuild.Append(" " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + field.fieldName + " <= " + isql.GetValue(paramSmallerOrEqual));
                        break;

                    case CriteriaOperator.Higher:
                        field.fieldValue = conditions[i].Values[0];

                        IDataParameter paramHigher = converter.ConvertToDataParameter(DatabaseServer.Access, tableName, field, ref listParameterNames);
                        listParameters.Add(paramHigher);

                        sbuild.Append(" " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + field.fieldName + " > " + isql.GetValue(paramHigher));
                        break;

                    case CriteriaOperator.HigherOrEqual:
                        field.fieldValue = conditions[i].Values[0];

                        IDataParameter paramHigherOrEqual = converter.ConvertToDataParameter(DatabaseServer.Access, tableName, field, ref listParameterNames);
                        listParameters.Add(paramHigherOrEqual);

                        sbuild.Append(" " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + field.fieldName + " >= " + isql.GetValue(paramHigherOrEqual));
                        break;

                    case CriteriaOperator.OrderBy:
                        if (sbOrderByCriteria.Length == 0)
                        {
                            //add the operator for the first criteria
                            sbOrderByCriteria.Append("ORDER BY " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + field.fieldName + " " + conditions[i].Values[0]);
                        }
                        else
                        {
                            //add "," for the subsequent criterias
                            sbOrderByCriteria.Append(", " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + field.fieldName + " " + conditions[i].Values[0]);
                        }
                        break;

                    //NOTE :  DISTICT requires modification of the sql header. Also DISTINCT clause requires that
                    //the distinct field should be the first one in the list.
                    case CriteriaOperator.Distinct:
                        //get the field
                        fieldName = generator.GetTableName(DatabaseServer.Access, tableName) + "." + conditions[i].Field.fieldName;

                        //we have the field name now search for it in the fields list
                        index = sbSqlHeader.ToString().IndexOf(fieldName);

                        //now remove the field from the list.
                        if (index == -1)
                        {
                            throw new ArgumentException("Invalid Distinct clause");
                        }

                        tempString = sbSqlHeader.ToString();

                        tempString = tempString.Remove(index, fieldName.Length);

                        //add it at the beginning of the select
                        tempString = tempString.Insert(SELECT_FIELD_LENGTH, " distinct " + generator.GetTableName(DatabaseServer.Access, tableName) + "." + conditions[i].Field.fieldName);

                        sbSqlHeader.Remove(0, sbSqlHeader.Length);
                        sbSqlHeader.Append(tempString);
                        break;

                    //NOTE: MAX fields must be after SELECT statement
                    case CriteriaOperator.Max:
                        //get the field
                        fieldName = generator.GetTableName(DatabaseServer.Access, tableName) + "." + conditions[i].Field.fieldName;

                        //we have the field name now search for it in the fields list
                        index = sbSqlHeader.ToString().IndexOf(fieldName);

                        //now remove the field from the list.
                        if (index == -1)
                        {
                            throw new ArgumentException("Invalid MAX clause");
                        }

                        tempString = sbSqlHeader.ToString();

                        tempString = tempString.Remove(index, fieldName.Length);

                        //add it at the beginning of the select
                        tempString = tempString.Insert(SELECT_FIELD_LENGTH, " max(" + generator.GetTableName(DatabaseServer.Access, tableName) + "." + conditions[i].Field.fieldName + ")");

                        sbSqlHeader.Remove(0, sbSqlHeader.Length);
                        sbSqlHeader.Append(tempString);
                        break;

                    //NOTE: MIN fields must be after SELECT statement
                    case CriteriaOperator.Min:
                        //get the field
                        fieldName = generator.GetTableName(DatabaseServer.Access, tableName) + "." + conditions[i].Field.fieldName;

                        //we have the field name now search for it in the fields list
                        index = sbSqlHeader.ToString().IndexOf(fieldName);

                        //now remove the field from the list.
                        if (index == -1)
                        {
                            throw new ArgumentException("Invalid MIN clause");
                        }

                        tempString = sbSqlHeader.ToString();

                        tempString = tempString.Remove(index, fieldName.Length);

                        //add it at the beginning of the select
                        tempString = tempString.Insert(SELECT_FIELD_LENGTH, " min(" + generator.GetTableName(DatabaseServer.Access, tableName) + "." + conditions[i].Field.fieldName + ")");

                        sbSqlHeader.Remove(0, sbSqlHeader.Length);
                        sbSqlHeader.Append(tempString);
                        break;

                    //NOTE: COUNT fields must be after SELECT statement
                    case CriteriaOperator.Count:
                        //get the field
                        fieldName = generator.GetTableName(DatabaseServer.Access, tableName) + "." + conditions[i].Field.fieldName;

                        //we have the field name now search for it in the fields list
                        index = sbSqlHeader.ToString().IndexOf(fieldName);

                        //now remove the field from the list.
                        if (index == -1)
                        {
                            throw new ArgumentException("Invalid count clause");
                        }

                        tempString = sbSqlHeader.ToString();

                        tempString = tempString.Remove(index, fieldName.Length);

                        //add it at the beginning of the select
                        tempString = tempString.Insert(SELECT_FIELD_LENGTH, " count(" + generator.GetTableName(DatabaseServer.Access, tableName) + "." + conditions[i].Field.fieldName + ")");

                        sbSqlHeader.Remove(0, sbSqlHeader.Length);
                        sbSqlHeader.Append(tempString);
                        break;
                    }
                }

                //last check to prevent invalid sql queries
                //conditions remove the "WHERE".
                if (sbuild.ToString().EndsWith(" WHERE "))
                {
                    sbuild.Remove(sbuild.Length - WHERE_FIELD_LENGTH, WHERE_FIELD_LENGTH);
                }

                //check if we have conditions which don't require a "WHERE" clause
                if (sbuild.Length == 0 && sbOrderByCriteria.Length > 0)
                {
                    //remove from query header
                    sbSqlHeader.Remove(sbSqlHeader.Length - WHERE_FIELD_LENGTH, WHERE_FIELD_LENGTH);
                }
                if (sbOrderByCriteria.Length > 0)
                {
                    sbuild.Append(" " + sbOrderByCriteria);
                }

                return(sbuild.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (listParameterNames != null)
                {
                    listParameterNames.Clear();
                    listParameterNames = null;
                }
            }
        }
 public ModificationCommandBatchFake(DbDataReader reader, ISqlGenerator sqlGenerator = null)
     : base(sqlGenerator ?? new FakeSqlGenerator(), new MetadataExtensionProviderFake())
 {
     _reader = reader;
     ShouldAddCommand = true;
     ShouldValidateSql = true;
 }
示例#46
0
 public TestModificationCommandBatch(ISqlGenerator sqlGenerator)
     : base(sqlGenerator)
 {
 }
 /// <summary>
 /// 初始化类<see cref="MigrationsSqlGenerator"/>。
 /// </summary>
 /// <param name="sql">SQL辅助实例。</param>
 protected MigrationsSqlGenerator(ISqlGenerator sql)
 {
     Sql = sql;
 }
示例#48
0
 public DatabaseAdapter(IDbConnection conn, ISqlGenerator sqlGenerator)
 {
     this.DbConnection = conn;
     this.sqlGenerator = sqlGenerator;
 }
 /// <summary>
 /// 初始化 <see cref="Database"/> 类的新实例。
 /// </summary>
 /// <param name="factory">日志工厂接口。</param>
 /// <param name="options">配置选项。</param>
 /// <param name="sqlGenerator">SQL辅助类接口。</param>
 public SqlServerDatabase(ILoggerFactory factory, IOptions<DataSourceOptions> options, ISqlGenerator sqlGenerator) : base(factory, SqlClientFactory.Instance, options, sqlGenerator)
 {
 }
示例#50
0
文件: Join.cs 项目: 6nop/SubSonic-3.0
 /// <summary>
 /// Gets the join type value.
 /// </summary>
 /// <param name="j">The j.</param>
 /// <param name="generator"></param>
 /// <returns></returns>
 public static string GetJoinTypeValue(ISqlGenerator generator, JoinType j)
 {
     string result = generator.sqlFragment.INNER_JOIN;
     switch(j)
     {
         case JoinType.Outer:
             result = generator.sqlFragment.OUTER_JOIN;
             break;
         case JoinType.LeftInner:
             result = generator.sqlFragment.LEFT_INNER_JOIN;
             break;
         case JoinType.LeftOuter:
             result = generator.sqlFragment.LEFT_OUTER_JOIN;
             break;
         case JoinType.RightInner:
             result = generator.sqlFragment.RIGHT_INNER_JOIN;
             break;
         case JoinType.RightOuter:
             result = generator.sqlFragment.RIGHT_OUTER_JOIN;
             break;
         case JoinType.Cross:
             result = generator.sqlFragment.CROSS_JOIN;
             break;
         case JoinType.NotEqual:
             result = generator.sqlFragment.UNEQUAL_JOIN;
             break;
     }
     return result;
 }
示例#51
0
 public DataRepository(IDbConnection connection, ISqlGenerator <TEntity> sqlGenerator) : base(connection)
 {
     _sqlGenerator = sqlGenerator;
 }
 public abstract string GetSql(ISqlGenerator sqlGenerator, IDictionary<string, object> parameters);
示例#53
0
 /// <summary>
 /// 初始化类<see cref="SearchManager"/>。
 /// </summary>
 /// <param name="model">模型管理接口。</param>
 /// <param name="indexes">索引数据库操作接口。</param>
 /// <param name="searches">搜索实体数据库操作接口。</param>
 /// <param name="generator">SQL生成器。</param>
 /// <param name="sqlHelper">SQL辅助接口。</param>
 public SearchManager(IModel model, IRepository <SearchIndex> indexes, IRepository <SearchDescriptor> searches, ISqlGenerator generator, ISqlHelper sqlHelper)
 {
     _model     = model;
     _indexes   = indexes;
     _searches  = searches;
     _generator = generator;
     _sqlHelper = sqlHelper;
 }
 public TestModificationCommandBatchFactory(
     ISqlGenerator sqlGenerator)
     : base(sqlGenerator)
 {
 }
 //NOTE: Because this is a "Dependency Injection Oriented Package"
 //we need to pass the database connection and the SQL Generator as parameters
 public DefaultTimeframeRepository(OracleConnection connection,
                                   ISqlGenerator <DefaultTimeframe> sqlGenerator)
     : base(connection, sqlGenerator)
 {
 }