(c *sql.Rows, indexMap *int, schemaName string)
| 163 | } |
| 164 | |
| 165 | func (m *TuiModel) PopulateDataForResult(c *sql.Rows, indexMap *int, schemaName string) { |
| 166 | columnNames, _ := c.Columns() |
| 167 | columnValues := make(map[string][]interface{}) |
| 168 | |
| 169 | for c.Next() { // each row of the table |
| 170 | // golang wizardry |
| 171 | columns := make([]interface{}, len(columnNames)) |
| 172 | columnPointers := make([]interface{}, len(columnNames)) |
| 173 | // init interface array |
| 174 | for i := range columns { |
| 175 | columnPointers[i] = &columns[i] |
| 176 | } |
| 177 | |
| 178 | c.Scan(columnPointers...) |
| 179 | |
| 180 | for i, colName := range columnNames { |
| 181 | val := columnPointers[i].(*interface{}) |
| 182 | columnValues[colName] = append(columnValues[colName], *val) |
| 183 | } |
| 184 | } |
| 185 | |
| 186 | // onto the next schema |
| 187 | *indexMap++ |
| 188 | if m.QueryResult != nil && m.QueryData != nil { |
| 189 | m.QueryResult.Data[schemaName] = columnValues |
| 190 | m.QueryData.TableHeaders[schemaName] = columnNames // headers for the schema, for later reference |
| 191 | m.QueryData.TableIndexMap[*indexMap] = schemaName |
| 192 | return |
| 193 | } |
| 194 | m.Table().Data[schemaName] = columnValues // data for schema, organized by column |
| 195 | m.Data().TableHeaders[schemaName] = columnNames // headers for the schema, for later reference |
| 196 | // mapping between schema and an int ( since maps aren't deterministic), for later reference |
| 197 | m.Data().TableIndexMap[*indexMap] = schemaName |
| 198 | } |
| 199 | |
| 200 | func (m *TuiModel) SwapTableValues(f, t *TableState) { |
| 201 | from := &f.Data |
no test coverage detected