Some progress toward implementing store(Analysis).
[cfb.git] / prod / net / jaekl / cfb / db / Table.java
1 package net.jaekl.cfb.db;
2
3 // Copyright (C) 2015 Christian Jaekl
4
5 import java.util.ArrayList;
6 import java.util.Arrays;
7 import java.util.HashMap;
8
9 public class Table {
10         String m_name;
11         HashMap<String, Column> m_columnsByName;
12         ArrayList<Column> m_columns;
13         
14         public Table(String name, Column[] columns) {
15                 m_name = name;
16
17                 m_columns = new ArrayList<Column>();
18                 m_columns.addAll(Arrays.asList(columns));
19
20                 m_columnsByName = new HashMap<String, Column>();
21                 for (int i = 0; i < columns.length; ++i) {
22                         m_columnsByName.put(columns[i].getName(), columns[i]);
23                 }
24         }
25         
26         public String getName() { return m_name; }
27         public int getNumColumns() { return m_columns.size(); }
28         public Column getColumn(int idx) { return m_columns.get(idx); }
29         public Column getColumn(String name) { return m_columnsByName.get(name); }
30
31         // Construct a table from an array of objects like this:
32         // {
33         //   { table_name },
34         //   { column_name, type, width (-1 for default), null/not_null }
35         // }
36         public static Table construct(Object[][] spec) 
37         {
38                 assert(null != spec);
39                 assert(spec.length > 1);
40                 assert(1 == spec[0].length);
41                 assert(spec[0][0] instanceof String);
42                 
43                 String name = (String)(spec[0][0]);
44                 Column[] columns = new Column[spec.length - 1];
45                 
46                 for (int idx = 1; idx < spec.length; ++idx) {
47                         columns[idx - 1] = Column.construct(spec[idx]);
48                 }
49                 
50                 return new Table(name, columns);
51         }
52 }