Author: gates
Date: Thu Mar 26 15:34:21 2009
New Revision: 758687
URL: http://svn.apache.org/viewvc?rev=758687&view=rev
Log:
PIG-713 Added alias completion as part of tab completion in grunt.
Added:
hadoop/pig/trunk/src/org/apache/pig/tools/grunt/PigCompletorAliases.java
hadoop/pig/trunk/src/org/apache/pig/tools/grunt/autocomplete_aliases
Modified:
hadoop/pig/trunk/CHANGES.txt
hadoop/pig/trunk/build.xml
hadoop/pig/trunk/src/org/apache/pig/Main.java
hadoop/pig/trunk/src/org/apache/pig/PigServer.java
hadoop/pig/trunk/src/org/apache/pig/tools/grunt/Grunt.java
hadoop/pig/trunk/src/org/apache/pig/tools/grunt/PigCompletor.java
Modified: hadoop/pig/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/pig/trunk/CHANGES.txt?rev=758687&r1=758686&r2=758687&view=diff
==============================================================================
--- hadoop/pig/trunk/CHANGES.txt (original)
+++ hadoop/pig/trunk/CHANGES.txt Thu Mar 26 15:34:21 2009
@@ -53,6 +53,9 @@
Changed semantics of DEFINE to define last used alias if no argument is
given (ericg via gates).
+ PIG-713 Added alias completion as part of tab completion in grunt (ericg
+ via gates).
+
IMPROVEMENTS
PIG-270: proper line number for parse errors (daijy via olgan)
Modified: hadoop/pig/trunk/build.xml
URL:
http://svn.apache.org/viewvc/hadoop/pig/trunk/build.xml?rev=758687&r1=758686&r2=758687&view=diff
==============================================================================
--- hadoop/pig/trunk/build.xml (original)
+++ hadoop/pig/trunk/build.xml Thu Mar 26 15:34:21 2009
@@ -255,6 +255,7 @@
<classpath refid="${cp}" />
</javac>
<copy file="${src.dir}/org/apache/pig/tools/grunt/autocomplete"
todir="${build.classes}/org/apache/pig/tools/grunt"/>
+ <copy
file="${src.dir}/org/apache/pig/tools/grunt/autocomplete_aliases"
todir="${build.classes}/org/apache/pig/tools/grunt"/>
</target>
<!-- this target is for compilation with all warnings enabled -->
Modified: hadoop/pig/trunk/src/org/apache/pig/Main.java
URL:
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/Main.java?rev=758687&r1=758686&r2=758687&view=diff
==============================================================================
--- hadoop/pig/trunk/src/org/apache/pig/Main.java (original)
+++ hadoop/pig/trunk/src/org/apache/pig/Main.java Thu Mar 26 15:34:21 2009
@@ -39,7 +39,6 @@
import org.apache.pig.impl.util.PropertiesUtil;
import org.apache.pig.tools.cmdline.CmdLineParser;
import org.apache.pig.tools.grunt.Grunt;
-import org.apache.pig.tools.grunt.PigCompletor;
import org.apache.pig.impl.util.LogUtils;
import org.apache.pig.tools.timer.PerformanceTimerFactory;
import org.apache.pig.tools.parameters.ParameterSubstitutionPreprocessor;
@@ -309,7 +308,6 @@
// Interactive
mode = ExecMode.SHELL;
ConsoleReader reader = new ConsoleReader(System.in, new
OutputStreamWriter(System.out));
- reader.addCompletor(new PigCompletor());
reader.setDefaultPrompt("grunt> ");
final String HISTORYFILE = ".pig_history";
String historyFile = System.getProperty("user.home") +
File.separator + HISTORYFILE;
Modified: hadoop/pig/trunk/src/org/apache/pig/PigServer.java
URL:
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/PigServer.java?rev=758687&r1=758686&r2=758687&view=diff
==============================================================================
--- hadoop/pig/trunk/src/org/apache/pig/PigServer.java (original)
+++ hadoop/pig/trunk/src/org/apache/pig/PigServer.java Thu Mar 26 15:34:21 2009
@@ -32,6 +32,7 @@
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -663,6 +664,10 @@
// pigContext.getExecutionEngine().reclaimScope(this.scope);
}
+ public Set<String> getAliasKeySet() {
+ return aliasOp.keySet();
+ }
+
public Map<LogicalOperator, DataBag> getExamples(String alias) {
//LogicalPlan plan = aliases.get(aliasOp.get(alias));
LogicalPlan plan = null;
Modified: hadoop/pig/trunk/src/org/apache/pig/tools/grunt/Grunt.java
URL:
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/tools/grunt/Grunt.java?rev=758687&r1=758686&r2=758687&view=diff
==============================================================================
--- hadoop/pig/trunk/src/org/apache/pig/tools/grunt/Grunt.java (original)
+++ hadoop/pig/trunk/src/org/apache/pig/tools/grunt/Grunt.java Thu Mar 26
15:34:21 2009
@@ -25,12 +25,15 @@
import java.io.FileOutputStream;
import jline.ConsoleReader;
+import jline.Completor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.pig.PigServer;
import org.apache.pig.impl.PigContext;
import org.apache.pig.tools.grunt.GruntParser;
+import org.apache.pig.tools.grunt.PigCompletor;
+import org.apache.pig.tools.grunt.PigCompletorAliases;
import org.apache.pig.PigException;
import org.apache.pig.backend.executionengine.ExecException;
import org.apache.pig.tools.pigscript.parser.*;
@@ -59,8 +62,11 @@
public void setConsoleReader(ConsoleReader c)
{
+ c.addCompletor(new PigCompletorAliases(pig));
+ c.addCompletor(new PigCompletor());
parser.setConsoleReader(c);
}
+
public void run() {
boolean verbose =
"true".equalsIgnoreCase(pig.getPigContext().getProperties().getProperty("verbose"));
while(true) {
Modified: hadoop/pig/trunk/src/org/apache/pig/tools/grunt/PigCompletor.java
URL:
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/tools/grunt/PigCompletor.java?rev=758687&r1=758686&r2=758687&view=diff
==============================================================================
--- hadoop/pig/trunk/src/org/apache/pig/tools/grunt/PigCompletor.java (original)
+++ hadoop/pig/trunk/src/org/apache/pig/tools/grunt/PigCompletor.java Thu Mar
26 15:34:21 2009
@@ -50,16 +50,12 @@
try
{
keywordStream = new FileInputStream(AUTOCOMPLETE_FILENAME);
+ PigCompletor.loadCandidateKeywords(keywordStream, candidates);
}
catch (FileNotFoundException e)
{
log.debug("Can not find autocomplete file in current
directory, skipped");
}
- if (keywordStream!=null)
- {
- processKeywordStream(keywordStream);
- keywordStream.close();
- }
// try to find all keyword file in CLASSPATH
Enumeration<URL> itr =
getClass().getClassLoader().getResources(AUTOCOMPLETE_FILENAME);
@@ -67,30 +63,25 @@
{
URL url = itr.nextElement();
keywordStream = url.openStream();
- if (keywordStream!=null)
- {
- processKeywordStream(keywordStream);
- keywordStream.close();
- }
- else
+ if (!PigCompletor.loadCandidateKeywords(keywordStream,
candidates))
log.debug("Error loading " + url + ", skipped");
}
// try to use default keyword file
keywordStream =
getClass().getResourceAsStream("/org/apache/pig/tools/grunt/autocomplete");
- if (keywordStream!=null)
- {
- processKeywordStream(keywordStream);
- keywordStream.close();
+ PigCompletor.loadCandidateKeywords(keywordStream, candidates);
}
- }
catch (IOException e) {
log.warn("Error occurs when reading internal autocomplete file,
skipped");
}
}
- private void processKeywordStream(InputStream stream) throws IOException
+ public static boolean loadCandidateKeywords(InputStream stream,
Set<String> candidates)
+ throws IOException
{
+ if (stream==null)
+ return false;
+
BufferedReader reader = new BufferedReader(new
InputStreamReader(stream));
String line;
while ((line=reader.readLine())!=null)
@@ -99,28 +90,18 @@
{
line = line.trim();
if (!line.equals(""))
- addCandidateString(line);
+ candidates.add(line);
}
}
reader.close();
- }
-
- public void addCandidateString(final String candidateString) {
- for (int i=0;i<candidateString.length();i++)
- {
- if (isDelimit(candidateString.charAt(i)))
- {
- log.warn("Auto-complete keyword \"" + candidateString + "\" is
skipped because it contains white spaces");
- return;
- }
- }
- candidates.add(candidateString);
+ stream.close();
+ return true;
}
public int complete(String buffer, int cursor, List candidates) {
if (cursor == 0)
- return 0;
+ return -1;
int p = cursor;
p--;
while (p > 0) {
@@ -138,12 +119,17 @@
if (!sb.toString().equals("")) {
List<String> matches = searchCandidate(sb.toString());
if (matches != null) {
+ if(matches.size()==1) {
+ candidates.add(matches.get(0)+" ");
+ }
+ else {
for (String match:matches)
candidates.add(match);
+ }
return p;
}
}
- return 0;
+ return -1;
}
private boolean isDelimit(char c) {
@@ -155,7 +141,7 @@
private List<String> searchCandidate(String s) {
List<String> list = new ArrayList<String>();
for (String can : candidates) {
- if (can.startsWith(s) && !can.equals(s))
+ if (can.startsWith(s))
list.add(can);
}
return list;
Added: hadoop/pig/trunk/src/org/apache/pig/tools/grunt/PigCompletorAliases.java
URL:
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/tools/grunt/PigCompletorAliases.java?rev=758687&view=auto
==============================================================================
--- hadoop/pig/trunk/src/org/apache/pig/tools/grunt/PigCompletorAliases.java
(added)
+++ hadoop/pig/trunk/src/org/apache/pig/tools/grunt/PigCompletorAliases.java
Thu Mar 26 15:34:21 2009
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pig.tools.grunt;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.pig.PigServer;
+
+import jline.Completor;
+
+public class PigCompletorAliases implements Completor {
+ private final Log log = LogFactory.getLog(getClass());
+ Set<String> keywords;
+ PigServer pig;
+
+ public PigCompletorAliases(PigServer server)
+ {
+ keywords = new TreeSet<String>();
+ pig = server;
+ try {
+ InputStream keywordStream =
getClass().getResourceAsStream("/org/apache/pig/tools/grunt/autocomplete_aliases");
+ PigCompletor.loadCandidateKeywords(keywordStream, keywords);
+ }
+ catch (IOException e) {
+ log.warn("Error occurs when reading internal autocomplete_aliases
file, skipped");
+ }
+ }
+
+ public int complete(String buffer, int cursor, List candidates)
+ {
+ if (cursor == 0)
+ return -1;
+
+ String[] tokens = buffer.split("\\s+");
+ if (tokens.length==0)
+ return -1;
+ if (keywords.contains(tokens[tokens.length-1])) {
+ for (String c : pig.getAliasKeySet()) {
+ candidates.add(c);
+ }
+ return cursor;
+ }
+
+ if (tokens.length==1)
+ return -1;
+
+ if (!keywords.contains(tokens[tokens.length-2]))
+ return -1;
+
+ if (keywords.isEmpty()) {
+ return cursor;
+ }
+
+ int p = cursor;
+ p--;
+ while (p > 0) {
+ char c = buffer.charAt(p);
+ if (Character.isWhitespace(c)) {
+ p++;
+ break;
+ }
+ p--;
+ }
+ StringBuffer sb = new StringBuffer();
+ for (int i = p; i < cursor; i++) {
+ sb.append(buffer.charAt(i));
+ }
+ if (!sb.toString().equals("")) {
+ List<String> matches = searchCandidate(sb.toString());
+ if (matches != null) {
+ candidates.addAll(matches);
+ return p;
+ }
+ }
+ return -1;
+ }
+
+ private List<String> searchCandidate(String s)
+ {
+ List<String> list = new ArrayList<String>();
+ for (String can : pig.getAliasKeySet()) {
+ if (can.startsWith(s) && !can.equals(s))
+ list.add(can);
+ }
+ return list;
+ }
+}
Added: hadoop/pig/trunk/src/org/apache/pig/tools/grunt/autocomplete_aliases
URL:
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/tools/grunt/autocomplete_aliases?rev=758687&view=auto
==============================================================================
--- hadoop/pig/trunk/src/org/apache/pig/tools/grunt/autocomplete_aliases (added)
+++ hadoop/pig/trunk/src/org/apache/pig/tools/grunt/autocomplete_aliases Thu
Mar 26 15:34:21 2009
@@ -0,0 +1,30 @@
+filter
+foreach
+order
+distinct
+cogroup
+join
+cross
+union
+split
+group
+flatten
+dump
+describe
+explain
+store
+FILTER
+FOREACH
+ORDER
+DISTINCT
+COGROUP
+JOIN
+CROSS
+UNION
+SPLIT
+GROUP
+FLATTEN
+DUMP
+DESCRIBE
+EXPLAIN
+STORE