MCPcopy Create free account
hub / github.com/Percona-Lab/mysql_random_data_load / parse

Method parse

tableparser/tableparser.go:156–213  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

154}
155
156func (t *Table) parse() error {
157 // +--------------------------- field type
158 // | +---------------- field size / enum values: decimal(10,2) or enum('a','b')
159 // | | +---------- extra info (unsigned, etc)
160 // | | |
161 re := regexp.MustCompile(`^(.*?)(?:\((.*?)\)(.*))?$`)
162
163 query := "SELECT * FROM `information_schema`.`COLUMNS` WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? ORDER BY ORDINAL_POSITION"
164
165 constraints := constraintsAsMap(t.Constraints)
166
167 rows, err := t.conn.Query(query, t.Schema, t.Name)
168 if err != nil {
169 return err
170 }
171 defer rows.Close()
172
173 cols, err := rows.Columns()
174 if err != nil {
175 return errors.Wrap(err, "Cannot get column names")
176 }
177
178 for rows.Next() {
179 var f Field
180 var allowNull string
181 fields := makeScanRecipients(&f, &allowNull, cols)
182 err := rows.Scan(fields...)
183 if err != nil {
184 log.Errorf("Cannot get table fields: %s", err)
185 continue
186 }
187
188 allowedValues := []string{}
189 if f.DataType == "enum" || f.DataType == "set" {
190 m := re.FindStringSubmatch(f.ColumnType)
191 if len(m) < 2 {
192 continue
193 }
194 vals := strings.Split(m[2], ",")
195 for _, val := range vals {
196 val = strings.TrimPrefix(val, "'")
197 val = strings.TrimSuffix(val, "'")
198 allowedValues = append(allowedValues, val)
199 }
200 }
201
202 f.SetEnumVals = allowedValues
203 f.IsNullable = allowNull == "YES"
204 f.Constraint = constraints[f.ColumnName]
205
206 t.Fields = append(t.Fields, f)
207 }
208
209 if rows.Err() != nil {
210 return rows.Err()
211 }
212 return nil
213}

Callers 1

NewTableFunction · 0.95

Calls 3

constraintsAsMapFunction · 0.85
makeScanRecipientsFunction · 0.85
ScanMethod · 0.80

Tested by

no test coverage detected