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

ClassWriter chokes on column names containing double quotes

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.4.6
    • 1.4.7
    • None
    • 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

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

              Dates

                Created:
                Updated:
                Resolved: