Class StringUtils

java.lang.Object
com.mysql.cj.util.StringUtils

public class StringUtils
extends java.lang.Object
Various utility methods for converting to/from byte arrays in the platform encoding
  • Nested Class Summary

    Nested Classes 
    Modifier and Type Class Description
    static class  StringUtils.SearchMode  
  • Field Summary

    Fields 
    Modifier and Type Field Description
    static java.util.Set<StringUtils.SearchMode> SEARCH_MODE__ALL
    Full search mode: allow backslash escape, skip between markers, skip block comments, skip line comments and skip white space.
    static java.util.Set<StringUtils.SearchMode> SEARCH_MODE__BSESC_COM_WS
    Search mode: allow backslash escape, skip block comments, skip line comments and skip white space.
    static java.util.Set<StringUtils.SearchMode> SEARCH_MODE__BSESC_MRK_WS
    Search mode: allow backslash escape, skip between markers and skip white space.
    static java.util.Set<StringUtils.SearchMode> SEARCH_MODE__COM_WS
    Search mode: skip block comments, skip line comments and skip white space.
    static java.util.Set<StringUtils.SearchMode> SEARCH_MODE__MRK_COM_WS
    Search mode: skip between markers, skip block comments, skip line comments and skip white space.
    static java.util.Set<StringUtils.SearchMode> SEARCH_MODE__MRK_WS
    Search mode: skip between markers and skip white space.
    static java.util.Set<StringUtils.SearchMode> SEARCH_MODE__NONE
    Empty search mode.
  • Constructor Summary

    Constructors 
    Constructor Description
    StringUtils()  
  • Method Summary

    Modifier and Type Method Description
    static void appendAsHex​(java.lang.StringBuilder builder, byte[] bytes)  
    static void appendAsHex​(java.lang.StringBuilder builder, int value)  
    static boolean canHandleAsServerPreparedStatementNoCache​(java.lang.String sql, ServerVersion serverVersion, boolean allowMultiQueries, boolean noBackslashEscapes, boolean useAnsiQuotes)  
    static java.lang.String dumpAsHex​(byte[] byteBuffer, int length)
    Returns the given bytes as a hex and ascii dump (up to length bytes).
    static boolean endsWithIgnoreCase​(java.lang.String searchIn, java.lang.String searchFor)
    Determines whether or not the string 'searchIn' ends with the string 'searchFor', dis-regarding case starting at 'startAt' Shorthand for a String.regionMatch(...)
    static java.lang.String escapeQuote​(java.lang.String src, java.lang.String quotChar)  
    static char firstAlphaCharUc​(java.lang.String searchIn, int startAt)  
    static char firstNonWsCharUc​(java.lang.String searchIn)
    Returns the first non-whitespace char, converted to upper case
    static char firstNonWsCharUc​(java.lang.String searchIn, int startAt)  
    static java.lang.String fixDecimalExponent​(java.lang.String dString)
    Adds '+' to decimal numbers that are positive (MySQL doesn't understand them otherwise
    static byte[] getBytes​(char[] value)
    Returns the byte[] representation of subset of the given char[] using the default/platform encoding.
    static byte[] getBytes​(char[] value, int offset, int length)  
    static byte[] getBytes​(char[] value, int offset, int length, java.lang.String encoding)
    Returns the byte[] representation of subset of the given char[] using the given encoding.
    static byte[] getBytes​(char[] c, java.lang.String encoding)
    Returns the byte[] representation of subset of the given char[] using the given encoding.
    static byte[] getBytes​(java.lang.String value)  
    static byte[] getBytes​(java.lang.String value, int offset, int length)  
    static byte[] getBytes​(java.lang.String value, int offset, int length, java.lang.String encoding)  
    static byte[] getBytes​(java.lang.String s, java.lang.String encoding)
    Returns the byte[] representation of the given string using the given encoding.
    static byte[] getBytesNullTerminated​(java.lang.String value, java.lang.String encoding)  
    static byte[] getBytesWrapped​(java.lang.String s, char beginWrap, char endWrap, java.lang.String encoding)
    Returns the byte[] representation of the given string properly wrapped between the given char delimiters using the given encoding.
    static java.lang.String getFullyQualifiedName​(java.lang.String db, java.lang.String entity, java.lang.String quoteId, boolean isPedantic)
    Builds and returns a fully qualified name, quoted if necessary, for the given database entity.
    static java.lang.String getUniqueSavepointId()  
    static boolean hasWildcards​(java.lang.String src)
    Does the string contain wildcard symbols ('%' or '_').
    static int indexOf​(byte[] s, char c)  
    static int indexOfIgnoreCase​(int startingPosition, java.lang.String searchIn, java.lang.String searchFor)
    Finds the position of a substring within a string ignoring case.
    static int indexOfIgnoreCase​(int startingPosition, java.lang.String searchIn, java.lang.String[] searchForSequence, java.lang.String openingMarkers, java.lang.String closingMarkers, java.util.Set<StringUtils.SearchMode> searchMode)
    Finds the position of the first of a consecutive sequence of strings within a string, ignoring case, with the option to skip text delimited by given markers or within comments.
    static int indexOfIgnoreCase​(int startingPosition, java.lang.String searchIn, java.lang.String searchFor, java.lang.String openingMarkers, java.lang.String closingMarkers, java.lang.String overridingMarkers, java.util.Set<StringUtils.SearchMode> searchMode)
    Finds the position of a substring within a string, ignoring case, with the option to skip text delimited by given markers or within comments.
    static int indexOfIgnoreCase​(int startingPosition, java.lang.String searchIn, java.lang.String searchFor, java.lang.String openingMarkers, java.lang.String closingMarkers, java.util.Set<StringUtils.SearchMode> searchMode)
    Finds the position of a substring within a string, ignoring case, with the option to skip text delimited by given markers or within comments.
    static int indexOfIgnoreCase​(java.lang.String searchIn, java.lang.String searchFor)
    Finds the position of a substring within a string ignoring case.
    static int indexOfQuoteDoubleAware​(java.lang.String searchIn, java.lang.String quoteChar, int startFrom)  
    static boolean isEmptyOrWhitespaceOnly​(java.lang.String str)  
    static boolean isNullOrEmpty​(java.lang.String toTest)  
    static boolean isStrictlyNumeric​(java.lang.CharSequence cs)
    Checks is the CharSequence contains digits only.
    static boolean isValidIdChar​(char c)  
    static java.lang.String joinWithSerialComma​(java.util.List<?> elements)
    Joins all elements of the given list using serial comma (Oxford comma) rules.
    static int lastIndexOf​(byte[] s, char c)  
    static java.lang.String padString​(java.lang.String stringVal, int requiredLength)  
    static byte[] quoteBytes​(byte[] bytes)  
    static java.lang.String quoteIdentifier​(java.lang.String identifier, boolean isPedantic)
    Surrounds identifier with "`" and duplicates these symbols inside the identifier.
    static java.lang.String quoteIdentifier​(java.lang.String identifier, java.lang.String quoteChar, boolean isPedantic)
    Surrounds identifier with quoteChar and duplicates these symbols inside the identifier.
    static int safeIntParse​(java.lang.String intAsString)  
    static java.lang.String safeTrim​(java.lang.String toTrim)  
    static java.lang.String sanitizeProcOrFuncName​(java.lang.String src)
    Next two functions are to help DBMD check if the given string is in form of database.name and return it as "database";"name" with comments removed.
    static java.util.List<java.lang.String> split​(java.lang.String stringToSplit, java.lang.String delimiter, boolean trim)
    Splits stringToSplit into a list, using the given delimiter
    static java.util.List<java.lang.String> split​(java.lang.String stringToSplit, java.lang.String delimiter, java.lang.String openingMarkers, java.lang.String closingMarkers, boolean trim)
    Splits stringToSplit into a list, using the given delimiter and skipping all between the given markers.
    static java.util.List<java.lang.String> split​(java.lang.String stringToSplit, java.lang.String delimiter, java.lang.String openingMarkers, java.lang.String closingMarkers, boolean trim, java.util.Set<StringUtils.SearchMode> searchMode)
    Splits stringToSplit into a list, using the given delimiter and skipping all between the given markers.
    static java.util.List<java.lang.String> split​(java.lang.String stringToSplit, java.lang.String delimiter, java.lang.String openingMarkers, java.lang.String closingMarkers, java.lang.String overridingMarkers, boolean trim)
    Splits stringToSplit into a list, using the given delimiter and skipping all between the given markers.
    static java.util.List<java.lang.String> split​(java.lang.String stringToSplit, java.lang.String delimiter, java.lang.String openingMarkers, java.lang.String closingMarkers, java.lang.String overridingMarkers, boolean trim, java.util.Set<StringUtils.SearchMode> searchMode)
    Splits stringToSplit into a list, using the given delimiter and skipping all between the given markers.
    static java.util.List<java.lang.String> splitDBdotName​(java.lang.String source, java.lang.String db, java.lang.String quoteId, boolean isNoBslashEscSet)
    Splits an entity identifier into its parts (database and entity name) and returns a list containing the two elements.
    static boolean startsWithIgnoreCase​(java.lang.String searchIn, int startAt, java.lang.String searchFor)
    Determines whether or not the string 'searchIn' contains the string 'searchFor', dis-regarding case starting at 'startAt' Shorthand for a String.regionMatch(...)
    static boolean startsWithIgnoreCase​(java.lang.String searchIn, java.lang.String searchFor)
    Determines whether or not the string 'searchIn' starts with the string 'searchFor', dis-regarding case.
    static boolean startsWithIgnoreCaseAndNonAlphaNumeric​(java.lang.String searchIn, java.lang.String searchFor)
    Determines whether or not the string 'searchIn' starts with the string 'searchFor', disregarding case,leading whitespace and non-alphanumeric characters.
    static boolean startsWithIgnoreCaseAndWs​(java.lang.String searchIn, java.lang.String searchFor)
    Determines whether or not the string 'searchIn' starts with the string 'searchFor', disregarding case and leading whitespace
    static int startsWithIgnoreCaseAndWs​(java.lang.String searchIn, java.lang.String[] searchFor)
    Determines whether or not the string 'searchIn' starts with one of the strings in 'searchFor', disregarding case and leading whitespace
    static boolean startsWithIgnoreCaseAndWs​(java.lang.String searchIn, java.lang.String searchFor, int beginPos)
    Determines whether or not the string 'searchIn' contains the string 'searchFor', disregarding case and leading whitespace
    static java.lang.String stringArrayToString​(java.lang.String[] elems, java.lang.String prefix, java.lang.String midDelimiter, java.lang.String lastDelimiter, java.lang.String suffix)
    Constructs a String containing all the elements in the String array bounded and joined by the provided concatenation elements.
    static java.lang.String stripComments​(java.lang.String src, java.lang.String stringOpens, java.lang.String stringCloses, boolean slashStarComments, boolean slashSlashComments, boolean hashComments, boolean dashDashComments)
    Returns the given string, with comments removed
    static byte[] stripEnclosure​(byte[] source, java.lang.String prefix, java.lang.String suffix)  
    static java.lang.String toAsciiString​(byte[] buffer)
    Returns the bytes as an ASCII String.
    static java.lang.String toAsciiString​(byte[] buffer, int startPos, int length)
    Returns the bytes as an ASCII String.
    static java.lang.String toHexString​(byte[] byteBuffer, int length)
    Converts the given byte array into Hex String, stopping at given length.
    static java.lang.String toString​(byte[] value)  
    static java.lang.String toString​(byte[] value, int offset, int length)  
    static java.lang.String toString​(byte[] value, int offset, int length, java.lang.String encoding)  
    static java.lang.String toString​(byte[] value, java.lang.String encoding)  
    static byte[] unquoteBytes​(byte[] bytes)  
    static java.lang.String unQuoteIdentifier​(java.lang.String identifier, java.lang.String quoteChar)
    Trims identifier, removes quote chars from first and last positions and replaces double occurrences of quote char from entire identifier, i.e converts quoted identifier into form as it is stored in database.
    static boolean wildCompareIgnoreCase​(java.lang.String searchIn, java.lang.String searchFor)
    Compares searchIn against searchForWildcard with wildcards, in a case insensitive manner.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • Constructor Details

  • Method Details

    • dumpAsHex

      public static java.lang.String dumpAsHex​(byte[] byteBuffer, int length)
      Returns the given bytes as a hex and ascii dump (up to length bytes).
      Parameters:
      byteBuffer - the data to dump as hex
      length - the number of bytes to print
      Returns:
      a hex and ascii dump
    • toHexString

      public static java.lang.String toHexString​(byte[] byteBuffer, int length)
      Converts the given byte array into Hex String, stopping at given length.
      Parameters:
      byteBuffer - the byte array to convert
      length - the number of bytes from the given array to convert
      Returns:
      a String containing the Hex representation of the given bytes
    • firstNonWsCharUc

      public static char firstNonWsCharUc​(java.lang.String searchIn)
      Returns the first non-whitespace char, converted to upper case
      Parameters:
      searchIn - the string to search in
      Returns:
      the first non-whitespace character, upper cased.
    • firstNonWsCharUc

      public static char firstNonWsCharUc​(java.lang.String searchIn, int startAt)
    • firstAlphaCharUc

      public static char firstAlphaCharUc​(java.lang.String searchIn, int startAt)
    • fixDecimalExponent

      public static java.lang.String fixDecimalExponent​(java.lang.String dString)
      Adds '+' to decimal numbers that are positive (MySQL doesn't understand them otherwise
      Parameters:
      dString - The value as a string
      Returns:
      String the string with a '+' added (if needed)
    • getBytes

      public static byte[] getBytes​(java.lang.String s, java.lang.String encoding)
      Returns the byte[] representation of the given string using the given encoding.
      Parameters:
      s - source string
      encoding - java encoding
      Returns:
      bytes
    • getBytesWrapped

      public static byte[] getBytesWrapped​(java.lang.String s, char beginWrap, char endWrap, java.lang.String encoding)
      Returns the byte[] representation of the given string properly wrapped between the given char delimiters using the given encoding.
      Parameters:
      s - source string
      beginWrap - opening char delimiter
      endWrap - closing char delimiter
      encoding - java encoding
      Returns:
      bytes
    • indexOfIgnoreCase

      public static int indexOfIgnoreCase​(java.lang.String searchIn, java.lang.String searchFor)
      Finds the position of a substring within a string ignoring case.
      Parameters:
      searchIn - the string to search in
      searchFor - the array of strings to search for
      Returns:
      the position where searchFor is found within searchIn starting from startingPosition.
    • indexOfIgnoreCase

      public static int indexOfIgnoreCase​(int startingPosition, java.lang.String searchIn, java.lang.String searchFor)
      Finds the position of a substring within a string ignoring case.
      Parameters:
      startingPosition - the position to start the search from
      searchIn - the string to search in
      searchFor - the array of strings to search for
      Returns:
      the position where searchFor is found within searchIn starting from startingPosition.
    • indexOfIgnoreCase

      public static int indexOfIgnoreCase​(int startingPosition, java.lang.String searchIn, java.lang.String[] searchForSequence, java.lang.String openingMarkers, java.lang.String closingMarkers, java.util.Set<StringUtils.SearchMode> searchMode)
      Finds the position of the first of a consecutive sequence of strings within a string, ignoring case, with the option to skip text delimited by given markers or within comments.

      Independently of the searchMode provided, when searching for the second and following strings SearchMode.SKIP_WHITE_SPACE will be added and SearchMode.SKIP_BETWEEN_MARKERS removed.

      Parameters:
      startingPosition - the position to start the search from
      searchIn - the string to search in
      searchForSequence - searchForSequence
      openingMarkers - characters which delimit the beginning of a text block to skip
      closingMarkers - characters which delimit the end of a text block to skip
      searchMode - a Set, ideally an EnumSet, containing the flags from the enum StringUtils.SearchMode that determine the behavior of the search
      Returns:
      the position where searchFor is found within searchIn starting from startingPosition.
    • indexOfIgnoreCase

      public static int indexOfIgnoreCase​(int startingPosition, java.lang.String searchIn, java.lang.String searchFor, java.lang.String openingMarkers, java.lang.String closingMarkers, java.util.Set<StringUtils.SearchMode> searchMode)
      Finds the position of a substring within a string, ignoring case, with the option to skip text delimited by given markers or within comments.
      Parameters:
      startingPosition - the position to start the search from
      searchIn - the string to search in
      searchFor - the string to search for
      openingMarkers - characters which delimit the beginning of a text block to skip
      closingMarkers - characters which delimit the end of a text block to skip
      searchMode - a Set, ideally an EnumSet, containing the flags from the enum StringUtils.SearchMode that determine the behavior of the search
      Returns:
      the position where searchFor is found within searchIn starting from startingPosition.
    • indexOfIgnoreCase

      public static int indexOfIgnoreCase​(int startingPosition, java.lang.String searchIn, java.lang.String searchFor, java.lang.String openingMarkers, java.lang.String closingMarkers, java.lang.String overridingMarkers, java.util.Set<StringUtils.SearchMode> searchMode)
      Finds the position of a substring within a string, ignoring case, with the option to skip text delimited by given markers or within comments.
      Parameters:
      startingPosition - the position to start the search from
      searchIn - the string to search in
      searchFor - the string to search for
      openingMarkers - characters which delimit the beginning of a text block to skip
      closingMarkers - characters which delimit the end of a text block to skip
      overridingMarkers - the subset of openingMarkers that override the remaining markers, e.g., if openingMarkers = "'(" and overridingMarkers = "'" then the block between the outer parenthesis in "start ('max('); end" is strictly consumed, otherwise the suffix " end" would end up being consumed too in the process of handling the nested parenthesis.
      searchMode - a Set, ideally an EnumSet, containing the flags from the enum StringUtils.SearchMode that determine the behavior of the search
      Returns:
      the position where searchFor is found within searchIn starting from startingPosition.
    • split

      public static java.util.List<java.lang.String> split​(java.lang.String stringToSplit, java.lang.String delimiter, boolean trim)
      Splits stringToSplit into a list, using the given delimiter
      Parameters:
      stringToSplit - the string to split
      delimiter - the string to split on
      trim - should the split strings be whitespace trimmed?
      Returns:
      the list of strings, split by delimiter
      Throws:
      java.lang.IllegalArgumentException - if an error occurs
    • split

      public static java.util.List<java.lang.String> split​(java.lang.String stringToSplit, java.lang.String delimiter, java.lang.String openingMarkers, java.lang.String closingMarkers, boolean trim)
      Splits stringToSplit into a list, using the given delimiter and skipping all between the given markers.
      Parameters:
      stringToSplit - the string to split
      delimiter - the string to split on
      openingMarkers - characters which delimit the beginning of a text block to skip
      closingMarkers - characters which delimit the end of a text block to skip
      trim - should the split strings be whitespace trimmed?
      Returns:
      the list of strings, split by delimiter
      Throws:
      java.lang.IllegalArgumentException - if an error occurs
    • split

      public static java.util.List<java.lang.String> split​(java.lang.String stringToSplit, java.lang.String delimiter, java.lang.String openingMarkers, java.lang.String closingMarkers, boolean trim, java.util.Set<StringUtils.SearchMode> searchMode)
      Splits stringToSplit into a list, using the given delimiter and skipping all between the given markers.
      Parameters:
      stringToSplit - the string to split
      delimiter - the string to split on
      openingMarkers - characters which delimit the beginning of a text block to skip
      closingMarkers - characters which delimit the end of a text block to skip
      trim - should the split strings be whitespace trimmed?
      searchMode - a Set, ideally an EnumSet, containing the flags from the enum StringUtils.SearchMode that determine the behaviour of the search
      Returns:
      the list of strings, split by delimiter
      Throws:
      java.lang.IllegalArgumentException - if an error occurs
    • split

      public static java.util.List<java.lang.String> split​(java.lang.String stringToSplit, java.lang.String delimiter, java.lang.String openingMarkers, java.lang.String closingMarkers, java.lang.String overridingMarkers, boolean trim)
      Splits stringToSplit into a list, using the given delimiter and skipping all between the given markers.
      Parameters:
      stringToSplit - the string to split
      delimiter - the string to split on
      openingMarkers - characters which delimit the beginning of a text block to skip
      closingMarkers - characters which delimit the end of a text block to skip
      overridingMarkers - the subset of openingMarkers that override the remaining markers, e.g., if openingMarkers = "'(" and overridingMarkers = "'" then the block between the outer parenthesis in "start ('max('); end" is strictly consumed, otherwise the suffix " end" would end up being consumed too in the process of handling the nested parenthesis.
      trim - should the split strings be whitespace trimmed?
      Returns:
      the list of strings, split by delimiter
      Throws:
      java.lang.IllegalArgumentException - if an error occurs
    • split

      public static java.util.List<java.lang.String> split​(java.lang.String stringToSplit, java.lang.String delimiter, java.lang.String openingMarkers, java.lang.String closingMarkers, java.lang.String overridingMarkers, boolean trim, java.util.Set<StringUtils.SearchMode> searchMode)
      Splits stringToSplit into a list, using the given delimiter and skipping all between the given markers.
      Parameters:
      stringToSplit - the string to split
      delimiter - the string to split on
      openingMarkers - characters which delimit the beginning of a text block to skip
      closingMarkers - characters which delimit the end of a text block to skip
      overridingMarkers - the subset of openingMarkers that override the remaining markers, e.g., if openingMarkers = "'(" and overridingMarkers = "'" then the block between the outer parenthesis in "start ('max('); end" is strictly consumed, otherwise the suffix " end" would end up being consumed too in the process of handling the nested parenthesis.
      trim - should the split strings be whitespace trimmed?
      searchMode - a Set, ideally an EnumSet, containing the flags from the enum StringUtils.SearchMode that determine the behaviour of the search
      Returns:
      the list of strings, split by delimiter
      Throws:
      java.lang.IllegalArgumentException - if an error occurs
    • startsWithIgnoreCase

      public static boolean startsWithIgnoreCase​(java.lang.String searchIn, int startAt, java.lang.String searchFor)
      Determines whether or not the string 'searchIn' contains the string 'searchFor', dis-regarding case starting at 'startAt' Shorthand for a String.regionMatch(...)
      Parameters:
      searchIn - the string to search in
      startAt - the position to start at
      searchFor - the string to search for
      Returns:
      whether searchIn starts with searchFor, ignoring case
    • startsWithIgnoreCase

      public static boolean startsWithIgnoreCase​(java.lang.String searchIn, java.lang.String searchFor)
      Determines whether or not the string 'searchIn' starts with the string 'searchFor', dis-regarding case. Shorthand for a String.regionMatch(...)
      Parameters:
      searchIn - the string to search in
      searchFor - the string to search for
      Returns:
      whether searchIn starts with searchFor, ignoring case
    • startsWithIgnoreCaseAndNonAlphaNumeric

      public static boolean startsWithIgnoreCaseAndNonAlphaNumeric​(java.lang.String searchIn, java.lang.String searchFor)
      Determines whether or not the string 'searchIn' starts with the string 'searchFor', disregarding case,leading whitespace and non-alphanumeric characters.
      Parameters:
      searchIn - the string to search in
      searchFor - the string to search for
      Returns:
      true if the string starts with 'searchFor' ignoring whitespace
    • startsWithIgnoreCaseAndWs

      public static boolean startsWithIgnoreCaseAndWs​(java.lang.String searchIn, java.lang.String searchFor)
      Determines whether or not the string 'searchIn' starts with the string 'searchFor', disregarding case and leading whitespace
      Parameters:
      searchIn - the string to search in
      searchFor - the string to search for
      Returns:
      true if the string starts with 'searchFor' ignoring whitespace
    • startsWithIgnoreCaseAndWs

      public static boolean startsWithIgnoreCaseAndWs​(java.lang.String searchIn, java.lang.String searchFor, int beginPos)
      Determines whether or not the string 'searchIn' contains the string 'searchFor', disregarding case and leading whitespace
      Parameters:
      searchIn - the string to search in
      searchFor - the string to search for
      beginPos - where to start searching
      Returns:
      true if the string starts with 'searchFor' ignoring whitespace
    • startsWithIgnoreCaseAndWs

      public static int startsWithIgnoreCaseAndWs​(java.lang.String searchIn, java.lang.String[] searchFor)
      Determines whether or not the string 'searchIn' starts with one of the strings in 'searchFor', disregarding case and leading whitespace
      Parameters:
      searchIn - the string to search in
      searchFor - the string array to search for
      Returns:
      the 'searchFor' array index that matched or -1 if none matches
    • endsWithIgnoreCase

      public static boolean endsWithIgnoreCase​(java.lang.String searchIn, java.lang.String searchFor)
      Determines whether or not the string 'searchIn' ends with the string 'searchFor', dis-regarding case starting at 'startAt' Shorthand for a String.regionMatch(...)
      Parameters:
      searchIn - the string to search in
      startAt - the position to start at
      searchFor - the string to search for
      Returns:
      whether searchIn ends with searchFor, ignoring case
    • stripEnclosure

      public static byte[] stripEnclosure​(byte[] source, java.lang.String prefix, java.lang.String suffix)
      Parameters:
      source - bytes to strip
      prefix - prefix
      suffix - suffix
      Returns:
      result bytes
    • toAsciiString

      public static java.lang.String toAsciiString​(byte[] buffer)
      Returns the bytes as an ASCII String.
      Parameters:
      buffer - the bytes representing the string
      Returns:
      The ASCII String.
    • toAsciiString

      public static java.lang.String toAsciiString​(byte[] buffer, int startPos, int length)
      Returns the bytes as an ASCII String.
      Parameters:
      buffer - the bytes to convert
      startPos - the position to start converting
      length - the length of the string to convert
      Returns:
      the ASCII string
    • wildCompareIgnoreCase

      public static boolean wildCompareIgnoreCase​(java.lang.String searchIn, java.lang.String searchFor)
      Compares searchIn against searchForWildcard with wildcards, in a case insensitive manner.
      Parameters:
      searchIn - the string to search in
      searchFor - the string to search for, using the 'standard' SQL wildcard chars of '%' and '_'
      Returns:
      true if matches
    • lastIndexOf

      public static int lastIndexOf​(byte[] s, char c)
    • indexOf

      public static int indexOf​(byte[] s, char c)
    • isNullOrEmpty

      public static boolean isNullOrEmpty​(java.lang.String toTest)
    • stripComments

      public static java.lang.String stripComments​(java.lang.String src, java.lang.String stringOpens, java.lang.String stringCloses, boolean slashStarComments, boolean slashSlashComments, boolean hashComments, boolean dashDashComments)
      Returns the given string, with comments removed
      Parameters:
      src - the source string
      stringOpens - characters which delimit the "open" of a string
      stringCloses - characters which delimit the "close" of a string, in counterpart order to stringOpens
      slashStarComments - strip slash-star type "C" style comments
      slashSlashComments - strip slash-slash C++ style comments to end-of-line
      hashComments - strip #-style comments to end-of-line
      dashDashComments - strip "--" style comments to end-of-line
      Returns:
      the input string with all comment-delimited data removed
    • sanitizeProcOrFuncName

      public static java.lang.String sanitizeProcOrFuncName​(java.lang.String src)
      Next two functions are to help DBMD check if the given string is in form of database.name and return it as "database";"name" with comments removed. If string is NULL or wildcard (%), returns null and exits. First, we sanitize...
      Parameters:
      src - the source string
      Returns:
      the input string with all comment-delimited data removed
    • splitDBdotName

      public static java.util.List<java.lang.String> splitDBdotName​(java.lang.String source, java.lang.String db, java.lang.String quoteId, boolean isNoBslashEscSet)
      Splits an entity identifier into its parts (database and entity name) and returns a list containing the two elements. If the identifier doesn't contain the database part then the argument db is used in its place and source corresponds to the full entity name. If argument source is NULL or wildcard (%), returns an empty list.
      Parameters:
      source - the source string
      db - database, if available
      quoteId - quote character as defined on server
      isNoBslashEscSet - is our connection in no BackSlashEscape mode
      Returns:
      the input string with all comment-delimited data removed
    • getFullyQualifiedName

      public static java.lang.String getFullyQualifiedName​(java.lang.String db, java.lang.String entity, java.lang.String quoteId, boolean isPedantic)
      Builds and returns a fully qualified name, quoted if necessary, for the given database entity.
      Parameters:
      db - database name
      entity - identifier
      quoteId - quote character as defined on server
      isPedantic - are we in pedantic mode
      Returns:
      fully qualified name
    • isEmptyOrWhitespaceOnly

      public static boolean isEmptyOrWhitespaceOnly​(java.lang.String str)
    • escapeQuote

      public static java.lang.String escapeQuote​(java.lang.String src, java.lang.String quotChar)
    • quoteIdentifier

      public static java.lang.String quoteIdentifier​(java.lang.String identifier, java.lang.String quoteChar, boolean isPedantic)
      Surrounds identifier with quoteChar and duplicates these symbols inside the identifier.
      Parameters:
      quoteChar - ` or "
      identifier - in pedantic mode (connection property pedantic=true) identifier is treated as unquoted (as it is stored in the database) even if it starts and ends with quoteChar; in non-pedantic mode if identifier starts and ends with quoteChar method treats it as already quoted and doesn't modify.
      isPedantic - are we in pedantic mode
      Returns:
      With quoteChar="`":
      • null -> null
      • abc -> `abc`
      • ab`c -> `ab``c`
      • ab"c -> `ab"c`
      • `ab``c` -> `ab``c` in non-pedantic mode or ```ab````c``` in pedantic mode
      With quoteChar="\"":
      • null -> null
      • abc -> "abc"
      • ab`c -> "ab`c"
      • ab"c -> "ab""c"
      • "ab""c" -> "ab""c" in non-pedantic mode or """ab""""c""" in pedantic mode
    • quoteIdentifier

      public static java.lang.String quoteIdentifier​(java.lang.String identifier, boolean isPedantic)
      Surrounds identifier with "`" and duplicates these symbols inside the identifier.
      Parameters:
      identifier - in pedantic mode (connection property pedantic=true) identifier is treated as unquoted (as it is stored in the database) even if it starts and ends with "`"; in non-pedantic mode if identifier starts and ends with "`" method treats it as already quoted and doesn't modify.
      isPedantic - are we in pedantic mode
      Returns:
      • null -> null
      • abc -> `abc`
      • ab`c -> `ab``c`
      • ab"c -> `ab"c`
      • `ab``c` -> `ab``c` in non-pedantic mode or ```ab````c``` in pedantic mode
    • unQuoteIdentifier

      public static java.lang.String unQuoteIdentifier​(java.lang.String identifier, java.lang.String quoteChar)
      Trims identifier, removes quote chars from first and last positions and replaces double occurrences of quote char from entire identifier, i.e converts quoted identifier into form as it is stored in database.
      Parameters:
      identifier - identifier
      quoteChar - ` or "
      Returns:
      • null -> null
      • abc -> abc
      • `abc` -> abc
      • `ab``c` -> ab`c
      • `"ab`c"` -> "ab`c"
      • `ab"c` -> ab"c
      • "abc" -> abc
      • "`ab""c`" -> `ab"c`
      • "ab`c" -> ab`c
    • indexOfQuoteDoubleAware

      public static int indexOfQuoteDoubleAware​(java.lang.String searchIn, java.lang.String quoteChar, int startFrom)
    • toString

      public static java.lang.String toString​(byte[] value, int offset, int length, java.lang.String encoding)
    • toString

      public static java.lang.String toString​(byte[] value, java.lang.String encoding)
    • toString

      public static java.lang.String toString​(byte[] value, int offset, int length)
    • toString

      public static java.lang.String toString​(byte[] value)
    • getBytes

      public static byte[] getBytes​(char[] value)
      Returns the byte[] representation of subset of the given char[] using the default/platform encoding.
      Parameters:
      value - chars
      Returns:
      bytes
    • getBytes

      public static byte[] getBytes​(char[] c, java.lang.String encoding)
      Returns the byte[] representation of subset of the given char[] using the given encoding.
      Parameters:
      c - chars
      encoding - java encoding
      Returns:
      bytes
    • getBytes

      public static byte[] getBytes​(char[] value, int offset, int length)
    • getBytes

      public static byte[] getBytes​(char[] value, int offset, int length, java.lang.String encoding)
      Returns the byte[] representation of subset of the given char[] using the given encoding.
      Parameters:
      value - chars
      offset - offset
      length - length
      encoding - java encoding
      Returns:
      bytes
    • getBytes

      public static byte[] getBytes​(java.lang.String value)
    • getBytes

      public static byte[] getBytes​(java.lang.String value, int offset, int length)
    • getBytes

      public static byte[] getBytes​(java.lang.String value, int offset, int length, java.lang.String encoding)
    • isValidIdChar

      public static final boolean isValidIdChar​(char c)
    • appendAsHex

      public static void appendAsHex​(java.lang.StringBuilder builder, byte[] bytes)
    • appendAsHex

      public static void appendAsHex​(java.lang.StringBuilder builder, int value)
    • getBytesNullTerminated

      public static byte[] getBytesNullTerminated​(java.lang.String value, java.lang.String encoding)
    • canHandleAsServerPreparedStatementNoCache

      public static boolean canHandleAsServerPreparedStatementNoCache​(java.lang.String sql, ServerVersion serverVersion, boolean allowMultiQueries, boolean noBackslashEscapes, boolean useAnsiQuotes)
    • padString

      public static java.lang.String padString​(java.lang.String stringVal, int requiredLength)
    • safeIntParse

      public static int safeIntParse​(java.lang.String intAsString)
    • isStrictlyNumeric

      public static boolean isStrictlyNumeric​(java.lang.CharSequence cs)
      Checks is the CharSequence contains digits only. No leading sign and thousands or decimal separators are allowed.
      Parameters:
      cs - The CharSequence to check.
      Returns:
      true if the CharSequence not empty and contains only digits, false otherwise.
    • safeTrim

      public static java.lang.String safeTrim​(java.lang.String toTrim)
    • stringArrayToString

      public static java.lang.String stringArrayToString​(java.lang.String[] elems, java.lang.String prefix, java.lang.String midDelimiter, java.lang.String lastDelimiter, java.lang.String suffix)
      Constructs a String containing all the elements in the String array bounded and joined by the provided concatenation elements. The last element uses a different delimiter.
      Parameters:
      elems - the String array from where to take the elements.
      prefix - the prefix of the resulting String.
      midDelimiter - the delimiter to be used between the N-1 elements
      lastDelimiter - the delimiter to be used before the last element.
      suffix - the suffix of the resulting String.
      Returns:
      a String built from the provided String array and concatenation elements.
    • hasWildcards

      public static boolean hasWildcards​(java.lang.String src)
      Does the string contain wildcard symbols ('%' or '_'). Used in DatabaseMetaData.
      Parameters:
      src - string
      Returns:
      true if src contains wildcard symbols
    • getUniqueSavepointId

      public static java.lang.String getUniqueSavepointId()
    • joinWithSerialComma

      public static java.lang.String joinWithSerialComma​(java.util.List<?> elements)
      Joins all elements of the given list using serial comma (Oxford comma) rules. E.g.: - "A" - "A and B" - "A, B, and C"
      Parameters:
      elements - the elements to join
      Returns:
      the String with all elements, joined by commas and "and".
    • unquoteBytes

      public static byte[] unquoteBytes​(byte[] bytes)
    • quoteBytes

      public static byte[] quoteBytes​(byte[] bytes)