//----------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. // //----------------------------------------------------------------------- namespace Microsoft.Isam.Esent.Interop { using System.Text; using Microsoft.Isam.Esent.Interop.Implementation; /// /// Enumerate the names of tables in a database. /// internal sealed class TableNameEnumerator : TableEnumerator { /// /// The database containing the tables. /// private readonly JET_DBID dbid; /// /// Object list containing information about tables. /// private JET_OBJECTLIST objectlist; /// /// Initializes a new instance of the class. /// /// /// The session to use. /// /// /// The database to get the table names from. /// public TableNameEnumerator(JET_SESID sesid, JET_DBID dbid) : base(sesid) { this.dbid = dbid; } /// /// Open the table to be enumerated. This should set . /// protected override void OpenTable() { Api.JetGetObjectInfo(this.Sesid, this.dbid, out this.objectlist); this.TableidToEnumerate = this.objectlist.tableid; } /// /// Determine if the current entry in the table being enumerated should /// be skipped (not returned). Here we are skipping system tables. /// /// True if the current entry should be skipped. protected override bool SkipCurrent() { int flags = (int)Api.RetrieveColumnAsInt32(this.Sesid, this.TableidToEnumerate, this.objectlist.columnidflags); return ObjectInfoFlags.System == ((ObjectInfoFlags)flags & ObjectInfoFlags.System); } /// /// Gets the entry the cursor is currently positioned on. /// /// The entry the cursor is currently positioned on. protected override string GetCurrent() { // If we use the wide API (Vista+), then the temp table will be in UTF-16. Encoding encodingOfTextColumns = EsentVersion.SupportsVistaFeatures ? Encoding.Unicode : LibraryHelpers.EncodingASCII; string name = Api.RetrieveColumnAsString( this.Sesid, this.TableidToEnumerate, this.objectlist.columnidobjectname, encodingOfTextColumns, RetrieveColumnGrbit.None); return StringCache.TryToIntern(name); } } }