+-----------------------------------------------------------------------------+
| Oracle7Channel:                                                             |
|                                                                             |
|                            +-------+                                        |
|                  *-------->| close |                                        |
|                            +-------+                                        |
|                              ^  |                                           |
|               closeChannel   |  | openChannel [ok] /resetFetch              |
|                              |  v                                           |
|  +----------------------------------------------------------------------+   |
|  | open:           +---------+                                          |   |
|  |        *------->|         |----+                                     |   |
|  |                 |         |    | selectAttributes:...[!ok]           |   |
|  |                 |         |    | insertRow:...                       |   |
|  |                 |         |    | updateRow:...                       |   |
|  |  cancelFetch    |         |    | deleteRowsDescribedByQualifier:...  |   |
|  |---------------->|         |    |                                     |   |
|  |  /resetFetch    |         |<---+                                     |   |
|  |                 |         |    readTypeForAttribute:                 |   |
|  |                 |  idle   |    readTypesForEntity:                   |   |
|  |                 |         |    describeTableNames                    |   |
|  |                 |         |    describeModelWithTablesNames:         |   |
|  |                 |         |<-----------------------------------------|   |
|  |                 |         |         /resetFetch                      |   |
|  |                 |         |                                          |   |
|  |                 |         |                                          |   |
|  |                 |         |    evaluateExpression:[!select|!ok]      |   |
|  |                 |         |<-----------------------------------------|   |
|  |                 |         |        /resetFetch                       |   |
|  |                 +---------+    {actually, selectAttributes:...       |   |
|  |                      |  ^       calls evaluateExpression:}           |   |
|  | selectAttributes:    |  |                                            |   |
|  |      [ok]            |  |                                            |   |
|  | /willFetchAttributes:|  | fetchAttributes:withZone:[eof]/return nil  |   |
|  |         +------------+  |                /resetFetch                 |   |
|  |         |               |                                            |   |
|  |         v               |                                            |   |
|  |   +-----------------+   |                                            |   |
|  |   |                 |---+                                            |   |
|  |   |                 |                                                |   |
|  |   |                 |      evaluateExpression:[select&ok]            |   |
|  |   |                 |             /                                  |   |
|  |   |                 |<-----------------------------------------------|   |
|  |   |                 |                                                |   |
|  |   |   fetching      |-----+                                          |   |
|  |   |                 |     |  describeResults                         |   |
|  |   |                 |     |  fetchAttributes:withZone:[!eof]         |   |
|  |   |                 |     |  dictionaryWithObjects:...               |   |
|  |   |                 |     |                                          |   |
|  |   |                 |<----+                                          |   |
|  |   +-----------------+                                                |   |
|  +----------------------------------------------------------------------+   |
|                                                                             |
+-----------------------------------------------------------------------------+


+--------+                       +--------+                        +--------+
| idle   |  selectAttributes:... | attri  |   evaluateExpression:  |fetching|
|        |---------------------->| buted  |----------------------->|        |
|        |  /evaluateExpression: +--------+                        |        |
|        |                                                         |        |
|        |           evaluateExpression:                           |        |
|        |-------------------------------------------------------->|        |
+--------+                                                         +--------+


1. [channel selectAttributes:...]
1.1. [Oracle7SQLExpression selectExpressionForAttributes:...]
1.1.1. [channel willSelectAttributes:...]
1.1.1.1 [channel willFetchAttributes:...]
2. [channel evaluateExpression:...]


   - getting attribute list (0/1)

   - evaluating the sql statement [select]

         - [ociCursor parseSQL:...]
         - prepare the column/attribute/buffer triplets.

   - fetching the first row



Hypothesis (to be checked):
   - The sql statement given by selectExpressionForAttributes fetches 
     them in the order of the attribute array;
   - When we do a parseSQL:, the columns are defined in the same order;

