// Path: dao/src/main/java/com/hannesdorfmann/sqlbrite/dao/sql/SqlCursorCompileableChildNode.java
// public abstract class SqlCursorCompileableChildNode extends SqlCompileableChildNode
//     implements SqlFinishedStatement {
// 
//   public SqlCursorCompileableChildNode(SqlNode previous) {
//     super(previous);
//   }
// }
// 
// Path: dao/src/main/java/com/hannesdorfmann/sqlbrite/dao/sql/SqlNode.java
// public interface SqlNode {
// 
//   /**
//    * This method will be called to build the sql string recursively
//    *
//    * @param builder string builder
//    */
//   void buildSql(StringBuilder builder);
// 
//   /**
//    * Get the sql string for this {@link SqlNode}.
//    * <p>
//    * <b>This method will be called from {@link #buildSql(StringBuilder)}. So
//    * don't call this directly.</b>
//    * </p>
//    *
//    * @return A sql string representing this node
//    */
//   String getSql();
// 
//   /**
//    * Get the previous {@link SqlChildNode}. This mehtod will be called to
//    * build the sql string recursivly. <b>Do not call it directly</b>
//    *
//    * @return the previous node
//    */
//   SqlNode getPrevious();
// 
//   /**
//    * Get the set of tables (table names) that might be queried or changed during executing the sql
//    * statement
//    *
//    * @return A set of string with the table names this sql statement affects
//    */
//   Set<String> getAffectedTables();
// }


import android.support.annotation.NonNull;
import com.hannesdorfmann.sqlbrite.dao.sql.SqlCursorCompileableChildNode;
import com.hannesdorfmann.sqlbrite.dao.sql.SqlNode;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
package com.hannesdorfmann.sqlbrite.dao.sql.select;


/**
 * The SQL FROM statement to specify the table which should be queried
 *
 * @author Hannes Dorfmann
 */
public class FROM extends SqlCursorCompileableChildNode implements SqlCompileableSelectChildNode {

  private final String sql;
  private final Set<String> affectedTables;

  public FROM(SqlNode previous, @NonNull String tableName) {
    super(previous);
    this.sql = " FROM " + tableName;
    this.affectedTables = Collections.singleton(tableName);
  }

// Path: dao/src/main/java/com/hannesdorfmann/sqlbrite/dao/sql/SqlCursorCompileableChildNode.java
// public abstract class SqlCursorCompileableChildNode extends SqlCompileableChildNode
//     implements SqlFinishedStatement {
// 
//   public SqlCursorCompileableChildNode(SqlNode previous) {
//     super(previous);
//   }
// }
// 
// Path: dao/src/main/java/com/hannesdorfmann/sqlbrite/dao/sql/SqlNode.java
// public interface SqlNode {
// 
//   /**
//    * This method will be called to build the sql string recursively
//    *
//    * @param builder string builder
//    */
//   void buildSql(StringBuilder builder);
// 
//   /**
//    * Get the sql string for this {@link SqlNode}.
//    * <p>
//    * <b>This method will be called from {@link #buildSql(StringBuilder)}. So
//    * don't call this directly.</b>
//    * </p>
//    *
//    * @return A sql string representing this node
//    */
//   String getSql();
// 
//   /**
//    * Get the previous {@link SqlChildNode}. This mehtod will be called to
//    * build the sql string recursivly. <b>Do not call it directly</b>
//    *
//    * @return the previous node
//    */
//   SqlNode getPrevious();
// 
//   /**
//    * Get the set of tables (table names) that might be queried or changed during executing the sql
//    * statement
//    *
//    * @return A set of string with the table names this sql statement affects
//    */
//   Set<String> getAffectedTables();
// }


// Path: dao/src/main/java/com/hannesdorfmann/sqlbrite/dao/sql/select/FROM.java
import android.support.annotation.NonNull;
import com.hannesdorfmann.sqlbrite.dao.sql.SqlCursorCompileableChildNode;
import com.hannesdorfmann.sqlbrite.dao.sql.SqlNode;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

package com.hannesdorfmann.sqlbrite.dao.sql.select;


/**
 * The SQL FROM statement to specify the table which should be queried
 *
 * @author Hannes Dorfmann
 */
public class FROM extends SqlCursorCompileableChildNode implements SqlCompileableSelectChildNode {

  private final String sql;
  private final Set<String> affectedTables;

  public FROM(SqlNode previous, @NonNull String tableName) {
    super(previous);
    this.sql = " FROM " + tableName;
    this.affectedTables = Collections.singleton(tableName);
  }

  public FROM(SqlNode previous, @NonNull String... tableNames) {