BitSharp.Esent.EsentChainStateCursor.OpenCursor C# (CSharp) Method

OpenCursor() private method

private OpenCursor ( string jetDatabase, Microsoft.Isam.Esent.Interop.Instance jetInstance, Session &jetSession, JET_DBID &chainStateDbId, JET_TABLEID &globalsTableId, JET_COLUMNID &chainTipColumnId, JET_COLUMNID &unspentTxCountColumnId, JET_COLUMNID &unspentOutputCountColumnId, JET_COLUMNID &totalTxCountColumnId, JET_COLUMNID &totalInputCountColumnId, JET_COLUMNID &totalOutputCountColumnId, JET_TABLEID &flushTableId, JET_COLUMNID &flushColumnId, JET_TABLEID &headersTableId, JET_COLUMNID &headerBlockHashColumnId, JET_COLUMNID &headerBytesColumnId, JET_TABLEID &unspentTxTableId, JET_COLUMNID &txHashColumnId, JET_COLUMNID &blockIndexColumnId, JET_COLUMNID &txIndexColumnId, JET_COLUMNID &txVersionColumnId, JET_COLUMNID &isCoinbaseColumnId, JET_COLUMNID &outputStatesColumnId, JET_TABLEID &unspentTxOutputTableId, JET_COLUMNID &txOutputKeyColumnId, JET_COLUMNID &txOutputBytesColumnId, JET_TABLEID &spentTxTableId, JET_COLUMNID &spentSpentBlockIndexColumnId, JET_COLUMNID &spentDataColumnId, JET_TABLEID &unmintedTxTableId, JET_COLUMNID &unmintedBlockHashColumnId, JET_COLUMNID &unmintedDataColumnId ) : void
jetDatabase string
jetInstance Microsoft.Isam.Esent.Interop.Instance
jetSession Microsoft.Isam.Esent.Interop.Session
chainStateDbId JET_DBID
globalsTableId JET_TABLEID
chainTipColumnId JET_COLUMNID
unspentTxCountColumnId JET_COLUMNID
unspentOutputCountColumnId JET_COLUMNID
totalTxCountColumnId JET_COLUMNID
totalInputCountColumnId JET_COLUMNID
totalOutputCountColumnId JET_COLUMNID
flushTableId JET_TABLEID
flushColumnId JET_COLUMNID
headersTableId JET_TABLEID
headerBlockHashColumnId JET_COLUMNID
headerBytesColumnId JET_COLUMNID
unspentTxTableId JET_TABLEID
txHashColumnId JET_COLUMNID
blockIndexColumnId JET_COLUMNID
txIndexColumnId JET_COLUMNID
txVersionColumnId JET_COLUMNID
isCoinbaseColumnId JET_COLUMNID
outputStatesColumnId JET_COLUMNID
unspentTxOutputTableId JET_TABLEID
txOutputKeyColumnId JET_COLUMNID
txOutputBytesColumnId JET_COLUMNID
spentTxTableId JET_TABLEID
spentSpentBlockIndexColumnId JET_COLUMNID
spentDataColumnId JET_COLUMNID
unmintedTxTableId JET_TABLEID
unmintedBlockHashColumnId JET_COLUMNID
unmintedDataColumnId JET_COLUMNID
return void
        private void OpenCursor(string jetDatabase, Instance jetInstance,
            out Session jetSession,
            out JET_DBID chainStateDbId,
            out JET_TABLEID globalsTableId,
                out JET_COLUMNID chainTipColumnId,
                out JET_COLUMNID unspentTxCountColumnId,
                out JET_COLUMNID unspentOutputCountColumnId,
                out JET_COLUMNID totalTxCountColumnId,
                out JET_COLUMNID totalInputCountColumnId,
                out JET_COLUMNID totalOutputCountColumnId,
            out JET_TABLEID flushTableId,
                out JET_COLUMNID flushColumnId,
            out JET_TABLEID headersTableId,
                out JET_COLUMNID headerBlockHashColumnId,
                out JET_COLUMNID headerBytesColumnId,
            out JET_TABLEID unspentTxTableId,
                out JET_COLUMNID txHashColumnId,
                out JET_COLUMNID blockIndexColumnId,
                out JET_COLUMNID txIndexColumnId,
                out JET_COLUMNID txVersionColumnId,
                out JET_COLUMNID isCoinbaseColumnId,
                out JET_COLUMNID outputStatesColumnId,
            out JET_TABLEID unspentTxOutputTableId,
                out JET_COLUMNID txOutputKeyColumnId,
                out JET_COLUMNID txOutputBytesColumnId,
            out JET_TABLEID spentTxTableId,
                out JET_COLUMNID spentSpentBlockIndexColumnId,
                out JET_COLUMNID spentDataColumnId,
            out JET_TABLEID unmintedTxTableId,
                out JET_COLUMNID unmintedBlockHashColumnId,
                out JET_COLUMNID unmintedDataColumnId)
        {
            var success = false;
            jetSession = new Session(jetInstance);
            try
            {
                Api.JetOpenDatabase(jetSession, jetDatabase, "", out chainStateDbId, OpenDatabaseGrbit.None);

                Api.JetOpenTable(jetSession, chainStateDbId, "Globals", null, 0, OpenTableGrbit.None, out globalsTableId);
                chainTipColumnId = Api.GetTableColumnid(jetSession, globalsTableId, "ChainTip");
                unspentTxCountColumnId = Api.GetTableColumnid(jetSession, globalsTableId, "UnspentTxCount");
                unspentOutputCountColumnId = Api.GetTableColumnid(jetSession, globalsTableId, "UnspentOutputCount");
                totalTxCountColumnId = Api.GetTableColumnid(jetSession, globalsTableId, "TotalTxCount");
                totalInputCountColumnId = Api.GetTableColumnid(jetSession, globalsTableId, "TotalInputCount");
                totalOutputCountColumnId = Api.GetTableColumnid(jetSession, globalsTableId, "TotalOutputCount");

                if (!Api.TryMoveFirst(jetSession, globalsTableId))
                    throw new InvalidOperationException();

                Api.JetOpenTable(jetSession, chainStateDbId, "Flush", null, 0, OpenTableGrbit.None, out flushTableId);
                flushColumnId = Api.GetTableColumnid(jetSession, flushTableId, "Flush");

                if (!Api.TryMoveFirst(jetSession, flushTableId))
                    throw new InvalidOperationException();

                Api.JetOpenTable(jetSession, chainStateDbId, "Headers", null, 0, OpenTableGrbit.None, out headersTableId);
                headerBlockHashColumnId = Api.GetTableColumnid(jetSession, headersTableId, "BlockHash");
                headerBytesColumnId = Api.GetTableColumnid(jetSession, headersTableId, "HeaderBytes");

                Api.JetOpenTable(jetSession, chainStateDbId, "UnspentTx", null, 0, OpenTableGrbit.None, out unspentTxTableId);
                txHashColumnId = Api.GetTableColumnid(jetSession, unspentTxTableId, "TxHash");
                blockIndexColumnId = Api.GetTableColumnid(jetSession, unspentTxTableId, "BlockIndex");
                txIndexColumnId = Api.GetTableColumnid(jetSession, unspentTxTableId, "TxIndex");
                txVersionColumnId = Api.GetTableColumnid(jetSession, unspentTxTableId, "TxVersion");
                isCoinbaseColumnId = Api.GetTableColumnid(jetSession, unspentTxTableId, "IsCoinbase");
                outputStatesColumnId = Api.GetTableColumnid(jetSession, unspentTxTableId, "OutputStates");

                Api.JetOpenTable(jetSession, chainStateDbId, "UnspentTxOutput", null, 0, OpenTableGrbit.None, out unspentTxOutputTableId);
                txOutputKeyColumnId = Api.GetTableColumnid(jetSession, unspentTxOutputTableId, "TxOutputKey");
                txOutputBytesColumnId = Api.GetTableColumnid(jetSession, unspentTxOutputTableId, "TxOutputBytes");

                Api.JetOpenTable(jetSession, chainStateDbId, "SpentTx", null, 0, OpenTableGrbit.None, out spentTxTableId);
                spentSpentBlockIndexColumnId = Api.GetTableColumnid(jetSession, spentTxTableId, "SpentBlockIndex");
                spentDataColumnId = Api.GetTableColumnid(jetSession, spentTxTableId, "SpentData");

                Api.JetOpenTable(jetSession, chainStateDbId, "UnmintedTx", null, 0, OpenTableGrbit.None, out unmintedTxTableId);
                unmintedBlockHashColumnId = Api.GetTableColumnid(jetSession, unmintedTxTableId, "BlockHash");
                unmintedDataColumnId = Api.GetTableColumnid(jetSession, unmintedTxTableId, "UnmintedData");

                success = true;
            }
            finally
            {
                if (!success)
                    jetSession.Dispose();
            }
        }