Uploaded image for project: 'Sqoop'
  1. Sqoop
  2. SQOOP-2864

ClassWriter chokes on column names containing double quotes

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.4.6
    • Fix Version/s: 1.4.7
    • Component/s: None
    • Labels:
      None

      Description

      I've seen a user who created table with column names containing double quotes and while code generation, we quite spectacularly failed:

      16/03/02 12:14:13 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/lib/hadoop-mapreduce
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:325: error: ')' expected
          __sqoop$field_map.put(""tellmewhy"", this._tellmewhy_);
                                  ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:325: error: not a statement
          __sqoop$field_map.put(""tellmewhy"", this._tellmewhy_);
                                        ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:325: error: ';' expected
          __sqoop$field_map.put(""tellmewhy"", this._tellmewhy_);
                                          ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:325: error: not a statement
          __sqoop$field_map.put(""tellmewhy"", this._tellmewhy_);
                                                 ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:325: error: ';' expected
          __sqoop$field_map.put(""tellmewhy"", this._tellmewhy_);
                                                         ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:332: error: ')' expected
          __sqoop$field_map.put(""tellmewhy"", this._tellmewhy_);
                                  ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:332: error: not a statement
          __sqoop$field_map.put(""tellmewhy"", this._tellmewhy_);
                                        ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:332: error: ';' expected
          __sqoop$field_map.put(""tellmewhy"", this._tellmewhy_);
                                          ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:332: error: not a statement
          __sqoop$field_map.put(""tellmewhy"", this._tellmewhy_);
                                                 ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:332: error: ';' expected
          __sqoop$field_map.put(""tellmewhy"", this._tellmewhy_);
                                                         ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:340: error: ')' expected
          else    if (""tellmewhy"".equals(__fieldName)) {
                        ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:340: error: ';' expected
          else    if (""tellmewhy"".equals(__fieldName)) {
                              ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:340: error: ';' expected
          else    if (""tellmewhy"".equals(__fieldName)) {
                                                    ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:343: error: 'else' without 'if'
          else    if ("'single'".equals(__fieldName)) {
          ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:355: error: ')' expected
          else    if (""tellmewhy"".equals(__fieldName)) {
                        ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:355: error: ';' expected
          else    if (""tellmewhy"".equals(__fieldName)) {
                              ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:355: error: ';' expected
          else    if (""tellmewhy"".equals(__fieldName)) {
                                                    ^
      /tmp/sqoop-root/compile/60f084d5441147b848b007d2a18b504d/bofa.java:359: error: 'else' without 'if'
          else    if ("'single'".equals(__fieldName)) {
          ^
      18 errors
      16/03/02 12:14:14 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Error returned by javac
        at org.apache.sqoop.orm.CompilationManager.compile(CompilationManager.java:217)
        at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:108)
        at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:488)
        at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:615)
        at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
        at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
        at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
        at org.apache.sqoop.Sqoop.main(Sqoop.java:236)
      

      I've looked into it and the problem is that we've started preserving raw column names inside the generated class, but we did not escape properly the case when the column name contain double quotes.

        Attachments

        1. SQOOP-2864.patch
          3 kB
          Jarek Jarcec Cecho

          Issue Links

            Activity

              People

              • Assignee:
                jarcec Jarek Jarcec Cecho
                Reporter:
                jarcec Jarek Jarcec Cecho
              • Votes:
                0 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: