Beispiel #1
0
        private List <InsertValueContext> GetInsertValueContexts(ParameterContext parameterContext)
        {
            List <InsertValueContext> result = new List <InsertValueContext>(GetSqlCommand().GetAllValueExpressions().Count);

            foreach (var valueExpression in GetSqlCommand().GetAllValueExpressions())
            {
                InsertValueContext insertValueContext = new InsertValueContext(valueExpression, parameterContext);
                result.Add(insertValueContext);
            }
            return(result);
        }
        private ShardingCondition CreateShardingCondition(string tableName, IEnumerator <string> columnNames,
                                                          InsertValueContext insertValueContext, ParameterContext parameterContext)
        {
            ShardingCondition result      = new ShardingCondition();
            SPITimeService    timeService = SPITimeService.GetInstance();


            foreach (var valueExpression in insertValueContext.GetValueExpressions())
            {
                string columnName = columnNames.Next();
                if (_shardingRule.IsShardingColumn(columnName, tableName))
                {
                    if (valueExpression is ISimpleExpressionSegment simpleExpressionSegment)
                    {
                        result.RouteValues.Add(new ListRouteValue(columnName, tableName,
                                                                  new List <IComparable>()
                        {
                            GetRouteValue(simpleExpressionSegment, parameterContext)
                        }));
                    }
                    else if (ExpressionConditionUtils.IsNowExpression(valueExpression))
                    {
                        result.RouteValues.Add(new ListRouteValue(columnName, tableName,
                                                                  new List <IComparable>()
                        {
                            timeService.GetTime()
                        }));
                    }
                    else if (ExpressionConditionUtils.IsNullExpression(valueExpression))
                    {
                        throw new ShardingException("Insert clause sharding column can't be null.");
                    }
                }
            }

            return(result);
        }