internal override void MetaDataAvailable(SmiQueryMetaData[] metaData, bool nextEventIsRow)
 {
     if (this._parent == null)
     {
         throw SQL.UnexpectedSmiEvent(UnexpectedEventType.MetaDataAvailable);
     }
     this._parent.MetaDataAvailable(metaData, nextEventIsRow);
 }
 // Called for new resultset starting (COLMETADATA token)
 internal abstract void MetaDataAvailable( SmiQueryMetaData[] metaData, bool nextEventIsRow );
 internal virtual SmiExtendedMetaData[] GetInternalSmiMetaData()
 {
     SmiExtendedMetaData[] dataArray = null;
     _SqlMetaDataSet metaData = this.MetaData;
     if ((metaData != null) && (0 < metaData.Length))
     {
         dataArray = new SmiExtendedMetaData[metaData.visibleColumns];
         for (int i = 0; i < metaData.Length; i++)
         {
             _SqlMetaData data = metaData[i];
             if (!data.isHidden)
             {
                 SqlCollation collation = data.collation;
                 string xmlSchemaCollectionDatabase = null;
                 string xmlSchemaCollectionOwningSchema = null;
                 string xmlSchemaCollectionName = null;
                 if (SqlDbType.Xml == data.type)
                 {
                     xmlSchemaCollectionDatabase = data.xmlSchemaCollectionDatabase;
                     xmlSchemaCollectionOwningSchema = data.xmlSchemaCollectionOwningSchema;
                     xmlSchemaCollectionName = data.xmlSchemaCollectionName;
                 }
                 else if (SqlDbType.Udt == data.type)
                 {
                     SqlConnection.CheckGetExtendedUDTInfo(data, true);
                     xmlSchemaCollectionDatabase = data.udtDatabaseName;
                     xmlSchemaCollectionOwningSchema = data.udtSchemaName;
                     xmlSchemaCollectionName = data.udtTypeName;
                 }
                 int length = data.length;
                 if (length > 0x1f40)
                 {
                     length = -1;
                 }
                 else if ((SqlDbType.NChar == data.type) || (SqlDbType.NVarChar == data.type))
                 {
                     length /= ADP.CharSize;
                 }
                 dataArray[i] = new SmiQueryMetaData(data.type, (long) length, data.precision, data.scale, (collation != null) ? ((long) collation.LCID) : ((long) this._defaultLCID), (collation != null) ? collation.SqlCompareOptions : SqlCompareOptions.None, data.udtType, false, null, null, data.column, xmlSchemaCollectionDatabase, xmlSchemaCollectionOwningSchema, xmlSchemaCollectionName, data.isNullable, data.serverName, data.catalogName, data.schemaName, data.tableName, data.baseColumn, data.isKey, data.isIdentity, 0 == data.updatability, data.isExpression, data.isDifferentName, data.isHidden);
             }
         }
     }
     return dataArray;
 }
 internal override void MetaDataAvailable(SmiQueryMetaData[] md, bool nextEventIsRow)
 {
     if (Bid.AdvancedOn)
     {
         Bid.Trace("<sc.SqlDataReaderSmi.ReaderEventSink.MetaDataAvailable|ADV> %d#, md.Length=%d nextEventIsRow=%d.\n", this.reader.ObjectID, (md != null) ? md.Length : -1, nextEventIsRow);
         if (md != null)
         {
             for (int i = 0; i < md.Length; i++)
             {
                 Bid.Trace("<sc.SqlDataReaderSmi.ReaderEventSink.MetaDataAvailable|ADV> %d#, metaData[%d] is %ls%ls\n", this.reader.ObjectID, i, md[i].GetType().ToString(), md[i].TraceString());
             }
         }
     }
     this.reader.MetaDataAvailable(md, nextEventIsRow);
 }
 private void MetaDataAvailable(SmiQueryMetaData[] md, bool nextEventIsRow)
 {
     this._currentMetaData = md;
     this._hasRows = nextEventIsRow;
     this._fieldNameLookup = null;
     this._currentPosition = PositionState.BeforeRows;
     this._indexMap = new int[this._currentMetaData.Length];
     int index = 0;
     for (int i = 0; i < this._currentMetaData.Length; i++)
     {
         if (!this._currentMetaData[i].IsHidden.IsTrue)
         {
             this._indexMap[index] = i;
             index++;
         }
     }
     this._visibleColumnCount = index;
 }