Return-Path: X-Original-To: apmail-phoenix-dev-archive@minotaur.apache.org Delivered-To: apmail-phoenix-dev-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 98A9D184A6 for ; Tue, 26 Jan 2016 22:30:41 +0000 (UTC) Received: (qmail 14275 invoked by uid 500); 26 Jan 2016 22:30:41 -0000 Delivered-To: apmail-phoenix-dev-archive@phoenix.apache.org Received: (qmail 14218 invoked by uid 500); 26 Jan 2016 22:30:41 -0000 Mailing-List: contact dev-help@phoenix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@phoenix.apache.org Delivered-To: mailing list dev@phoenix.apache.org Received: (qmail 14207 invoked by uid 99); 26 Jan 2016 22:30:41 -0000 Received: from Unknown (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 26 Jan 2016 22:30:41 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id DD5CFC2331 for ; Tue, 26 Jan 2016 22:30:40 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.779 X-Spam-Level: * X-Spam-Status: No, score=1.779 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.001] autolearn=disabled Received: from mx1-us-west.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id LMp71VVoJevE for ; Tue, 26 Jan 2016 22:30:40 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-us-west.apache.org (ASF Mail Server at mx1-us-west.apache.org) with SMTP id 3913420974 for ; Tue, 26 Jan 2016 22:30:40 +0000 (UTC) Received: (qmail 13952 invoked by uid 99); 26 Jan 2016 22:30:40 -0000 Received: from arcas.apache.org (HELO arcas) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 26 Jan 2016 22:30:40 +0000 Received: from arcas.apache.org (localhost [127.0.0.1]) by arcas (Postfix) with ESMTP id DB5312C1F64 for ; Tue, 26 Jan 2016 22:30:39 +0000 (UTC) Date: Tue, 26 Jan 2016 22:30:39 +0000 (UTC) From: "Maryann Xue (JIRA)" To: dev@phoenix.incubator.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (PHOENIX-1854) Investigate not setting ProjectedColumnExpression in TupleProjector expressions array MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/PHOENIX-1854?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15118191#comment-15118191 ] Maryann Xue commented on PHOENIX-1854: -------------------------------------- I looked into it and found that the code you pointed out was exactly a bug. There was no double wrapping or "self-link" in the first place, but the way this visitor handled it make it look like a cyclic link. It should stop once it finds that the ProjectedColumnExpression has been projected from another ProjectedColumnExpression, for the second projected column does not belong to the projector we have in this visitor (we don't have the information of the projectors at further levels). The multi-level projection itself shouldn't be considered a problem for it is logical in cases like nested derived tables. I'll check-in with a fix shortly. > Investigate not setting ProjectedColumnExpression in TupleProjector expressions array > ------------------------------------------------------------------------------------- > > Key: PHOENIX-1854 > URL: https://issues.apache.org/jira/browse/PHOENIX-1854 > Project: Phoenix > Issue Type: Improvement > Reporter: James Taylor > Assignee: Maryann Xue > Priority: Minor > Fix For: 4.8.0 > > > In implementing PHOENIX-1826, on the visit of a ProjectedColumnExpression, we dereference the TupleProjector expressions array and continue the visit on the expression. To prevent a stack overflow due to infinite recursion, we detect the case when the dereferenced ProjectedColumnExpression is the same as the expression being visited and do not continue the traversal. See FIXME in OrderPreservingTracker.TrackOrderPreservingExpressionVisitor: > {code} > @Override > public Info visit(ProjectedColumnExpression node) { > if (projector == null) { > return super.visit(node); > } > Expression expression = projector.getExpressions()[node.getPosition()]; > // FIXME: prevents infinite recursion for union all in subquery, but > // should a ProjectedColumnExpression be used in this case? Wouldn't > // it make more sense to not create this wrapper in this case? > if (expression == node) { > return super.visit(node); > } > return expression.accept(this); > } > {code} > It's possible that this wrapping is not necessary in the first place. -- This message was sent by Atlassian JIRA (v6.3.4#6332)