SQOOP-2906: Optimization of AvroUtil.toAvroIdentifier (Joeri Hermans via Jarek Jarcec Cecho)
Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/5779aec0 Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/5779aec0 Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/5779aec0 Branch: refs/heads/trunk Commit: 5779aec031d4bb0bccd79329923e5dbad3786280 Parents: ac217a0 Author: Jarek Jarcec Cecho <[email protected]> Authored: Thu May 19 07:26:57 2016 -0700 Committer: Jarek Jarcec Cecho <[email protected]> Committed: Thu May 19 07:26:57 2016 -0700 ---------------------------------------------------------------------- src/java/org/apache/sqoop/avro/AvroUtil.java | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sqoop/blob/5779aec0/src/java/org/apache/sqoop/avro/AvroUtil.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/sqoop/avro/AvroUtil.java b/src/java/org/apache/sqoop/avro/AvroUtil.java index 319be0f..ee29f14 100644 --- a/src/java/org/apache/sqoop/avro/AvroUtil.java +++ b/src/java/org/apache/sqoop/avro/AvroUtil.java @@ -114,11 +114,25 @@ public final class AvroUtil { * Format candidate to avro specifics */ public static String toAvroIdentifier(String candidate) { - String formattedCandidate = candidate.replaceAll("\\W+", "_"); - if (formattedCandidate.substring(0,1).matches("[a-zA-Z_]")) { - return formattedCandidate; + char[] data = candidate.toCharArray(); + boolean skip = false; + int stringIndex = 0; + + for (char c:data) { + if (Character.isLetterOrDigit(c) || c == '_') { + data[stringIndex++] = c; + skip = false; + } else if(!skip) { + data[stringIndex++] = '_'; + skip = true; + } + } + + char initial = data[0]; + if (Character.isLetter(initial) || initial == '_') { + return new String(data, 0, stringIndex); } else { - return "AVRO_" + formattedCandidate; + return "AVRO_".concat(new String(data, 0, stringIndex)); } }
