Example #1
0
 public DashboardEditorController()
 {
     eventButtons            = new List <AnalysisEventButtonVM> ();
     editDashboardKeyContext = new KeyContext();
     editDashboardKeyContext.AddAction(
         new KeyAction(App.Current.HotkeysService.GetByName(GeneralUIHotkeys.DELETE),
                       () => ViewModel.DeleteButton.Execute(ViewModel.Selection.FirstOrDefault()), 10)
         );
 }
Example #2
0
        protected override IBuildContext BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo)
        {
            var sequenceExpr    = methodCall.Arguments[0];
            var sequence        = builder.BuildSequence(new BuildInfo(buildInfo, sequenceExpr));
            var groupingType    = methodCall.Type.GetGenericArgumentsEx()[0];
            var keySelector     = (LambdaExpression)methodCall.Arguments[1].Unwrap();
            var elementSelector = (LambdaExpression)methodCall.Arguments[2].Unwrap();

            if (methodCall.Arguments[0].NodeType == ExpressionType.Call)
            {
                var call = (MethodCallExpression)methodCall.Arguments[0];

                if (call.Method.Name == "Select")
                {
                    var type = ((LambdaExpression)call.Arguments[1].Unwrap()).Body.Type;

                    if (type.IsGenericTypeEx() && type.GetGenericTypeDefinition() == typeof(ExpressionBuilder.GroupSubQuery <,>))
                    {
                        sequence = new SubQueryContext(sequence);
                    }
                }
            }

            var key      = new KeyContext(buildInfo.Parent, keySelector, sequence);
            var groupSql = builder.ConvertExpressions(key, keySelector.Body.Unwrap(), ConvertFlags.Key);

            if (sequence.SelectQuery.Select.IsDistinct ||
                sequence.SelectQuery.GroupBy.Items.Count > 0 ||
                groupSql.Any(_ => !(_.Sql is SqlField || _.Sql is SelectQuery.Column)))
            {
                sequence = new SubQueryContext(sequence);
                key      = new KeyContext(buildInfo.Parent, keySelector, sequence);
                groupSql = builder.ConvertExpressions(key, keySelector.Body.Unwrap(), ConvertFlags.Key);
            }

            foreach (var sql in groupSql)
            {
                sequence.SelectQuery.GroupBy.Expr(sql.Sql);
            }

            new QueryVisitor().Visit(sequence.SelectQuery.From, e =>
            {
                if (e.ElementType == QueryElementType.JoinedTable)
                {
                    var jt = (SelectQuery.JoinedTable)e;
                    if (jt.JoinType == SelectQuery.JoinType.Inner)
                    {
                        jt.IsWeak = false;
                    }
                }
            });

            var element = new SelectContext(buildInfo.Parent, elementSelector, sequence /*, key*/);
            var groupBy = new GroupByContext(buildInfo.Parent, sequenceExpr, groupingType, sequence, key, element);

            return(groupBy);
        }
        public void NextIdentity_CallTenTimes_ShouldIncrementEachCall()
        {
            var keyContext = new KeyContext();

            for (var i = 1; i <= 10; i++)
            {
                Assert.That(keyContext.NextIdentity, Is.EqualTo(i));
            }
        }
Example #4
0
            public GroupByContext(IBuildContext parent, Expression sequenceExpr, Type groupingType, IBuildContext sequence, KeyContext key, SelectContext element)
                : base(parent, sequence, null)
            {
                _sequenceExpr = sequenceExpr;
                _key          = key;
                _element      = element;
                _groupingType = groupingType;

                key.Parent = this;
            }
Example #5
0
		protected override IParseContext ParseMethodCall(ExpressionParser parser, IParseContext parent, MethodCallExpression methodCall, SqlQuery sqlQuery)
		{
			var sequence        = parser.ParseSequence(parent, methodCall.Arguments[0], sqlQuery);
			var sequenceExpr    = methodCall.Arguments[0];
			var groupingType    = methodCall.Type.GetGenericArguments()[0];
			var keySelector     = (LambdaExpression)methodCall.Arguments[1].Unwrap();
			var elementSelector = (LambdaExpression)methodCall.Arguments[2].Unwrap();

			if (methodCall.Arguments[0].NodeType == ExpressionType.Call)
			{
				var call = (MethodCallExpression)methodCall.Arguments[0];

				if (call.Method.Name == "Select")
				{
					var type = ((LambdaExpression)call.Arguments[1].Unwrap()).Body.Type;

					if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(ExpressionParser.GroupSubQuery<,>))
					{
						sequence = new SubQueryContext(sequence);
					}
				}
			}

			var key      = new KeyContext(keySelector, sequence);
			var groupSql = parser.ParseExpressions(key, keySelector.Body.Unwrap(), ConvertFlags.Key);

			if (groupSql.Any(_ => !(_.Sql is SqlField || _.Sql is SqlQuery.Column)))
			{
				sequence = new SubQueryContext(sequence);
				key      = new KeyContext(keySelector, sequence);
				groupSql = parser.ParseExpressions(key, keySelector.Body.Unwrap(), ConvertFlags.Key);
			}

			sequence.SqlQuery.GroupBy.Items.Clear();

			foreach (var sql in groupSql)
				sequence.SqlQuery.GroupBy.Expr(sql.Sql);

			new QueryVisitor().Visit(sequence.SqlQuery.From, e =>
			{
				if (e.ElementType == QueryElementType.JoinedTable)
				{
					var jt = (SqlQuery.JoinedTable)e;
					if (jt.JoinType == SqlQuery.JoinType.Inner)
						jt.IsWeak = false;
				}
			});

			var element = new SelectContext (elementSelector, sequence);
			var groupBy = new GroupByContext(sequenceExpr, groupingType, sequence, key, element);

			return groupBy;
		}
Example #6
0
        public void TestKeyContextWithOnlyPlayAction()
        {
            KeyContext context = new KeyContext();

            context.AddAction(play);
            App.Current.KeyContextManager.NewKeyContexts(new List <KeyContext> {
                context
            });

            App.Current.KeyContextManager.HandleKeyPressed(spaceHotkey);
            App.Current.KeyContextManager.HandleKeyPressed(rightHotkey);

            Assert.AreEqual(1, countPlay);
            Assert.AreEqual(0, countForward);
        }
Example #7
0
        public void FixtureTearDown()
        {
            using (var context = new KeyContext())
            {
                foreach (var id in keys)
                {
                    var key = context.Keys.FirstOrDefault(k => k.ID == id);
                    context.Keys.Remove(key);
                    context.SaveChanges();

                    var keyAudits = context.KeyAudits.Where(ke => ke.ID == id);
                    context.KeyAudits.RemoveRange(keyAudits);
                    context.SaveChanges();
                }
            }
        }
Example #8
0
 public ActionResult Delete(int id, Key deleteKey)
 {
     try
     {
         using (var context = new KeyContext())
         {
             Key key = context.Keys.FirstOrDefault(k => k.ID == id);
             context.Keys.Remove(key);
             context.SaveChanges();
         }
         return(RedirectToAction("Index"));
     }
     catch (Exception e)
     {
         return(View("Error", e));
     }
 }
Example #9
0
        public async Task SetUp()
        {
            var dashboard = Utils.DashboardDummy.Default();

            dashboard.InsertTimer();
            dashboardVM = new DashboardVM {
                Model = dashboard
            };
            dashboardVM.Mode = DashboardMode.Edit;
            var viewModel = new DummyDashboardManagerVM(dashboardVM);

            controller = new DashboardEditorController();
            controller.SetViewModel(viewModel);
            await controller.Start();

            KeyContext context = new KeyContext();
        }
Example #10
0
        public ActionResult Create(int?id, Key newKey)
        {
            try
            {
                newKey.Updated = DateTime.Now;

                using (var context = new KeyContext())
                {
                    context.Keys.Add(newKey);
                    context.SaveChanges();
                }
                return(RedirectToAction("Index"));
            }
            catch (Exception e)
            {
                return(View("Error", e));
            }
        }
Example #11
0
        public ActionResult Edit(int id, Key editKey)
        {
            try
            {
                editKey.Updated = DateTime.Now;

                using (var context = new KeyContext())
                {
                    context.Entry(editKey).State = EntityState.Modified;
                    context.SaveChanges();
                }
                return(RedirectToAction("Index"));
            }
            catch (Exception e)
            {
                return(View("Error", e));
            }
        }
        public void HandleSubcategories_OneSubElementTagged_TempContextCreated()
        {
            // Arrange
            KeyContext context = new KeyContext();

            context.KeyActions.AddRange((List <KeyAction>)controller.GetDefaultKeyActions());
            App.Current.KeyContextManager.AddContext(context);
            HotKey key    = App.Current.Keyboard.ParseName("h");
            HotKey subkey = App.Current.Keyboard.ParseName("t");

            projectVM.Dashboard.ViewModels [0].HotKey.Model = key;
            ((AnalysisEventButtonVM)projectVM.Dashboard.ViewModels [0]).Tags.First().HotKey = subkey;
            ((AnalysisEventButtonVM)projectVM.Dashboard.ViewModels [0]).CurrentTime         = new Time();

            AutoResetEvent resetEvent = new AutoResetEvent(false);

            mockToolkit.Setup(x => x.Invoke(It.IsAny <EventHandler> ())).Callback((EventHandler e) => {
                Task actionExecution = Task.Factory.StartNew(() => e(null, null));
                actionExecution.Wait();
                resetEvent.Set();
            });

            int  taggedElements     = 0;
            bool newTagEventCreated = false;

            App.Current.EventsBroker.Subscribe <NewTagEvent> ((x) => {
                newTagEventCreated = true;
                taggedElements     = x.Tags.Count;
            });

            // Act
            int existentContexts = App.Current.KeyContextManager.CurrentKeyContexts.Count;

            App.Current.KeyContextManager.HandleKeyPressed(key);
            App.Current.KeyContextManager.HandleKeyPressed(subkey);
            Thread.Sleep(1000);              // time has to be expired
            Task.Factory.StartNew(() => timer.Raise(x => x.Elapsed += null, new EventArgs() as ElapsedEventArgs));
            resetEvent.WaitOne(1000);

            // Assert
            Assert.IsTrue(newTagEventCreated);
            Assert.AreEqual(1, taggedElements);
            Assert.AreEqual(0, ((AnalysisEventButtonVM)projectVM.Dashboard.ViewModels [0]).SelectedTags.Count);
        }
Example #13
0
        public void TestAddTemporalContext()
        {
            KeyContext context = new KeyContext();

            context.AddAction(forward);
            context.AddAction(play);
            KeyContext tempContext = new KeyContext();

            tempContext.AddAction(fastForward);

            App.Current.KeyContextManager.NewKeyContexts(new List <KeyContext> {
                context
            });
            App.Current.KeyContextManager.AddContext(tempContext);

            Assert.AreEqual(tempContext,
                            App.Current.KeyContextManager.CurrentKeyContexts [
                                App.Current.KeyContextManager.CurrentKeyContexts.Count - 1]);
        }
Example #14
0
        public void TestHotkeyNotFallbacksCorrectly()
        {
            bool fallback = false;

            VAS.App.Current.EventsBroker.Subscribe <KeyPressedEvent> (
                (e) => fallback = true
                );
            KeyContext context = new KeyContext();

            context.AddAction(play);
            context.AddAction(forward);
            App.Current.KeyContextManager.NewKeyContexts(new List <KeyContext> {
                context
            });

            App.Current.KeyContextManager.HandleKeyPressed(spaceHotkey);

            Assert.AreEqual(false, fallback);
        }
Example #15
0
            public GroupByContext(
                IBuildContext?parent,
                Expression sequenceExpr,
                Type groupingType,
                IBuildContext sequence,
                KeyContext key,
                SelectContext element,
                bool isGroupingGuardDisabled)
                : base(parent, sequence, null)
            {
                _sequenceExpr = sequenceExpr;
                _key          = key;
                Element       = element;
                _groupingType = groupingType;

                _isGroupingGuardDisabled = isGroupingGuardDisabled;

                key.Parent = this;
            }
        public void Test_TagAndUntag_HomePlayer1()
        {
            // Arrange
            KeyContext context = new KeyContext();

            context.KeyActions.AddRange((List <KeyAction>)controller.GetDefaultKeyActions());
            App.Current.KeyContextManager.AddContext(context);
            HotKey homeTeamKey = App.Current.Keyboard.ParseName("<Shift_L>+n");
            HotKey player1Key  = App.Current.Keyboard.ParseName("1");

            // Act
            bool taggedStart = projectVM.HomeTeam.ViewModels
                               .FirstOrDefault(x => ((LMPlayerVM)x).Number == Convert.ToInt32("1"))
                               .Tagged;

            resetEvent.Reset();
            App.Current.KeyContextManager.HandleKeyPressed(homeTeamKey);
            App.Current.KeyContextManager.HandleKeyPressed(player1Key);
            Thread.Sleep(1000);
            Task.Factory.StartNew(() => timer.Raise(x => x.Elapsed += null, new EventArgs() as ElapsedEventArgs));
            resetEvent.WaitOne(1000);

            bool taggedOnce = projectVM.HomeTeam.ViewModels
                              .FirstOrDefault(x => ((LMPlayerVM)x).Number == Convert.ToInt32("1"))
                              .Tagged;

            resetEvent.Reset();
            App.Current.KeyContextManager.HandleKeyPressed(homeTeamKey);
            App.Current.KeyContextManager.HandleKeyPressed(player1Key);
            Thread.Sleep(1000);
            Task.Factory.StartNew(() => timer.Raise(x => x.Elapsed += null, new EventArgs() as ElapsedEventArgs));
            resetEvent.WaitOne(1000);

            bool taggedTwice = projectVM.HomeTeam.ViewModels
                               .FirstOrDefault(x => ((LMPlayerVM)x).Number == Convert.ToInt32("1"))
                               .Tagged;

            // Assert
            Assert.AreEqual(taggedStart, !taggedOnce);
            Assert.AreEqual(taggedOnce, !taggedTwice);
        }
Example #17
0
        private KeyContext GenerateSshKey()
        {
            var random   = new SecureRandom(new CryptoApiRandomGenerator());
            var strength = 2048;

            var parameters = new KeyGenerationParameters(random, strength);

            var keyPairGenerator = new RsaKeyPairGenerator();

            keyPairGenerator.Init(parameters);
            var keyPair = keyPairGenerator.GenerateKeyPair();

            var keyContext = new KeyContext();

            // var privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(keyPair.Private);
            // var privateKey = Convert.ToBase64String(privateKeyInfo.GetEncoded(Asn1Encodable.Ber));
            using (var writer = new StringWriter())
            {
                var pem = new PemWriter(writer);
                pem.WriteObject(keyPair.Private);
                keyContext.PrivateKey = writer.ToString();
            }

            var publicKeyParameter = (RsaKeyParameters)keyPair.Public;

            using (var memory = new MemoryStream())
            {
                WriteBytes(memory, Encoding.ASCII.GetBytes("ssh-rsa"));
                WriteBytes(memory, publicKeyParameter.Exponent.ToByteArray());
                WriteBytes(memory, publicKeyParameter.Modulus.ToByteArray());

                var publicKeyBase64 = Convert.ToBase64String(memory.ToArray());

                keyContext.PublicKey = $"ssh-rsa {publicKeyBase64} generated-key";
            }

            _secretTracker.AddSecret(keyContext.PrivateKey);

            return(keyContext);
        }
Example #18
0
        public KeyContext key()
        {
            KeyContext _localctx = new KeyContext(Context, State);

            EnterRule(_localctx, 4, RULE_key);
            try {
                EnterOuterAlt(_localctx, 1);
                {
                    State = 21;
                    Match(ELEMENT);
                }
            }
            catch (RecognitionException re) {
                _localctx.exception = re;
                ErrorHandler.ReportError(this, re);
                ErrorHandler.Recover(this, re);
            }
            finally {
                ExitRule();
            }
            return(_localctx);
        }
Example #19
0
    public KeyContext key()
    {
        KeyContext _localctx = new KeyContext(Context, State);

        EnterRule(_localctx, 10, RULE_key);
        try {
            State = 60;
            switch (TokenStream.La(1))
            {
            case IDENTIFIER:
                _localctx = new IdentifierKeyContext(_localctx);
                EnterOuterAlt(_localctx, 1);
                {
                    State = 58; ((IdentifierKeyContext)_localctx).Key = Match(IDENTIFIER);
                }
                break;

            case STRING:
                _localctx = new StringKeyContext(_localctx);
                EnterOuterAlt(_localctx, 2);
                {
                    State = 59; ((StringKeyContext)_localctx).Key = Match(STRING);
                }
                break;

            default:
                throw new NoViableAltException(this);
            }
        }
        catch (RecognitionException re) {
            _localctx.exception = re;
            ErrorHandler.ReportError(this, re);
            ErrorHandler.Recover(this, re);
        }
        finally {
            ExitRule();
        }
        return(_localctx);
    }
Example #20
0
        protected Task <bool> Initialize(dynamic data)
        {
            CreateViewModel(data);
            CreateControllers(data);
            foreach (IController controller in Controllers)
            {
                controller.SetViewModel(ViewModel);
            }
            Panel.SetViewModel(ViewModel);

            foreach (IController controller in Controllers)
            {
                KeyContext.KeyActions.AddRange(controller.GetDefaultKeyActions());
            }
            KeyContext panelKeyContext = Panel?.GetKeyContext();

            if (panelKeyContext != null)
            {
                KeyContext.KeyActions.AddRange(panelKeyContext.KeyActions);
            }

            return(AsyncHelpers.Return(true));
        }
Example #21
0
        public KeyContext GetKeyContext()
        {
            var keyContext = new KeyContext();

            keyContext.AddAction(
                new VKeyAction(App.Current.HotkeysService.GetByName(GeneralUIHotkeys.ZOOM_IN),
                               () => codingwidget1.ZoomIn()));
            keyContext.AddAction(
                new VKeyAction(App.Current.HotkeysService.GetByName(GeneralUIHotkeys.ZOOM_OUT),
                               () => codingwidget1.ZoomOut()));

            keyContext.AddAction(
                new VKeyAction(App.Current.HotkeysService.GetByName(GeneralUIHotkeys.FIT_TIMELINE),
                               () => codingwidget1.FitTimeline()));
            keyContext.AddAction(
                new VKeyAction(App.Current.HotkeysService.GetByName(LMGeneralUIHotkeys.SHOW_DASHBOARD),
                               () => codingwidget1.ShowDashboard()));
            keyContext.AddAction(
                new VKeyAction(App.Current.HotkeysService.GetByName(LMGeneralUIHotkeys.SHOW_TIMELINE),
                               () => codingwidget1.ShowTimeline()));

            return(keyContext);
        }
Example #22
0
 public StringKeyContext(KeyContext context)
 {
     CopyFrom(context);
 }
Example #23
0
        public void NextIdentity_FirstCall_ShouldReturnOne()
        {
            var keyContext = new KeyContext();

            Assert.That(keyContext.NextIdentity, Is.EqualTo(1));
        }
Example #24
0
        protected override IBuildContext BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo)
        {
            var sequenceExpr             = methodCall.Arguments[0];
            var wrapSequence             = false;
            LambdaExpression?groupingKey = null;
            var groupingKind             = GroupingType.Default;

            if (sequenceExpr.NodeType == ExpressionType.Call)
            {
                var call = (MethodCallExpression)methodCall.Arguments[0];

                if (call.IsQueryable("Select"))
                {
                    var selectParam = (LambdaExpression)call.Arguments[1].Unwrap();
                    var type        = selectParam.Body.Type;

                    if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(ExpressionBuilder.GroupSubQuery <,>))
                    {
                        wrapSequence = true;

                        var selectParamBody = selectParam.Body.Unwrap();
                        MethodCallExpression?groupingMethod = null;
                        if (selectParamBody is MemberInitExpression mi)
                        {
                            var assignment = mi.Bindings.OfType <MemberAssignment>().FirstOrDefault(m => m.Member.Name == "Key");
                            if (assignment?.Expression.NodeType == ExpressionType.Call)
                            {
                                var mc = (MethodCallExpression)assignment.Expression;
                                if (mc.IsSameGenericMethod(Methods.LinqToDB.GroupBy.Rollup, Methods.LinqToDB.GroupBy.Cube, Methods.LinqToDB.GroupBy.GroupingSets))
                                {
                                    groupingMethod = mc;
                                    groupingKey    = (LambdaExpression)mc.Arguments[0].Unwrap();
                                    if (mc.IsSameGenericMethod(Methods.LinqToDB.GroupBy.Rollup))
                                    {
                                        groupingKind = GroupingType.Rollup;
                                    }
                                    else if (mc.IsSameGenericMethod(Methods.LinqToDB.GroupBy.Cube))
                                    {
                                        groupingKind = GroupingType.Cube;
                                    }
                                    else if (mc.IsSameGenericMethod(Methods.LinqToDB.GroupBy.GroupingSets))
                                    {
                                        groupingKind = GroupingType.GroupBySets;
                                    }
                                    else
                                    {
                                        throw new InvalidOperationException();
                                    }
                                }
                            }
                        }

                        if (groupingMethod != null && groupingKey != null)
                        {
                            sequenceExpr = sequenceExpr.Replace(groupingMethod, groupingKey.Body.Unwrap());
                        }
                    }
                }
            }

            var sequence    = builder.BuildSequence(new BuildInfo(buildInfo, sequenceExpr));
            var keySequence = sequence;

            var groupingType    = methodCall.Type.GetGenericArguments()[0];
            var keySelector     = (LambdaExpression)methodCall.Arguments[1].Unwrap() !;
            var elementSelector = (LambdaExpression)methodCall.Arguments[2].Unwrap() !;

            if (wrapSequence)
            {
                sequence = new SubQueryContext(sequence);
            }

            sequence = new SubQueryContext(sequence);
            var key = new KeyContext(buildInfo.Parent, keySelector, sequence);

            if (groupingKind != GroupingType.GroupBySets)
            {
                var groupSql = builder.ConvertExpressions(key, keySelector.Body.Unwrap(), ConvertFlags.Key, null);

                var allowed = groupSql.Where(s => !QueryHelper.IsConstant(s.Sql));

                foreach (var sql in allowed)
                {
                    sequence.SelectQuery.GroupBy.Expr(sql.Sql);
                }
            }
            else
            {
                var goupingSetBody = groupingKey !.Body;
                var groupingSets   = EnumGroupingSets(goupingSetBody).ToArray();
                if (groupingSets.Length == 0)
                {
                    throw new LinqException($"Invalid groping sets expression '{goupingSetBody}'.");
                }

                foreach (var groupingSet in groupingSets)
                {
                    var groupSql = builder.ConvertExpressions(keySequence, groupingSet, ConvertFlags.Key, null);
                    sequence.SelectQuery.GroupBy.Items.Add(
                        new SqlGroupingSet(groupSql.Select(s => keySequence.SelectQuery.Select.AddColumn(s.Sql))));
                }
            }

            sequence.SelectQuery.GroupBy.GroupingType = groupingKind;

            var element = new SelectContext(buildInfo.Parent, elementSelector, sequence /*, key*/);
            var groupBy = new GroupByContext(buildInfo.Parent, sequenceExpr, groupingType, sequence, key, element, builder.IsGroupingGuardDisabled);

            Debug.WriteLine("BuildMethodCall GroupBy:\n" + groupBy.SelectQuery);

            return(groupBy);
        }
Example #25
0
 public KeyRepository(KeyContext context)
 {
     _context = context;
 }
    public KeyContext key()
    {
        KeyContext _localctx = new KeyContext(Context, State);

        EnterRule(_localctx, 6, RULE_key);
        int _la;

        try {
            EnterOuterAlt(_localctx, 1);
            {
                State = 71;
                ErrorHandler.Sync(this);
                _la = TokenStream.LA(1);
                do
                {
                    {
                        State = 71;
                        ErrorHandler.Sync(this);
                        switch (TokenStream.LA(1))
                        {
                        case PLAINCHAR:
                        {
                            State = 68; Match(PLAINCHAR);
                        }
                        break;

                        case ESCAPE:
                        {
                            State = 69; Match(ESCAPE);
                            State = 70;
                            _la   = TokenStream.LA(1);
                            if (!((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ESCAPE) | (1L << SPACE) | (1L << PAIR_SEPERATOR) | (1L << PLAINCHAR))) != 0)))
                            {
                                ErrorHandler.RecoverInline(this);
                            }
                            else
                            {
                                ErrorHandler.ReportMatch(this);
                                Consume();
                            }
                        }
                        break;

                        default:
                            throw new NoViableAltException(this);
                        }
                    }
                    State = 73;
                    ErrorHandler.Sync(this);
                    _la = TokenStream.LA(1);
                } while (_la == ESCAPE || _la == PLAINCHAR);
            }
        }
        catch (RecognitionException re) {
            _localctx.exception = re;
            ErrorHandler.ReportError(this, re);
            ErrorHandler.Recover(this, re);
        }
        finally {
            ExitRule();
        }
        return(_localctx);
    }
Example #27
0
        protected override IBuildContext BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo)
        {
            var sequenceExpr    = methodCall.Arguments[0];
            var sequence        = builder.BuildSequence(new BuildInfo(buildInfo, sequenceExpr));
            var groupingType    = methodCall.Type.GetGenericArgumentsEx()[0];
            var keySelector     = (LambdaExpression)methodCall.Arguments[1].Unwrap();
            var elementSelector = (LambdaExpression)methodCall.Arguments[2].Unwrap();

            if (methodCall.Arguments[0].NodeType == ExpressionType.Call)
            {
                var call = (MethodCallExpression)methodCall.Arguments[0];

                if (call.Method.Name == "Select")
                {
                    var type = ((LambdaExpression)call.Arguments[1].Unwrap()).Body.Type;

                    if (type.IsGenericTypeEx() && type.GetGenericTypeDefinition() == typeof(ExpressionBuilder.GroupSubQuery <,>))
                    {
                        sequence = new SubQueryContext(sequence);
                    }
                }
            }

            var key      = new KeyContext(buildInfo.Parent, keySelector, sequence);
            var groupSql = builder.ConvertExpressions(key, keySelector.Body.Unwrap(), ConvertFlags.Key);

            if (sequence.SelectQuery.Select.IsDistinct ||
                sequence.SelectQuery.GroupBy.Items.Count > 0 ||
                groupSql.Any(_ => !(_.Sql is SqlField || _.Sql is SelectQuery.Column)))
            {
                sequence = new SubQueryContext(sequence);
                key      = new KeyContext(buildInfo.Parent, keySelector, sequence);
                groupSql = builder.ConvertExpressions(key, keySelector.Body.Unwrap(), ConvertFlags.Key);
            }
            else if (groupSql.Length == 1 && groupSql.Any(_ => _.Sql is SelectQuery.Column))
            {
                //var columns = (SelectQuery.Column) groupSql[0]. Sql;
                //var value = columns.Expression as SqlValue;
                //if (value != null && value.SystemType.Name.Equals("String"))
                //{
                //            // var allColumns = value.Value.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                //             sequence.SelectQuery.GroupBy.Items.Add(new SqlField {Name = value.Value.ToString(),PhysicalName ="columnString" });
                //         }
            }

            foreach (var sql in groupSql)
            {
                sequence.SelectQuery.GroupBy.Expr(sql.Sql);
            }

            new QueryVisitor().Visit(sequence.SelectQuery.From, (e, table_cloumn) =>
            {
                if (e.ElementType == QueryElementType.JoinedTable)
                {
                    var jt = (SelectQuery.JoinedTable)e;
                    if (jt.JoinType == SelectQuery.JoinType.Inner)
                    {
                        jt.IsWeak = false;
                    }
                }
            });

            var element = new SelectContext(buildInfo.Parent, elementSelector, sequence /*, key*/);
            var groupBy = new GroupByContext(buildInfo.Parent, sequenceExpr, groupingType, sequence, key, element);

            return(groupBy);
        }
Example #28
0
 public KeysController(KeyContext context)
 {
     _context = context;
 }
Example #29
0
 public virtual void CopyFrom(KeyContext context)
 {
     base.CopyFrom(context);
 }
Example #30
0
 public IdentifierKeyContext(KeyContext context)
 {
     CopyFrom(context);
 }