View Javadoc
1   package org.melati.poem.test;
2   
3   import java.util.Enumeration;
4   
5   import org.melati.poem.CachedTailoredQuery;
6   import org.melati.poem.Column;
7   import org.melati.poem.Field;
8   import org.melati.poem.FieldSet;
9   import org.melati.poem.Table;
10  import org.melati.poem.util.EnumUtils;
11  
12  /**
13   * @author timp
14   */
15  public class CachedTailoredQueryTest extends PoemTestCase {
16  
17    /**
18     * Constructor for CachedTailoredQueryTest.
19     * 
20     * @param name
21     */
22    public CachedTailoredQueryTest(String name) {
23      super(name);
24    }
25  
26    /**
27     * {@inheritDoc}
28     * @see org.melati.poem.test.PoemTestCase#setUp()
29     */
30    protected void setUp()
31        throws Exception {
32      super.setUp();
33    }
34  
35    /**
36     * {@inheritDoc}
37     * @see org.melati.poem.test.PoemTestCase#tearDown()
38     */
39    protected void tearDown()
40        throws Exception {
41      super.tearDown();
42    }
43  
44    /**
45     * @see org.melati.poem.CachedTailoredQuery#selection()
46     */
47    public void testSelection() {
48  
49    }
50  
51    /** 
52     * This needs more thought.
53     * 
54     * @see org.melati.poem.CachedTailoredQuery#selection_firstRaw()
55     */
56    public void testSelection_firstRaw() {
57      Column<?>[] cols = new Column[1];
58      cols[0] = getDb().getTableCategoryTable().troidColumn();
59      //cols[1] = getDb().getTableInfoTable().getColumn("category");
60      Table<?>[] tables = new Table[1];
61      tables[0] = getDb().getTableCategoryTable();
62      //tables[1] = getDb().getTableInfoTable();
63      int queries = getDb().getQueryCount();
64      CachedTailoredQuery ctq = new CachedTailoredQuery(cols,
65                                                        tables, 
66                                                        null,
67                                                        null);
68      int queries2 = getDb().getQueryCount();
69      assertEquals(queries, queries2);
70      assertEquals(3,EnumUtils.vectorOf(ctq.selection_firstRaw()).size());
71      int queries3 = getDb().getQueryCount();
72      // Hmm looks like the cache is working
73      //assertEquals(queries2 + 2, queries3); 
74      assertEquals(3,EnumUtils.vectorOf(ctq.selection_firstRaw()).size());
75      int queries4 = getDb().getQueryCount();
76      assertEquals(queries3, queries4);
77  
78    }
79  
80    /**
81     * @see org.melati.poem.CachedTailoredQuery#CachedTailoredQuery
82     */
83    public void testCachedTailoredQueryStringColumnArrayTableArrayStringString() {
84      Column<?>[] colsInQuery = new Column[2];
85      colsInQuery[0] = getDb().getGroupTable().getColumn("name");
86      colsInQuery[1] = getDb().getGroupTable().troidColumn();
87      Table<?>[] tables = new Table[1];
88      tables[0] = getDb().getGroupTable();
89      //tables[1] = getDb().getTableCategoryTable();
90      int queries = getDb().getQueryCount();
91      CachedTailoredQuery ctq = new CachedTailoredQuery(colsInQuery,
92                                                        tables, 
93                                                        null,
94                                                        null);
95      int queries2 = getDb().getQueryCount();
96      assertEquals(queries, queries2);
97  
98      getDb().setLogSQL(true);
99      
100     Enumeration<FieldSet> results = ctq.selection();
101     while (results.hasMoreElements()) {
102       results.nextElement();
103     }
104     results = ctq.selection();
105     assertEquals(1,EnumUtils.vectorOf(results).size());
106     while (results.hasMoreElements()) {
107       results.nextElement();
108     }
109     getDb().setLogSQL(false);
110 
111     int queries3 = getDb().getQueryCount();
112     
113     // The query and 2 lookups of tableinfo
114     int numberOfCachedTableinfoRecords = 0;
115     Enumeration<Object> r = getDb().getTableInfoTable().getCacheInfo().getHeldElements();      
116     while(r.hasMoreElements()){
117       r.nextElement();
118       numberOfCachedTableinfoRecords++;
119     }
120     System.err.println("TableInfo records:" + numberOfCachedTableinfoRecords);
121     assertEquals(9,numberOfCachedTableinfoRecords);
122     int numberOfCachedGroupRecords = 0;
123     Enumeration<Object> g = getDb().getGroupTable().getCacheInfo().getHeldElements();      
124     while(g.hasMoreElements()){
125       g.nextElement();
126       numberOfCachedGroupRecords++;
127     }
128     assertEquals(1,numberOfCachedGroupRecords);
129     assertEquals(1,EnumUtils.vectorOf(ctq.selection()).size());
130     int queries4 = getDb().getQueryCount();
131     assertEquals(queries3, queries4);
132     
133     System.err.println(ctq.toString());
134     Enumeration<FieldSet> en = ctq.selection();
135     while (en.hasMoreElements()) {
136       FieldSet fs = (FieldSet) en.nextElement();
137       Enumeration<Field<?>> fields = fs.elements();
138       System.err.println("--");
139       while (fields.hasMoreElements()) {
140         Field<?> f = (Field<?>) fields.nextElement();
141         System.err.println(f.getName() + "=" + f.getRawString());
142       }
143 
144     }
145     System.err.println("==");
146     CachedTailoredQuery ctqDistinct = new CachedTailoredQuery("DISTINCT", colsInQuery,
147         tables, null,
148         null);
149     assertEquals(1,EnumUtils.vectorOf(ctqDistinct.selection()).size());
150     System.err.println(ctqDistinct.toString());
151     Enumeration<FieldSet> en2 = ctqDistinct.selection();
152     while (en2.hasMoreElements()) {
153       FieldSet fs = (FieldSet) en2.nextElement();
154       Enumeration<Field<?>> fields = fs.elements();
155       System.err.println("--");
156       while (fields.hasMoreElements()) {
157         Field<?> f = (Field<?>) fields.nextElement();
158         System.err.println(f.getName() + "=" + f.getRawString());
159       }
160     }
161     CachedTailoredQuery ctqOthers = new CachedTailoredQuery("DISTINCT", colsInQuery,
162         tables, "id=0",
163         null);
164     assertEquals(1,EnumUtils.vectorOf(ctqOthers.selection()).size());
165   }
166 
167   /**
168    * @see org.melati.poem.CachedTailoredQuery#CachedTailoredQuery(Column[],
169    *      Table[], String, String)
170    */
171   public void testCachedTailoredQueryColumnArrayTableArrayStringString() {
172 
173   }
174 
175   /**
176    * @see org.melati.poem.CachedTailoredQuery#upToDate()
177    */
178   public void testUpToDate() {
179 
180   }
181 
182 }