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));
}
}