Пример #1
0
  public void prepare() throws DatabaseException {
    type = (String) cmd.getObject("type");
    view_name = (String) cmd.getObject("view_name");

    String schema_name = database.getCurrentSchema();
    vname = TableName.resolve(schema_name, view_name);
    vname = database.tryResolveCase(vname);

    if (type.equals("create")) {
      // Get the select expression
      select_expression = (TableSelectExpression) cmd.getObject("select_expression");
      // Get the column name list
      ArrayList col_list = (ArrayList) cmd.getObject("column_list");

      // Generate the TableExpressionFromSet hierarchy for the expression,
      TableExpressionFromSet from_set = Planner.generateFromSet(select_expression, database);
      // Form the plan
      plan = Planner.formQueryPlan(database, select_expression, from_set, new ArrayList());

      // Wrap the result around a SubsetNode to alias the columns in the
      // table correctly for this view.
      int sz = (col_list == null) ? 0 : col_list.size();
      Variable[] original_vars = from_set.generateResolvedVariableList();
      Variable[] new_column_vars = new Variable[original_vars.length];

      if (sz > 0) {
        if (sz != original_vars.length) {
          throw new StatementException("Column list is not the same size as the columns selected.");
        }
        for (int i = 0; i < sz; ++i) {
          String col_name = (String) col_list.get(i);
          new_column_vars[i] = new Variable(vname, col_name);
        }
      } else {
        sz = original_vars.length;
        for (int i = 0; i < sz; ++i) {
          new_column_vars[i] = new Variable(vname, original_vars[i].getName());
        }
      }

      // Check there are no repeat column names in the table.
      for (int i = 0; i < sz; ++i) {
        Variable cur_v = new_column_vars[i];
        for (int n = i + 1; n < sz; ++n) {
          if (new_column_vars[n].equals(cur_v)) {
            throw new DatabaseException(
                "Duplicate column name '"
                    + cur_v
                    + "' in view.  "
                    + "A view may not contain duplicate column names.");
          }
        }
      }

      // Wrap the plan around a SubsetNode plan
      plan = new QueryPlan.SubsetNode(plan, original_vars, new_column_vars);
    }
  }
Пример #2
0
 @Test
 public void testParseFails() throws SqlParseException {
   Planner planner = getPlanner();
   try {
     SqlNode parse = planner.parse("select * * from \"emps\"");
     fail("expected error, got " + parse);
   } catch (SqlParseException e) {
     assertThat(e.getMessage(), containsString("Encountered \"*\" at line 1, column 10."));
   }
 }
Пример #3
0
  public void testFirstTrip() throws Exception {

    Planner planner = new TestPlanner("portland", "45.58,-122.68", "45.48,-122.6");

    Response response = planner.getFirstTrip();
    Itinerary itinerary = response.getPlan().itinerary.get(0);
    Leg leg = itinerary.legs.get(1);
    assertTrue(leg.startTime.get(Calendar.HOUR) >= 4);
    assertTrue(leg.startTime.get(Calendar.HOUR) <= 7);
  }
Пример #4
0
 /** Tests that Hive dialect does not generate "AS". */
 @Test
 public void testHiveDialect() throws SqlParseException {
   Planner planner = getPlanner();
   SqlNode parse =
       planner.parse(
           "select * from (select * from \"emps\") as t\n" + "where \"name\" like '%e%'");
   final SqlDialect hiveDialect = new SqlDialect(SqlDialect.DatabaseProduct.HIVE, "Hive", null);
   assertThat(
       parse.toSqlString(hiveDialect).getSql(),
       equalTo("SELECT *\n" + "FROM (SELECT *\n" + "FROM emps) T\n" + "WHERE name LIKE '%e%'"));
 }
Пример #5
0
 /**
  * Tests that planner throws an error if you pass to {@link
  * Planner#convert(org.eigenbase.sql.SqlNode)} a {@link org.eigenbase.sql.SqlNode} that has been
  * parsed but not validated.
  */
 @Test
 public void testConvertWithoutValidateFails() throws Exception {
   Planner planner = getPlanner();
   SqlNode parse = planner.parse("select * from \"emps\"");
   try {
     RelNode rel = planner.convert(parse);
     fail("expected error, got " + rel);
   } catch (IllegalArgumentException e) {
     assertThat(
         e.getMessage(), containsString("cannot move from STATE_3_PARSED to STATE_4_VALIDATED"));
   }
 }
Пример #6
0
  @Override
  public void manage() {
    updateExplorationMap();

    List<Planner> planners = new ArrayList<>();

    planners.add(new ColonyPlanner(world, controls));

    planners.add(new ResearchPlanner(world, controls, exploration));
    planners.add(new ColonizationPlanner(world, controls));
    planners.add(
        new ExplorationPlanner(
            world,
            controls,
            exploration,
            new Action1<Date>() {
              @Override
              public void invoke(Date value) {
                lastSatelliteDeploy = value;
              }
            }));

    int mix1 = planners.size();
    planners.add(new EconomyPlanner(world, controls));
    planners.add(new OffensePlanner(world, controls));
    planners.add(new StaticDefensePlanner(world, controls));
    int mix2 = planners.size();

    planners.add(
        new AttackPlanner(
            world,
            controls,
            exploration,
            new Action1<Date>() {
              @Override
              public void invoke(Date value) {
                nextAttack = value;
              }
            }));

    ModelUtils.shuffle(planners.subList(mix1, mix2));

    for (Planner p : planners) {
      List<Action0> acts = p.run();
      if (!acts.isEmpty()) {
        applyActions.addAll(acts);
        if (p.getClass() == ColonyPlanner.class) {
          return;
        }
      }
    }
  }
Пример #7
0
  @Test
  public void testValidateFails() throws SqlParseException {
    Planner planner = getPlanner();
    SqlNode parse = planner.parse("select * from \"emps\" where \"Xname\" like '%e%'");
    assertThat(
        parse.toString(), equalTo("SELECT *\n" + "FROM `emps`\n" + "WHERE `Xname` LIKE '%e%'"));

    try {
      SqlNode validate = planner.validate(parse);
      fail("expected error, got " + validate);
    } catch (ValidationException e) {
      assertThat(Util.getStackTrace(e), containsString("Column 'Xname' not found in any table"));
      // ok
    }
  }
Пример #8
0
  @Test
  public void testParseAndConvert() throws Exception {
    Planner planner = getPlanner();
    SqlNode parse = planner.parse("select * from \"emps\" where \"name\" like '%e%'");
    assertThat(
        parse.toString(), equalTo("SELECT *\n" + "FROM `emps`\n" + "WHERE `name` LIKE '%e%'"));

    SqlNode validate = planner.validate(parse);
    RelNode rel = planner.convert(validate);
    assertThat(
        toString(rel),
        equalTo(
            "ProjectRel(empid=[$0], deptno=[$1], name=[$2], salary=[$3], commission=[$4])\n"
                + "  FilterRel(condition=[LIKE($2, '%e%')])\n"
                + "    EnumerableTableAccessRel(table=[[hr, emps]])\n"));
  }
Пример #9
0
  public void mouseClicked(MouseEvent e) {
    Point p = e.getPoint();
    MainLoop loop = planner.getMapPanel().getLoop();
    final RoadDirection dir;

    if (fullRect.contains(p)) {
      dir = RoadDirection.CENTER;
    } else if (nw.contains(p)) {
      dir = RoadDirection.NW;
    } else if (ne.contains(p)) {
      dir = RoadDirection.NE;
    } else if (sw.contains(p)) {
      dir = RoadDirection.SW;
    } else if (se.contains(p)) {
      dir = RoadDirection.SE;
    } else {
      dir = null;
    }

    if (dir != null) {
      loop.syncAndExecute(
          () -> {
            Globals.roadDirection = dir;
            repaint();
          });
    }
  }
Пример #10
0
  public void testPlanner() throws Exception {

    Planner planner =
        new TestPlanner("portland", "NE 43RD AVE at NE GLISAN ST", "NE 43RD AVE at NE ROYAL CT");

    Response response = planner.getItineraries();
    Itinerary itinerary = response.getPlan().itinerary.get(0);
    Leg leg = itinerary.legs.get(0);
    List<WalkStep> steps = leg.walkSteps;
    assertEquals(3, steps.size());
    WalkStep step0 = steps.get(0);
    WalkStep step2 = steps.get(2);
    assertEquals(AbsoluteDirection.NORTH, step0.absoluteDirection);
    assertEquals("NE 43RD AVE", step0.streetName);
    assertEquals("NE 43RD AVE", step2.streetName);
    assertEquals(RelativeDirection.LEFT, step2.relativeDirection);
    assertTrue(step2.stayOn);
  }
Пример #11
0
  public void testAlerts() throws Exception {

    // SE 47th and Ash, NE 47th and Davis (note that we cross Burnside, this goes from SE to NE)
    Planner planner =
        new TestPlanner("portland", "SE 47TH AVE at SE ASH ST", "NE 47TH AVE at NE COUCH ST");
    Response response = planner.getItineraries();

    Itinerary itinerary = response.getPlan().itinerary.get(0);
    Leg leg = itinerary.legs.get(0);
    List<WalkStep> steps = leg.walkSteps;
    assertEquals(2, steps.size());
    WalkStep step0 = steps.get(0);
    WalkStep step1 = steps.get(1);

    assertNotNull(step0.alerts);
    assertEquals(1, step0.alerts.size());
    assertEquals("SE", step0.alerts.get(0).alertHeaderText.getSomeTranslation());

    assertEquals(1, step1.alerts.size());
    assertEquals("NE", step1.alerts.get(0).alertHeaderText.getSomeTranslation());
  }
Пример #12
0
 /** Unit test that parses, validates, converts and plans. */
 @Test
 public void testPlan() throws Exception {
   RuleSet ruleSet =
       RuleSets.ofList(
           MergeFilterRule.INSTANCE,
           JavaRules.ENUMERABLE_FILTER_RULE,
           JavaRules.ENUMERABLE_PROJECT_RULE);
   Planner planner = getPlanner(ruleSet);
   SqlNode parse = planner.parse("select * from \"emps\"");
   SqlNode validate = planner.validate(parse);
   RelNode convert = planner.convert(validate);
   RelTraitSet traitSet = planner.getEmptyTraitSet().replace(EnumerableConvention.INSTANCE);
   RelNode transform = planner.transform(0, traitSet, convert);
   assertThat(
       toString(transform),
       equalTo(
           "EnumerableProjectRel(empid=[$0], deptno=[$1], name=[$2], salary=[$3], commission=[$4])\n"
               + "  EnumerableTableAccessRel(table=[[hr, emps]])\n"));
 }