All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.microsoft.sqlserver.jdbc.StreamDone Maven / Gradle / Ivy

There is a newer version: 12.8.1.jre11
Show newest version
/*
 * Microsoft JDBC Driver for SQL Server Copyright(c) Microsoft Corporation All rights reserved. This program is made
 * available under the terms of the MIT License. See the LICENSE file in the project root for more information.
 */

package com.microsoft.sqlserver.jdbc;

/**
 * StreamDone/StreamDoneInProc/StreamDoneProc stores a TDS Done packet that denotes the completion of a database
 * operation.
 */

class StreamDone extends StreamPacket {
    /** the done completion status */
    private short status;
    /** the row update count */
    private long rowCount;

    /**
     * the current command (See Appendix A of TDS spec)
     */
    static final short CMD_SELECT = 0xC1;
    static final short CMD_SELECTINTO = 0xC2;
    static final short CMD_INSERT = 0xC3;
    static final short CMD_DELETE = 0xC4;
    static final short CMD_UPDATE = 0xC5;
    static final short CMD_EXECUTE = 0xE0;
    static final short CMD_BULKINSERT = 0xF0;
    static final short CMD_MERGE = 0x117;

    // DDL commands
    static final short CMD_CNST_CREATE = 0x2e;
    static final short CMD_DENY = 0x99;
    static final short CMD_DROPSCHEMA = 0xb0;
    static final short CMD_FUNCCREATE = 0xb2;
    static final short CMD_FUNCDESTROY = 0xb3;
    static final short CMD_ASMCREATE = 0xb5;
    static final short CMD_CMD = 0xb6;
    static final short CMD_TABCREATE = 0xc6;
    static final short CMD_TABDESTROY = 0xc7;
    static final short CMD_INDCREATE = 0xc8;
    static final short CMD_INDDESTROY = 0xc9;
    static final short CMD_DBCREATE = 0xcb;
    static final short CMD_DBDESTROY = 0xcc;
    static final short CMD_GRANT = 0xcd;
    static final short CMD_REVOKE = 0xce;
    static final short CMD_VIEWCREATE = 0xcf;
    static final short CMD_VIEWDESTROY = 0xd0;
    static final short CMD_DBEXTEND = 0xd7;
    static final short CMD_ALTERTAB = 0xd8;
    static final short CMD_TRIGCREATE = 0xdd;
    static final short CMD_PROCCREATE = 0xde;
    static final short CMD_PROCDESTROY = 0xdf;
    static final short CMD_TRIGDESTROY = 0xe1;
    static final short CMD_DBCC_CMD = 0xe6;
    static final short CMD_DEFAULTCREATE = 0xe9;
    static final short CMD_RULECREATE = 0xec;
    static final short CMD_RULEDESTROY = 0xed;
    static final short CMD_DEFAULTDESTROY = 0xee;
    static final short CMD_STATSDESTROY = 0x100;
    static final short CMD_ASMDESTROY = 0x10e;
    static final short CMD_ASMALTER = 0x10f;
    static final short CMD_TYPEDESTROY = 0x110;
    static final short CMD_TYPECREATE = 0x111;
    static final short CMD_CLRPROCEDURECREATE = 0x112;
    static final short CMD_CLRFUNCTIONCREATE = 0x113;
    static final short CMD_SERVICEALTER = 0x114;
    static final short CMD_MSGTYPECREATE = 0x115;
    static final short CMD_MSGTYPEDESTROY = 0x116;
    static final short CMD_CONTRACTCREATE = 0x119;
    static final short CMD_CONTRACTDESTROY = 0x11a;
    static final short CMD_SERVICECREATE = 0x11b;
    static final short CMD_SERVICEDESTROY = 0x11c;
    static final short CMD_QUEUECREATE = 0x11d;
    static final short CMD_QUEUEDESTROY = 0x11e;
    static final short CMD_QUEUEALTER = 0x11f;
    static final short CMD_FTXTINDEX_CREATE = 0x126;
    static final short CMD_FTXTINDEX_ALTER = 0x127;
    static final short CMD_FTXTINDEX_DROP = 0x128;
    static final short CMD_PRTFUNCTIONCREATE = 0x129;
    static final short CMD_PRTFUNCTIONDROP = 0x12a;
    static final short CMD_PRTSCHEMECREATE = 0x12b;
    static final short CMD_PRTSCHEMEDROP = 0x12c;
    static final short CMD_FTXTCATALOG_CREATE = 0x130;
    static final short CMD_FTXTCATALOG_ALTER = 0x131;
    static final short CMD_FTXTCATALOG_DROP = 0x132;
    static final short CMD_XMLSCHEMACREATE = 0x135;
    static final short CMD_XMLSCHEMAALTER = 0x136;
    static final short CMD_XMLSCHEMADROP = 0x137;
    static final short CMD_ENDPOINTCREATE = 0x138;
    static final short CMD_ENDPOINTALTER = 0x139;
    static final short CMD_ENDPOINTDROP = 0x13a;
    static final short CMD_USERCREATE = 0x13b;
    static final short CMD_USERALTER = 0x13c;
    static final short CMD_USERDROP = 0x13d;
    static final short CMD_ROLECREATE = 0x13f;
    static final short CMD_ROLEALTER = 0x140;
    static final short CMD_ROLEDROP = 0x141;
    static final short CMD_APPROLECREATE = 0x142;
    static final short CMD_APPROLEALTER = 0x143;
    static final short CMD_APPROLEDROP = 0x144;
    static final short CMD_LOGINCREATE = 0x145;
    static final short CMD_LOGINALTER = 0x146;
    static final short CMD_LOGINDROP = 0x147;
    static final short CMD_SYNONYMCREATE = 0x148;
    static final short CMD_SYNONYMDROP = 0x149;
    static final short CMD_CREATESCHEMA = 0x14a;
    static final short CMD_ALTERSCHEMA = 0x14b;
    static final short CMD_AGGCREATE = 0x14c;
    static final short CMD_AGGDESTROY = 0x14d;
    static final short CMD_CLRTRIGGERCREATE = 0x14e;
    static final short CMD_PRTFUNCTIONALTER = 0x14f;
    static final short CMD_PRTSCHEMEALTER = 0x150;
    static final short CMD_INDALTER = 0x151;
    static final short CMD_ROUTECREATE = 0x157;
    static final short CMD_ROUTEALTER = 0x158;
    static final short CMD_ROUTEDESTROY = 0x15a;
    static final short CMD_EVENTNOTIFICATIONCREATE = 0x160;
    static final short CMD_EVENTNOTIFICATIONDROP = 0x161;
    static final short CMD_XMLINDEXCREATE = 0x162;
    static final short CMD_BINDINGCREATE = 0x166;
    static final short CMD_BINDINGALTER = 0x167;
    static final short CMD_BINDINGDESTROY = 0x168;
    static final short CMD_MSGTYPEALTER = 0x16e;
    static final short CMD_CERTCREATE = 0x170;
    static final short CMD_CERTDROP = 0x171;
    static final short CMD_CERTALTER = 0x172;
    static final short CMD_SECDESCCREATE = 0x17d;
    static final short CMD_SECDESCDROP = 0x17e;
    static final short CMD_SECDESCALTER = 0x17f;
    static final short CMD_OBFUSKEYCREATE = 0x182;
    static final short CMD_OBFUSKEYALTER = 0x183;
    static final short CMD_OBFUSKEYDROP = 0x184;
    static final short CMD_ALTERAUTHORIZATION = 0x18c;
    static final short CMD_CREDENTIALCREATE = 0x198;
    static final short CMD_CREDENTIALALTER = 0x199;
    static final short CMD_CREDENTIALDROP = 0x19a;
    static final short CMD_MASTERKEYCREATE = 0x19b;
    static final short CMD_MASTERKEYDROP = 0x19c;
    static final short CMD_MASTERKEYALTER = 0x1a1;
    static final short CMD_ASYMKEYCREATE = 0x1a3;
    static final short CMD_ASYMKEYDROP = 0x1a4;
    static final short CMD_ASYMKEYALTER = 0x1a9;

    private short curCmd;

    /**
     * Set the packet contents
     */
    void setFromTDS(TDSReader tdsReader) throws SQLServerException {
        packetType = tdsReader.readUnsignedByte(); // token type
        assert TDS.TDS_DONE == packetType || TDS.TDS_DONEPROC == packetType || TDS.TDS_DONEINPROC == packetType;

        status = tdsReader.readShort();
        curCmd = tdsReader.readShort();
        rowCount = tdsReader.readLong();

        if (isAttnAck())
            tdsReader.getCommand().onAttentionAck();
    }

    /**
     * Return the packet's current command
     */
    /* L0 */ final short getCurCmd() {
        return curCmd;
    }

    /**
     * Check if this done packet is the final done packet (top nesting)
     * 
     * @return true if final
     */
    /* L0 */ final boolean isFinal() {
        return (status & TDS.DONE_MORE) == 0;
    }

    /**
     * Check if a error state was indicated.
     * 
     * @return true if error
     */
    /* L0 */ final boolean isError() {
        return (status & TDS.DONE_ERROR) != 0;
    }

    /**
     * Determine if a done packet has a row count
     * 
     * @return true if the row count is present
     */
    /* L0 */ final boolean updateCountIsValid() {
        return (status & TDS.DONE_COUNT) != 0;
    }

    /**
     * Check if a cancelled state was indicated.
     * 
     * @return true if cancelled
     */
    /* L0 */ final boolean isAttnAck() {
        return (status & TDS.DONE_ATTN) != 0;
    }

    /**
     * Check if a RPC in batch was indicated
     * 
     * @return true if RPC in batch
     */
    /* L0 */ final boolean wasRPCInBatch() {
        return (status & 0x0080) != 0;
    }

    /**
     * Return the update count
     */
    final long getUpdateCount() {
        assert cmdIsDMLOrDDL();

        switch (curCmd) {
            case CMD_INSERT:
            case CMD_BULKINSERT:
            case CMD_DELETE:
            case CMD_UPDATE:
            case CMD_MERGE:
            case CMD_SELECTINTO:
                return updateCountIsValid() ? rowCount : -1;

            default: // DDL assumed
                return 0;
        }
    }

    final boolean cmdIsDMLOrDDL() {
        switch (curCmd) {
            case CMD_INSERT:
            case CMD_BULKINSERT:
            case CMD_DELETE:
            case CMD_UPDATE:
            case CMD_MERGE:
            case CMD_SELECTINTO:

                // DDL
                // http://msdn2.microsoft.com/en-us/library/ms180824.aspx
            case CMD_CNST_CREATE:
            case CMD_DENY:
            case CMD_DROPSCHEMA:
            case CMD_FUNCCREATE:
            case CMD_FUNCDESTROY:
            case CMD_ASMCREATE:
            case CMD_CMD:
            case CMD_TABCREATE:
            case CMD_TABDESTROY:
            case CMD_INDCREATE:
            case CMD_INDDESTROY:
            case CMD_DBCREATE:
            case CMD_DBDESTROY:
            case CMD_GRANT:
            case CMD_REVOKE:
            case CMD_VIEWCREATE:
            case CMD_VIEWDESTROY:
            case CMD_DBEXTEND:
            case CMD_ALTERTAB:
            case CMD_TRIGCREATE:
            case CMD_PROCCREATE:
            case CMD_PROCDESTROY:
            case CMD_TRIGDESTROY:
            case CMD_DBCC_CMD:
            case CMD_DEFAULTCREATE:
            case CMD_RULECREATE:
            case CMD_RULEDESTROY:
            case CMD_DEFAULTDESTROY:
            case CMD_STATSDESTROY:
            case CMD_ASMDESTROY:
            case CMD_ASMALTER:
            case CMD_TYPEDESTROY:
            case CMD_TYPECREATE:
            case CMD_CLRPROCEDURECREATE:
            case CMD_CLRFUNCTIONCREATE:
            case CMD_SERVICEALTER:
            case CMD_MSGTYPECREATE:
            case CMD_MSGTYPEDESTROY:
            case CMD_CONTRACTCREATE:
            case CMD_CONTRACTDESTROY:
            case CMD_SERVICECREATE:
            case CMD_SERVICEDESTROY:
            case CMD_QUEUECREATE:
            case CMD_QUEUEDESTROY:
            case CMD_QUEUEALTER:
            case CMD_FTXTINDEX_CREATE:
            case CMD_FTXTINDEX_ALTER:
            case CMD_FTXTINDEX_DROP:
            case CMD_PRTFUNCTIONCREATE:
            case CMD_PRTFUNCTIONDROP:
            case CMD_PRTSCHEMECREATE:
            case CMD_PRTSCHEMEDROP:
            case CMD_FTXTCATALOG_CREATE:
            case CMD_FTXTCATALOG_ALTER:
            case CMD_FTXTCATALOG_DROP:
            case CMD_XMLSCHEMACREATE:
            case CMD_XMLSCHEMAALTER:
            case CMD_XMLSCHEMADROP:
            case CMD_ENDPOINTCREATE:
            case CMD_ENDPOINTALTER:
            case CMD_ENDPOINTDROP:
            case CMD_USERCREATE:
            case CMD_USERALTER:
            case CMD_USERDROP:
            case CMD_ROLECREATE:
            case CMD_ROLEALTER:
            case CMD_ROLEDROP:
            case CMD_APPROLECREATE:
            case CMD_APPROLEALTER:
            case CMD_APPROLEDROP:
            case CMD_LOGINCREATE:
            case CMD_LOGINALTER:
            case CMD_LOGINDROP:
            case CMD_SYNONYMCREATE:
            case CMD_SYNONYMDROP:
            case CMD_CREATESCHEMA:
            case CMD_ALTERSCHEMA:
            case CMD_AGGCREATE:
            case CMD_AGGDESTROY:
            case CMD_CLRTRIGGERCREATE:
            case CMD_PRTFUNCTIONALTER:
            case CMD_PRTSCHEMEALTER:
            case CMD_INDALTER:
            case CMD_ROUTECREATE:
            case CMD_ROUTEALTER:
            case CMD_ROUTEDESTROY:
            case CMD_EVENTNOTIFICATIONCREATE:
            case CMD_EVENTNOTIFICATIONDROP:
            case CMD_XMLINDEXCREATE:
            case CMD_BINDINGCREATE:
            case CMD_BINDINGALTER:
            case CMD_BINDINGDESTROY:
            case CMD_MSGTYPEALTER:
            case CMD_CERTCREATE:
            case CMD_CERTDROP:
            case CMD_CERTALTER:
            case CMD_SECDESCCREATE:
            case CMD_SECDESCDROP:
            case CMD_SECDESCALTER:
            case CMD_OBFUSKEYCREATE:
            case CMD_OBFUSKEYALTER:
            case CMD_OBFUSKEYDROP:
            case CMD_ALTERAUTHORIZATION:
            case CMD_CREDENTIALCREATE:
            case CMD_CREDENTIALALTER:
            case CMD_CREDENTIALDROP:
            case CMD_MASTERKEYCREATE:
            case CMD_MASTERKEYDROP:
            case CMD_MASTERKEYALTER:
            case CMD_ASYMKEYCREATE:
            case CMD_ASYMKEYDROP:
            case CMD_ASYMKEYALTER:
                return true;

            default:
                return false;
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy