private void ProcessQueryValues(StringBuilder sb, CompareSegment segment, QueryBuildInfo buildInfo,
                                        IDbLayer dbLayer)
        {
            sb.Append(" IN ");
            var querySegment = (QuerySegment)segment.Right;

            ProcessQuery(sb, querySegment, buildInfo, dbLayer);
        }
        private void ProcessBetween(StringBuilder sb, CompareSegment segment, QueryBuildInfo buildInfo, IDbLayer dbLayer)
        {
            sb.Append(" BETWEEN ? AND ? ");
            var valueSegment = (ValueSegment)segment.Right;

            object[] values = valueSegment.Values;
            for (int i = 0, valuesLength = 2; i < valuesLength; i++)
            {
                Object value = values[i];
                var    param = new QueryExecParam();
                param.Index = buildInfo.ExecInfo.Params.Count;
                param.Type  = valueSegment.Type;
                param.Value = value;
                buildInfo.ExecInfo.Params.Add(param);
            }
        }
        private void ProcessInValues(StringBuilder sb, CompareSegment segment, QueryBuildInfo buildInfo)
        {
            sb.Append(" IN (");
            var valueSegment = (ValueSegment)segment.Right;

            object[] values = valueSegment.Values;
            for (int i = 0, valuesLength = values.Length; i < valuesLength; i++)
            {
                Object value = values[i];
                if (i > 0)
                {
                    sb.Append(",");
                }
                sb.Append("?");

                var param = new QueryExecParam();
                param.Index = buildInfo.ExecInfo.Params.Count;
                param.Type  = valueSegment.Type;
                param.Value = value;
                buildInfo.ExecInfo.Params.Add(param);
            }
            sb.Append(") ");
        }
Exemple #4
0
        protected T BaseNotExists()
        {
            var segment = new CompareSegment(CompareSegmentMode.NotExists);

            return(AddSegment(segment));
        }
        private void ProcessCompare(StringBuilder sb, CompareSegment segment, QueryBuildInfo buildInfo, IDbLayer dbLayer)
        {
            if (segment.Left != null)
            {
                Process(sb, segment.Left, buildInfo, dbLayer);
            }

            switch (segment.Mode)
            {
            case CompareSegmentMode.Between:
                ProcessBetween(sb, segment, buildInfo, dbLayer);
                return;

            case CompareSegmentMode.In:
                switch (segment.Right.SegmentType)
                {
                case SegmentType.Value:
                    ProcessInValues(sb, segment, buildInfo);
                    break;

                case SegmentType.Query:
                    ProcessQueryValues(sb, segment, buildInfo, dbLayer);
                    break;
                }
                return;

            case CompareSegmentMode.Exists:
                sb.Append(" EXISTS ");
                break;

            case CompareSegmentMode.NotExists:
                sb.Append(" NOT EXISTS ");
                break;

            case CompareSegmentMode.Eq:
                sb.Append(" = ");
                break;

            case CompareSegmentMode.Ge:
                sb.Append(" >= ");
                break;

            case CompareSegmentMode.Gt:
                sb.Append(" > ");
                break;

            case CompareSegmentMode.Le:
                sb.Append(" <= ");
                break;

            case CompareSegmentMode.Lt:
                sb.Append(" < ");
                break;

            case CompareSegmentMode.Like:
                sb.Append(" like ");
                break;

            case CompareSegmentMode.Neq:
                sb.Append(" <> ");
                break;

            default:
                break;
            }
            Process(sb, segment.Right, buildInfo, dbLayer);
        }
Exemple #6
0
        protected T BaseIn()
        {
            var segment = new CompareSegment(CompareSegmentMode.In);

            return(AddSegment(segment));
        }
Exemple #7
0
        protected T BaseBetween()
        {
            var segment = new CompareSegment(CompareSegmentMode.Between);

            return(AddSegment(segment));
        }
Exemple #8
0
        protected T BaseLike()
        {
            var segment = new CompareSegment(CompareSegmentMode.Like);

            return(AddSegment(segment));
        }
Exemple #9
0
        protected T BaseNeq()
        {
            var segment = new CompareSegment(CompareSegmentMode.Neq);

            return(AddSegment(segment));
        }
Exemple #10
0
        protected T BaseGt()
        {
            var segment = new CompareSegment(CompareSegmentMode.Gt);

            return(AddSegment(segment));
        }