From codereview-return-3291-apmail-trafodion-codereview-archive=trafodion.apache.org@trafodion.incubator.apache.org Fri Sep 2 16:15:36 2016 Return-Path: X-Original-To: apmail-trafodion-codereview-archive@minotaur.apache.org Delivered-To: apmail-trafodion-codereview-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 84DA919CC4 for ; Fri, 2 Sep 2016 16:15:36 +0000 (UTC) Received: (qmail 78027 invoked by uid 500); 2 Sep 2016 16:15:36 -0000 Delivered-To: apmail-trafodion-codereview-archive@trafodion.apache.org Received: (qmail 77994 invoked by uid 500); 2 Sep 2016 16:15:36 -0000 Mailing-List: contact codereview-help@trafodion.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: codereview@trafodion.incubator.apache.org Delivered-To: mailing list codereview@trafodion.incubator.apache.org Received: (qmail 77983 invoked by uid 99); 2 Sep 2016 16:15:36 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 02 Sep 2016 16:15:36 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id 98EBCC0C65 for ; Fri, 2 Sep 2016 16:15:35 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -5.446 X-Spam-Level: X-Spam-Status: No, score=-5.446 tagged_above=-999 required=6.31 tests=[KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-1.426] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id Lsa9tk9_qcQF for ; Fri, 2 Sep 2016 16:15:34 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with SMTP id 867125F306 for ; Fri, 2 Sep 2016 16:15:33 +0000 (UTC) Received: (qmail 77962 invoked by uid 99); 2 Sep 2016 16:15:32 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 02 Sep 2016 16:15:32 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 8CA4DE0159; Fri, 2 Sep 2016 16:15:32 +0000 (UTC) From: traflm To: codereview@trafodion.incubator.apache.org Reply-To: codereview@trafodion.incubator.apache.org References: In-Reply-To: Subject: [GitHub] incubator-trafodion pull request #683: new spj of startwith and connectby Content-Type: text/plain Message-Id: <20160902161532.8CA4DE0159@git1-us-west.apache.org> Date: Fri, 2 Sep 2016 16:15:32 +0000 (UTC) Github user traflm commented on a diff in the pull request: https://github.com/apache/incubator-trafodion/pull/683#discussion_r77372705 --- Diff: core/sql/lib_mgmt/src/main/java/org/trafodion/libmgmt/FileMgmt.java --- @@ -547,6 +558,64 @@ private static void checkFile(String fname, int dataSize) throws SQLException { throw new SQLException("Jar file size is over the threshold[100Mb]"); } } + + public static void connectBy(String columnName, String originSql, String startWithSql, String startWithKey,ResultSet[] rs) throws SQLException{ + String[] out =new String[1]; + getStartWith(startWithSql, startWithKey, out); + String[] s = out[0].replaceAll("^\\[|\\]$", "").split("\\s*,\\s*"); + String clause = " "; + for(int i = 0;i ids = new ArrayList(); + Connection conn = getConn(); + PreparedStatement ps = conn.prepareStatement(sqlTest); + try{ + ids.addAll(bfsSearch(sql,startWithKey,searchLevel,ps)); + out[0]= Arrays.toString(ids.toArray()); + } catch(SQLException e){ + LOG.error(sql,e); + throw e; + } + } + + private static ArrayList bfsSearch(String sql, String startWithKey,int searchLevel, PreparedStatement ps) throws SQLException{ --- End diff -- @zellerh , the SPJ can now create volatile table, that bug is already fixed recently in T2 driver. Agree with Han's opinion. using a table to hold intermediate result is more generic. And the current solution is still serial, or did I misunderstand? After getting all the start seeds, it should be able to spawn multiple threads to do it in parallel, but using volatile table and using SQL's parallel infrastructure seems a better approach. It is not easy to write a generic one, but this will be a very useful SPJ, so thanks for the effort. --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastructure@apache.org or file a JIRA ticket with INFRA. ---