/*
 * 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;

ParameterUtils provides utility a set of methods to manipulate parameter values.
/** * ParameterUtils provides utility a set of methods to manipulate parameter values. */
final class ParameterUtils { static byte[] HexToBin(String hexV) throws SQLServerException { int len = hexV.length(); char orig[] = hexV.toCharArray(); if ((len % 2) != 0) SQLServerException.makeFromDriverError(null, null, SQLServerException.getErrString("R_stringNotInHex"), null, false); byte[] bin = new byte[len / 2]; for (int i = 0; i < len / 2; i++) { bin[i] = (byte) ((CharToHex(orig[2 * i]) << 4) + (CharToHex(orig[2 * i + 1]) & 0xff)); } return bin; } // conversion routine valid values 0-9 a-f A-F // throws exception when failed to convert // static byte CharToHex(char CTX) throws SQLServerException { byte ret = 0; if (CTX >= 'A' && CTX <= 'F') { ret = (byte) (CTX - 'A' + 10); } else if (CTX >= 'a' && CTX <= 'f') { ret = (byte) (CTX - 'a' + 10); } else if (CTX >= '0' && CTX <= '9') { ret = (byte) (CTX - '0'); } else { SQLServerException.makeFromDriverError(null, null, SQLServerException.getErrString("R_stringNotInHex"), null, false); } return ret; }
Locates the first occurrence of [ch] in [sql] starting at [offset], where [sql] is a SQL statement string, which may contain any combination of: - Literals, enclosed in single quotes (') - Literals, enclosed in double quotes (") - Escape sequences, enclosed in square brackets ([]) - Escaped escapes or literal delimiters (i.e. '', "", or ]]) in the above - Single-line comments, beginning in -- and continuing to EOL - Multi-line comments, enclosed in C-style comment delimiters and [ch] is not contained any of the above.
Params:
  • ch – the character to search for
  • sql – the SQL string to search in
  • offset – the offset into [sql] to start searching from
Throws:
Returns:Offset into [sql] where [c] occurs, or sql.length if [c] is not found.
/** * Locates the first occurrence of [ch] in [sql] starting at [offset], where [sql] is a SQL statement string, which * may contain any combination of: * * - Literals, enclosed in single quotes (') - Literals, enclosed in double quotes (") - Escape sequences, enclosed * in square brackets ([]) - Escaped escapes or literal delimiters (i.e. '', "", or ]]) in the above - Single-line * comments, beginning in -- and continuing to EOL - Multi-line comments, enclosed in C-style comment delimiters * * and [ch] is not contained any of the above. * * @param ch * the character to search for * @param sql * the SQL string to search in * @param offset * the offset into [sql] to start searching from * @return Offset into [sql] where [c] occurs, or sql.length if [c] is not found. * @throws SQLServerException * when [sql] does not follow */
@SuppressWarnings({"fallthrough"}) static int scanSQLForChar(char ch, String sql, int offset) { char chQuote; char chTmp; final int len = sql.length(); while (offset < len) { switch (chTmp = sql.charAt(offset++)) { case '/': if (offset == len) break; if (sql.charAt(offset) == '*') { // If '/* ... */' comment while (++offset < len) { // Go thru comment. if (sql.charAt(offset) == '*' && offset + 1 < len && sql.charAt(offset + 1) == '/') { // If end of comment offset += 2; break; } } break; } else if (sql.charAt(offset) == '-') break; // Fall through - will fail next if and end up in default case case '-': if (offset >= 0 && offset < sql.length() && sql.charAt(offset) == '-') { // If '-- ... \n' comment while (++offset < len) { // Go thru comment. if (sql.charAt(offset) == '\n' || sql.charAt(offset) == '\r') { // If end of comment offset++; break; } } break; } // Fall through to test character default: if (ch == chTmp) return offset - 1; break; case '[': chTmp = ']'; case '\'': case '"': chQuote = chTmp; while (offset < len) { if (sql.charAt(offset++) == chQuote) { if (len == offset || sql.charAt(offset) != chQuote) break; ++offset; } } break; } } return len; } }