You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by ja...@apache.org on 2016/05/19 14:30:43 UTC

[2/3] sqoop git commit: SQOOP-2906: Optimization of AvroUtil.toAvroIdentifier

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 <ja...@apache.org>
Authored: Thu May 19 07:26:57 2016 -0700
Committer: Jarek Jarcec Cecho <ja...@apache.org>
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));
     }
   }