public void MoveData(Session session, IPersistentStore other, int colindex, int adjust) { object defaultValue = null; SqlType type = null; SqlType type2 = null; if ((adjust >= 0) && (colindex != -1)) { defaultValue = ((Table)this.table).GetColumn(colindex).GetDefaultValue(session); type2 = this.table.GetColumnTypes()[colindex]; } if ((adjust <= 0) && (colindex != -1)) { type = other.GetTable().GetColumnTypes()[colindex]; } IRowIterator rowIterator = other.GetRowIterator(); Table table = (Table)this.table; try { while (rowIterator.HasNext()) { object[] rowData = rowIterator.GetNextRow().RowData; object[] emptyRowData = table.GetEmptyRowData(); object a = null; if ((adjust == 0) && (colindex != -1)) { a = rowData[colindex]; defaultValue = type2.ConvertToType(session, a, type); } if ((defaultValue != null) && type2.IsLobType()) { session.sessionData.AdjustLobUsageCount(defaultValue, 1); } if (((a != null) && (type != null)) && type.IsLobType()) { session.sessionData.AdjustLobUsageCount(a, -1); } ArrayUtil.CopyAdjustArray <object>(rowData, emptyRowData, defaultValue, colindex, adjust); table.SystemSetIdentityColumn(session, emptyRowData); table.EnforceTypeLimits(session, emptyRowData); table.EnforceRowConstraints(session, emptyRowData); Row newCachedObject = this.GetNewCachedObject(null, emptyRowData); this.IndexRow(null, newCachedObject); } } catch (OutOfMemoryException) { throw Error.GetError(460); } }
private void SetInConditionsAsTables() { for (int i = this.RangeVariables.Length - 1; i >= 0; i--) { RangeVariable range = this.RangeVariables[i]; ExpressionLogical e = (ExpressionLogical)this._inExpressions[i]; if (e != null) { OrderedIntHashSet set = new OrderedIntHashSet(); e.AddLeftColumnsForAllAny(range, set); Index index = range.RangeTable.GetIndexForColumns(this.session, set, false); int num2 = 0; for (int j = 0; j < index.GetColumnCount(); j++) { if (set.Contains(index.GetColumns()[j])) { num2++; } } RangeVariable addition = new RangeVariable(e.GetRightNode().GetTable(), null, null, null, this._compileContext) { IsGenerated = true }; RangeVariable[] dest = new RangeVariable[this.RangeVariables.Length + 1]; ArrayUtil.CopyAdjustArray <RangeVariable>(this.RangeVariables, dest, addition, i, 1); this.RangeVariables = dest; Expression[] exprList = new Expression[num2]; for (int k = 0; k < num2; k++) { int num5 = index.GetColumns()[k]; int colIndexRight = set.GetIndex(num5); exprList[k] = new ExpressionLogical(range, num5, addition, colIndexRight); } bool flag = this.RangeVariables[i].IsLeftJoin || this.RangeVariables[i].IsRightJoin; RangeVariable.RangeVariableConditions conditions1 = (!this._inInJoin[i] & flag) ? range.WhereConditions[0] : range.JoinConditions[0]; conditions1.AddIndexCondition(exprList, index, exprList.Length); conditions1.AddCondition(e); } } }