/*******************************************************************************
* Copyright (c) 2006 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package com.ibm.wala.util.tables;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import com.ibm.wala.util.Predicate;
import com.ibm.wala.util.collections.HashSetFactory;
/**
* Misc SQL-like support for queries on tables
*/
public class Query {
/**
* SELECT * from t where column=value
* @throws IllegalArgumentException if t == null
*/
public static <T> Collection<Map<String,T>> selectStarWhereEquals(Table<T> t, String column, T value) throws IllegalArgumentException {
if (t == null) {
throw new IllegalArgumentException("t == null");
}
Collection<Map<String,T>> result = new ArrayList<Map<String,T>>();
for (int i = 0 ; i < t.getNumberOfRows(); i++) {
Map<String,T> p = t.row2Map(i);
if (p.get(column).equals(value)) {
result.add(p);
}
}
return result;
}
/**
* SELECT attribute FROM t where column=value
*/
public static <T> Collection<T> selectWhereEquals(Table<T> t, String attribute, String column, T value) {
Collection<Map<String,T>> rows = selectStarWhereEquals(t, column, value);
Collection<T> result = HashSetFactory.make();
for (Map<String,T> p : rows) {
result.add(p.get(attribute));
}
return result;
}
/**
* SELECT attribute FROM t where P(column)
*/
public static <T> Collection<Map<String,T>> selectStarWhere(Table<T> t, String column, Predicate<T> P) {
if (t == null) {
throw new IllegalArgumentException("t == null");
}
Collection<Map<String,T>> c = new ArrayList<Map<String,T>>();
for (int i = 0 ; i < t.getNumberOfRows(); i++) {
Map<String,T> p = t.row2Map(i);
T s = p.get(column);
if (P.test(s)) {
c.add(p);
}
}
return c;
}
public static <T> Table<T> viewWhereEquals(Table<T> t, String column, T value) {
Collection<Map<String,T>> c = selectStarWhereEquals(t, column, value);
Table<T> result = new Table<T>(t);
for (Map<String,T> p : c) {
result.addRow(p);
}
return result;
}
public static StringTable viewWhereEquals(StringTable t, String column, String value) {
Collection<Map<String,String>> c = selectStarWhereEquals(t, column, value);
StringTable result = new StringTable(t);
for (Map<String,String> p : c) {
result.addRow(p);
}
return result;
}
}