Uploaded image for project: 'Torque'
  1. Torque
  2. TORQUE-16

LockTables is faulty in some adapters

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.1, 3.1.1, 3.2
    • 4.0-beta1
    • Runtime
    • None
    • mssql, oracle
    • TRQS334

    Description

      Sent to me from Michael Beier

      in some adapters (e.g mssql, sybase) lockTables is implemented as follows:

      public void lockTable(Connection con, String table) throws SQLException
      {
      Statement statement = con.createStatement();

      stmt.append("SELECT next_id FROM ")
      .append(table)
      .append(" FOR UPDATE");
      }

      Problem is that the column next_id does not exist in most tables.
      Suggested is to replace this as follows:
      Mssql:
      {
      Statement statement = con.createStatement();

      StringBuffer stmt = new StringBuffer();
      stmt.append("SELECT * FROM ")
      .append(table)
      .append(" WITH (TABLOCKX)");

      statement.executeQuery(stmt.toString());
      }

      Oracle:
      public void lockTable(Connection con, String table) throws SQLException
      {
      Statement statement = con.createStatement();

      StringBuffer stmt = new StringBuffer();
      stmt.append("SELECT * FROM ")
      .append(table)
      .append(" FOR UPDATE");

      statement.executeQuery(stmt.toString());
      }

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            tfischer Thomas Fox
            tfischer Thomas Fox
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment