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