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); }