public StatementDMQL CompileInsertStatement(RangeVariable[] outerRanges) { bool[] columnCheckList; base.Read(); base.ReadThis(0x8b); Table targetTable = base.ReadTableName(); bool flag = false; bool flag2 = false; bool flag3 = false; int[] columnMap = targetTable.GetColumnMap(); int columnCount = targetTable.GetColumnCount(); int position = base.GetPosition(); if ((!targetTable.IsInsertable() && !targetTable.IsTriggerInsertable()) && !base.session.IsProcessingScript()) { throw Error.GetError(0x15a9); } Table table2 = targetTable.IsTriggerInsertable() ? targetTable : targetTable.GetBaseTable(); int tokenType = base.token.TokenType; if (tokenType <= 0x114) { switch (tokenType) { case 0xf9: case 0x114: goto Label_046B; case 0x4d: { base.Read(); base.ReadThis(0x132); Expression insertExpression = new Expression(0x19, new Expression[0]); Expression[] list = new Expression[] { insertExpression }; insertExpression = new Expression(0x1a, list); columnCheckList = targetTable.GetNewColumnCheckList(); for (int j = 0; j < targetTable.ColDefaults.Length; j++) { if (((targetTable.ColDefaults[j] == null) && (targetTable.IdentityColumn != j)) && !targetTable.GetColumn(j).IsGenerated()) { throw Error.GetError(0x15a8); } } StatementInsert insert2 = new StatementInsert(base.session, targetTable, columnMap, insertExpression, columnCheckList); insert2.SetDatabseObjects(base.session, base.compileContext); insert2.CheckAccessRights(base.session); insert2.SetupChecks(); insert2.InitSimpleInsert(); return(insert2); } } goto Label_0464; } if (tokenType <= 0x13d) { switch (tokenType) { case 0x132: goto Label_01E7; case 0x13d: goto Label_046B; } goto Label_0464; } if (tokenType != 460) { if (tokenType != 0x2b7) { goto Label_0464; } if (base.ReadOpenBrackets() != 1) { this.Rewind(position); goto Label_046B; } bool flag4 = false; switch (base.token.TokenType) { case 0xf9: case 0x114: case 0x13d: this.Rewind(position); flag4 = true; break; } if (flag4) { goto Label_046B; } OrderedHashSet <string> columns = new OrderedHashSet <string>(); base.ReadSimpleColumnNames(columns, targetTable); base.ReadThis(0x2aa); columnCount = columns.Size(); columnMap = targetTable.GetColumnIndexes(columns); if ((base.token.TokenType != 0x132) && (base.token.TokenType != 460)) { goto Label_046B; } } if (base.token.TokenType == 460) { base.Read(); if (base.token.TokenType == 0x12f) { base.Read(); flag = true; } else if (base.token.TokenType == 0x112) { base.Read(); flag2 = true; } else { base.UnexpectedToken(); } base.ReadThis(0x131); if (base.token.TokenType != 0x132) { goto Label_046B; } } Label_01E7: base.Read(); columnCheckList = targetTable.GetColumnCheckList(columnMap); Expression tableExpression = base.XreadContextuallyTypedTable(columnCount); ExpressionColumn.CheckColumnsResolved(tableExpression.ResolveColumnReferences(outerRanges, null)); tableExpression.ResolveTypes(base.session, null); SetParameterTypes(tableExpression, targetTable, columnMap); if (targetTable != table2) { int[] numArray2 = new int[columnMap.Length]; ArrayUtil.ProjectRow(targetTable.GetBaseTableColumnMap(), columnMap, numArray2); columnMap = numArray2; } Expression[] nodes = tableExpression.nodes; for (int i = 0; i < nodes.Length; i++) { Expression[] expressionArray2 = nodes[i].nodes; for (int j = 0; j < expressionArray2.Length; j++) { Expression expression3 = expressionArray2[j]; ColumnSchema column = table2.GetColumn(columnMap[j]); if (column.IsIdentity()) { flag3 = true; if (expression3.GetExprType() != 4) { if ((column.GetIdentitySequence().IsAlways() && !flag) && !flag2) { throw Error.GetError(0x15a7); } if (flag) { expressionArray2[j] = new ExpressionColumn(4); } } } else if (!column.HasDefault) { if (column.IsGenerated()) { if (expression3.GetExprType() != 4) { throw Error.GetError(0x15a5); } } else if (expression3.GetExprType() == 4) { throw Error.GetError(0x15a8); } } if (expression3.IsUnresolvedParam()) { expression3.SetAttributesAsColumn(column, true); } } } if (!flag3 && (flag | flag2)) { base.UnexpectedTokenRequire("OVERRIDING"); } StatementInsert insert1 = new StatementInsert(base.session, targetTable, columnMap, tableExpression, columnCheckList); insert1.SetDatabseObjects(base.session, base.compileContext); insert1.CheckAccessRights(base.session); insert1.SetupChecks(); insert1.InitSimpleInsert(); return(insert1); Label_0464: throw base.UnexpectedToken(); Label_046B: columnCheckList = targetTable.GetColumnCheckList(columnMap); if ((targetTable != table2) && (targetTable != table2)) { int[] numArray3 = new int[columnMap.Length]; ArrayUtil.ProjectRow(targetTable.GetBaseTableColumnMap(), columnMap, numArray3); columnMap = numArray3; } int identityColumnIndex = targetTable.GetIdentityColumnIndex(); int overrid = -1; if ((identityColumnIndex != -1) && (ArrayUtil.Find(columnMap, identityColumnIndex) > -1)) { if ((targetTable.IdentitySequence.IsAlways() && !flag) && !flag2) { throw Error.GetError(0x15a7); } if (flag) { overrid = identityColumnIndex; } } else if (flag | flag2) { base.UnexpectedTokenRequire("OVERRIDING"); } SqlType[] newRow = new SqlType[columnMap.Length]; ArrayUtil.ProjectRow(table2.GetColumnTypes(), columnMap, newRow); QueryExpression queryExpression = base.XreadQueryExpression(); queryExpression.SetReturningResult(); queryExpression.Resolve(base.session, outerRanges, newRow); if (columnCount != queryExpression.GetColumnCount()) { throw Error.GetError(0x15aa); } StatementInsert insert3 = new StatementInsert(base.session, targetTable, columnMap, columnCheckList, queryExpression, overrid); insert3.SetDatabseObjects(base.session, base.compileContext); insert3.CheckAccessRights(base.session); insert3.SetupChecks(); return(insert3); }