Beispiel #1
0
        public List <string> execute(string idx_field_name)
        {
            List <string> rtn_idx = receiver.get_index(idx_field_name);

            if (rtn_idx == null)
            {
                //CommandInvoker invoker = new CommandInvoker(svd);

                CreateIndexCommand cmd = new CreateIndexCommand(receiver, idx_field_name);

                invoker.add_command(cmd);

                invoker.execute_commands_and_iterate();

                rtn_idx = receiver.get_index(idx_field_name);
            }

            // By now this should either be set from the cache value
            // or recalculated.
            if (rtn_idx != null)
            {
                return(rtn_idx);
            }
            else
            {
                // throw exception
                return(null);
            }
        }// execute
        public override IASTNode VisitCreateIndex(SqlServerCommandParser.CreateIndexContext context)
        {
            CreateIndexCommand result = new CreateIndexCommand();

            result.Table = (SimpleTableSegment)Visit(context.tableName());
            result.Index = (IndexSegment)Visit(context.indexName());
            return(result);
        }
        public async Task <bool> CreateIndexAsync <TEntity>()
            where TEntity : RedisearchSerializable <TEntity>, new()
        {
            var database           = _redisConnection.GetDatabase();
            var createIndexCommand = CreateIndexCommand.Create <TEntity>();

            return(await createIndexCommand.ExecuteAsync(database).ConfigureAwait(false));
        }
        public bool CreateIndex <TEntity>()
            where TEntity : RedisearchSerializable <TEntity>, new()
        {
            var database           = _redisConnection.GetDatabase();
            var createIndexCommand = CreateIndexCommand.Create <TEntity>();

            return(createIndexCommand.Execute(database));
        }
Beispiel #5
0
        public List <string> execute(
            string idx_field_name,
            string filter_field_name,
            string filter_value
            )
        {
            Field         f_idx   = receiver.findInDict(idx_field_name);
            Field         f_ftr   = receiver.findInDict(filter_field_name);
            List <string> rtn_idx = receiver.get_index(idx_field_name);

            if (rtn_idx == null)
            {
                //CommandInvoker invoker = new CommandInvoker(receiver);

                CreateIndexCommand cmd1 = new CreateIndexCommand(receiver, idx_field_name);
                invoker.add_command(cmd1);

                CreateFilterCommand cmd2 = new CreateFilterCommand(receiver, filter_field_name, filter_value);
                invoker.add_command(cmd2);

                invoker.execute_commands_and_iterate();

                rtn_idx = receiver.get_index(idx_field_name);
            }

            // By now this should either be set from the cache value
            // or recalculated.
            if (rtn_idx != null)
            {
                return(rtn_idx);
            }
            else
            {
                return(null); // throw exception
            }
        }
        /// <summary>
        /// 新建索引。
        /// </summary>
        /// <param name="command">当前命令。</param>
        /// <param name="builder">SQL语句构建实例。</param>
        protected override void Generate(CreateIndexCommand command, IndentedStringBuilder builder)
        {
            base.Generate(command, builder);

            if (command.IsUnique && command.IsCustered != true)
            {
                builder.Append(" WHERE ");
                for (var i = 0; i < command.Columns.Length; i++)
                {
                    if (i != 0)
                    {
                        builder.Append(" AND ");
                    }

                    builder
                        .Append(Sql.DelimitIdentifier(command.Columns[i]))
                        .Append(" IS NOT NULL");
                }
            }
        }
        /// <summary>
        /// 新建索引。
        /// </summary>
        /// <param name="command">当前命令。</param>
        /// <param name="builder">SQL语句构建实例。</param>
        protected virtual void Generate(CreateIndexCommand command, IndentedStringBuilder builder)
        {
            Check.NotNull(command, nameof(command));
            Check.NotNull(builder, nameof(builder));

            builder.Append("CREATE ");

            if (command.IsUnique)
            {
                builder.Append("UNIQUE ");
            }

            IndexTraits(command, builder);

            builder
                .Append("INDEX ")
                .Append(Sql.DelimitIdentifier(Prefix(command.Name)))
                .Append(" ON ")
                .Append(Sql.DelimitIdentifier(Prefix(command.Table), command.Schema))
                .Append(" (")
                .Append(ColumnList(command.Columns))
                .Append(")");
        }
Beispiel #8
0
        public object executeCommand(string strSql)
        {
            object objReturn = null;

            if (_logSql)
                System.IO.File.AppendAllText (_database.strLogLoc, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ": "
                    + strSql + System.Environment.NewLine);

            strSql = strSql.RemoveNewlines(" ").BacktickQuotes(); // TODO: WHOA!  Super kludge for single quote escapes.  See "Grave accent" in idiosyncracies.

            // Sorry, I got tired of forgetting this.
            //if (!strSql.Trim().EndsWith(";"))
            //{
            //    throw new Exception("Unterminated command.");
            //}

            // TODO: This is assuming a single command.  Add splits by semi-colon.
            strSql = strSql.TrimEnd(';');

            string[] astrCmdTokens = strSql.StringToNonWhitespaceTokens2();    // TODO: We're almost always immediately doing this again in the executeStatements.

            // TODO: Want to ISqlCommand this stuff -- we need to have execute
            // methods that don't take strings but "command tokens".
            switch (astrCmdTokens[0].ToLower())    {
                case "insert":
                    _insertCommand = new InsertCommand(_database); // TODO: This is too much repeat instantiation.  Rethink that.
                    objReturn = _insertCommand.executeInsert(strSql);
                    break;

                case "select":
                    if (strSql.ToLower().StartsWith("select max("))
                    {
                        SelectMaxCommand selectMaxCmd = new SelectMaxCommand(_database);
                        objReturn = selectMaxCmd.executeStatement(strSql);
                    }
                    else
                    {
                        _selectCommand = new SelectCommand(_database);
                        objReturn = _selectCommand.executeStatement(strSql);
                    }
                    break;

                case "delete":
                    _deleteCommand = new DeleteCommand(_database);
                    _deleteCommand.executeStatement(strSql);
                    objReturn = "DELETE executed."; // TODO: Add ret val of how many rows returned
                    break;

                case "update":
                    _updateCommand = new UpdateCommand(_database);
                    _updateCommand.executeStatement(strSql);
                    objReturn = "UPDATE executed."; // TODO: Add ret val of how many rows returned
                    break;

                case "create":
                    switch (astrCmdTokens[1].ToLower())
                    {
                        case "table":
                            _createTableCommand = new CreateTableCommand(_database);
                            objReturn = _createTableCommand.executeStatement(strSql);
                            break;

                        case "index":
                            CreateIndexCommand createIndexCommand = new CreateIndexCommand(_database);
                            objReturn = createIndexCommand.executeStatement(strSql);
                            break;
                    }

                    break;

                case "drop":
                    DropTableCommand dropTableCommand = new DropTableCommand(_database);
                    dropTableCommand.executeStatement(strSql);
                    objReturn = @"Table dropped (or, if ""IF EXISTS"" was used, dropped iff found).";   // TODO: These are pretty sorry messages.  Have the executeStatement return something more informative.
                    break;

                default:
                    throw new SyntaxException("Syntax error: Unhandled command type.");
            }

            return objReturn;
        }
Beispiel #9
0
        public object executeCommand(string strSql)
        {
            object objReturn = null;

            if (_logSql)
            {
                System.IO.File.AppendAllText(_database.strLogLoc, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ": "
                                             + strSql + System.Environment.NewLine);
            }


            strSql = strSql.RemoveNewlines(" ").BacktickQuotes(); // TODO: WHOA!  Super kludge for single quote escapes.  See "Grave accent" in idiosyncracies.

            // Sorry, I got tired of forgetting this.
            //if (!strSql.Trim().EndsWith(";"))
            //{
            //    throw new Exception("Unterminated command.");
            //}

            // TODO: This is assuming a single command.  Add splits by semi-colon.
            strSql = strSql.TrimEnd(';');

            string[] astrCmdTokens = strSql.StringToNonWhitespaceTokens2();    // TODO: We're almost always immediately doing this again in the executeStatements.

            // TODO: Want to ISqlCommand this stuff -- we need to have execute
            // methods that don't take strings but "command tokens".
            switch (astrCmdTokens[0].ToLower())
            {
            case "insert":
                _insertCommand = new InsertCommand(_database);     // TODO: This is too much repeat instantiation.  Rethink that.
                objReturn      = _insertCommand.executeInsert(strSql);
                break;

            case "select":
                if (strSql.ToLower().StartsWith("select max("))
                {
                    SelectMaxCommand selectMaxCmd = new SelectMaxCommand(_database);
                    objReturn = selectMaxCmd.executeStatement(strSql);
                }
                else
                {
                    _selectCommand = new SelectCommand(_database);
                    objReturn      = _selectCommand.executeStatement(strSql);
                }
                break;

            case "delete":
                _deleteCommand = new DeleteCommand(_database);
                _deleteCommand.executeStatement(strSql);
                objReturn = "DELETE executed.";     // TODO: Add ret val of how many rows returned
                break;

            case "update":
                _updateCommand = new UpdateCommand(_database);
                _updateCommand.executeStatement(strSql);
                objReturn = "UPDATE executed.";     // TODO: Add ret val of how many rows returned
                break;

            case "create":
                switch (astrCmdTokens[1].ToLower())
                {
                case "table":
                    _createTableCommand = new CreateTableCommand(_database);
                    objReturn           = _createTableCommand.executeStatement(strSql);
                    break;

                case "index":
                    CreateIndexCommand createIndexCommand = new CreateIndexCommand(_database);
                    objReturn = createIndexCommand.executeStatement(strSql);
                    break;
                }

                break;

            case "drop":
                DropTableCommand dropTableCommand = new DropTableCommand(_database);
                dropTableCommand.executeStatement(strSql);
                objReturn = @"Table dropped (or, if ""IF EXISTS"" was used, dropped iff found).";       // TODO: These are pretty sorry messages.  Have the executeStatement return something more informative.
                break;

            default:
                throw new SyntaxException("Syntax error: Unhandled command type.");
            }

            return(objReturn);
        }