Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Data / System / Data / Filter / NameNode.cs / 1 / NameNode.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data { using System; using System.ComponentModel; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; internal sealed class NameNode : ExpressionNode { internal char open = '\0'; internal char close = '\0'; internal string name; internal bool found; internal bool type = false; internal DataColumn column; internal NameNode(DataTable table, char[] text, int start, int pos) : base(table) { this.name = ParseName(text, start, pos); } internal NameNode(DataTable table, string name) : base(table) { this.name = name; } internal override bool IsSqlColumn{ get{ return column.IsSqlType; } } internal override void Bind(DataTable table, Listlist) { BindTable(table); if (table == null) throw ExprException.UnboundName(name); try { this.column = table.Columns[name]; } catch (Exception e) { found = false; // if (!Common.ADP.IsCatchableExceptionType(e)) { throw; } throw ExprException.UnboundName(name); } if (column == null) throw ExprException.UnboundName(name); name = column.ColumnName; found = true; // add column to the dependency list, do not add duplicate columns Debug.Assert(column != null, "Failed to bind column " + name); int i; for (i = 0; i < list.Count; i++) { // walk the list, check if the current column already on the list DataColumn dataColumn = list[i]; if (column == dataColumn) { break; } } if (i >= list.Count) { list.Add(column); } } internal override object Eval() { // can not eval column without ROW value; throw ExprException.EvalNoContext(); } internal override object Eval(DataRow row, DataRowVersion version) { if (!found) { throw ExprException.UnboundName(name); } if (row == null) { if(IsTableConstant()) // this column is TableConstant Aggregate Function return column.DataExpression.Evaluate(); else { throw ExprException.UnboundName(name); } } return column[row.GetRecordFromVersion(version)]; } internal override object Eval(int[] records) { throw ExprException.ComputeNotAggregate(this.ToString()); } internal override bool IsConstant() { return false; } internal override bool IsTableConstant() { if (column != null && column.Computed) { return this.column.DataExpression.IsTableAggregate(); } return false; } internal override bool HasLocalAggregate() { if (column != null && column.Computed) { return this.column.DataExpression.HasLocalAggregate(); } return false; } internal override bool HasRemoteAggregate() { if (column != null && column.Computed) { return this.column.DataExpression.HasRemoteAggregate(); } return false; } internal override bool DependsOn(DataColumn column) { if (this.column == column) return true; if (this.column.Computed) { return this.column.DataExpression.DependsOn(column); } return false; } internal override ExpressionNode Optimize() { return this; } /// /// Parses given name and checks it validity /// internal static string ParseName(char[] text, int start, int pos) { char esc = '\0'; string charsToEscape = ""; int saveStart = start; int savePos = pos; if (text[start] == '`') { Debug.Assert(text[checked((int)pos-1)] == '`', "Invalid identifyer bracketing, pos = " + pos.ToString(CultureInfo.InvariantCulture) + ", end = " + text[checked((int)pos-1)].ToString(CultureInfo.InvariantCulture)); start = checked((int)start+1); pos = checked((int)pos-1); esc = '\\'; charsToEscape = "`"; } else if (text[start] == '[') { Debug.Assert(text[checked((int)pos-1)] == ']', "Invalid identifyer bracketing of name " + new string(text, start, pos-start) + " pos = " + pos.ToString(CultureInfo.InvariantCulture) + ", end = " + text[checked((int)pos-1)].ToString(CultureInfo.InvariantCulture)); start = checked((int)start+1); pos = checked((int)pos-1); esc = '\\'; charsToEscape = "]\\"; } if (esc != '\0') { // scan the name in search for the ESC int posEcho = start; for (int i = start; i < pos; i++) { if (text[i] == esc) { if (i+1 < pos && charsToEscape.IndexOf(text[i+1]) >= 0) { i++; } } text[posEcho] = text[i]; posEcho++; } pos = posEcho; } if (pos == start) throw ExprException.InvalidName(new string(text, saveStart, savePos - saveStart)); return new string(text, start, pos - start); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data { using System; using System.ComponentModel; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; internal sealed class NameNode : ExpressionNode { internal char open = '\0'; internal char close = '\0'; internal string name; internal bool found; internal bool type = false; internal DataColumn column; internal NameNode(DataTable table, char[] text, int start, int pos) : base(table) { this.name = ParseName(text, start, pos); } internal NameNode(DataTable table, string name) : base(table) { this.name = name; } internal override bool IsSqlColumn{ get{ return column.IsSqlType; } } internal override void Bind(DataTable table, Listlist) { BindTable(table); if (table == null) throw ExprException.UnboundName(name); try { this.column = table.Columns[name]; } catch (Exception e) { found = false; // if (!Common.ADP.IsCatchableExceptionType(e)) { throw; } throw ExprException.UnboundName(name); } if (column == null) throw ExprException.UnboundName(name); name = column.ColumnName; found = true; // add column to the dependency list, do not add duplicate columns Debug.Assert(column != null, "Failed to bind column " + name); int i; for (i = 0; i < list.Count; i++) { // walk the list, check if the current column already on the list DataColumn dataColumn = list[i]; if (column == dataColumn) { break; } } if (i >= list.Count) { list.Add(column); } } internal override object Eval() { // can not eval column without ROW value; throw ExprException.EvalNoContext(); } internal override object Eval(DataRow row, DataRowVersion version) { if (!found) { throw ExprException.UnboundName(name); } if (row == null) { if(IsTableConstant()) // this column is TableConstant Aggregate Function return column.DataExpression.Evaluate(); else { throw ExprException.UnboundName(name); } } return column[row.GetRecordFromVersion(version)]; } internal override object Eval(int[] records) { throw ExprException.ComputeNotAggregate(this.ToString()); } internal override bool IsConstant() { return false; } internal override bool IsTableConstant() { if (column != null && column.Computed) { return this.column.DataExpression.IsTableAggregate(); } return false; } internal override bool HasLocalAggregate() { if (column != null && column.Computed) { return this.column.DataExpression.HasLocalAggregate(); } return false; } internal override bool HasRemoteAggregate() { if (column != null && column.Computed) { return this.column.DataExpression.HasRemoteAggregate(); } return false; } internal override bool DependsOn(DataColumn column) { if (this.column == column) return true; if (this.column.Computed) { return this.column.DataExpression.DependsOn(column); } return false; } internal override ExpressionNode Optimize() { return this; } /// /// Parses given name and checks it validity /// internal static string ParseName(char[] text, int start, int pos) { char esc = '\0'; string charsToEscape = ""; int saveStart = start; int savePos = pos; if (text[start] == '`') { Debug.Assert(text[checked((int)pos-1)] == '`', "Invalid identifyer bracketing, pos = " + pos.ToString(CultureInfo.InvariantCulture) + ", end = " + text[checked((int)pos-1)].ToString(CultureInfo.InvariantCulture)); start = checked((int)start+1); pos = checked((int)pos-1); esc = '\\'; charsToEscape = "`"; } else if (text[start] == '[') { Debug.Assert(text[checked((int)pos-1)] == ']', "Invalid identifyer bracketing of name " + new string(text, start, pos-start) + " pos = " + pos.ToString(CultureInfo.InvariantCulture) + ", end = " + text[checked((int)pos-1)].ToString(CultureInfo.InvariantCulture)); start = checked((int)start+1); pos = checked((int)pos-1); esc = '\\'; charsToEscape = "]\\"; } if (esc != '\0') { // scan the name in search for the ESC int posEcho = start; for (int i = start; i < pos; i++) { if (text[i] == esc) { if (i+1 < pos && charsToEscape.IndexOf(text[i+1]) >= 0) { i++; } } text[posEcho] = text[i]; posEcho++; } pos = posEcho; } if (pos == start) throw ExprException.InvalidName(new string(text, saveStart, savePos - saveStart)); return new string(text, start, pos - start); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlILModule.cs
- CacheMemory.cs
- VisualTarget.cs
- ItemAutomationPeer.cs
- RIPEMD160Managed.cs
- DynamicRendererThreadManager.cs
- Itemizer.cs
- GenericEnumerator.cs
- InteropAutomationProvider.cs
- XmlHierarchicalEnumerable.cs
- HttpCachePolicyWrapper.cs
- PrintDialogException.cs
- RectangleHotSpot.cs
- RowUpdatingEventArgs.cs
- KnownColorTable.cs
- DocumentXmlWriter.cs
- Behavior.cs
- Pointer.cs
- TimerElapsedEvenArgs.cs
- SqlFileStream.cs
- BrowserDefinition.cs
- oledbconnectionstring.cs
- SystemFonts.cs
- ObjectParameterCollection.cs
- PropertyEmitterBase.cs
- LabelDesigner.cs
- Misc.cs
- IPPacketInformation.cs
- ByteStack.cs
- MethodCallConverter.cs
- IntegerCollectionEditor.cs
- StickyNoteContentControl.cs
- XmlUrlEditor.cs
- TreeNodeBindingCollection.cs
- PixelFormats.cs
- TargetConverter.cs
- WindowClosedEventArgs.cs
- WinFormsUtils.cs
- ColorTransform.cs
- SmtpException.cs
- EntitySqlQueryState.cs
- VBIdentifierDesigner.xaml.cs
- DesignerDataTableBase.cs
- LoginUtil.cs
- DurableErrorHandler.cs
- ProxyWebPartManager.cs
- shaperfactoryquerycacheentry.cs
- MarginsConverter.cs
- DiscriminatorMap.cs
- DesignTimeTemplateParser.cs
- RuleValidation.cs
- HtmlInputHidden.cs
- TabControlEvent.cs
- DbExpressionVisitor.cs
- HtmlInputFile.cs
- IgnoreFileBuildProvider.cs
- TypeLoadException.cs
- QueueProcessor.cs
- ToolStripPanelCell.cs
- EdmTypeAttribute.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- WebControlToolBoxItem.cs
- DataGridHeaderBorder.cs
- ContractCodeDomInfo.cs
- DefaultProxySection.cs
- DesignerDataStoredProcedure.cs
- CodeDelegateInvokeExpression.cs
- SplineQuaternionKeyFrame.cs
- Brush.cs
- IteratorDescriptor.cs
- EventListener.cs
- SkewTransform.cs
- CharStorage.cs
- GestureRecognizer.cs
- ProtectedConfigurationProviderCollection.cs
- PrefixHandle.cs
- WebColorConverter.cs
- DoubleLinkList.cs
- ZipIOCentralDirectoryBlock.cs
- MemoryMappedFileSecurity.cs
- TextViewSelectionProcessor.cs
- XmlExtensionFunction.cs
- WS2007FederationHttpBindingCollectionElement.cs
- Point3DCollection.cs
- Timer.cs
- FixedSOMFixedBlock.cs
- TreeViewAutomationPeer.cs
- WebConfigurationHost.cs
- ZipIOCentralDirectoryFileHeader.cs
- StringFreezingAttribute.cs
- SystemColors.cs
- FixedPageStructure.cs
- OleDbPermission.cs
- InvalidEnumArgumentException.cs
- DataPagerFieldItem.cs
- HMACSHA384.cs
- MessageLoggingElement.cs
- CharConverter.cs
- ClientTargetSection.cs
- IPPacketInformation.cs