// Query generates a Query for a target model. The target that is // passed in must be a pointer to a struct, and will be used as a // reference for query construction. func Query(m *gorp.DbMap, exec gorp.SqlExecutor, target interface{}) interfaces.Query { // Handle non-standard dialects switch src := m.Dialect.(type) { case gorp.MySQLDialect: m.Dialect = dialects.MySQLDialect{src} case gorp.SqliteDialect: m.Dialect = dialects.SqliteDialect{src} default: } plan := &QueryPlan{ dbMap: m, executor: exec, } targetVal := reflect.ValueOf(target) if targetVal.Kind() != reflect.Ptr || targetVal.Elem().Kind() != reflect.Struct { plan.Errors = append(plan.Errors, errors.New("A query target must be a pointer to struct")) } targetTable, err := plan.mapTable(targetVal) if err != nil { plan.Errors = append(plan.Errors, err) return plan } plan.target = targetVal plan.table = targetTable return plan }
func runQueryPlanSuite(t *testing.T, dialect gorp.Dialect, connection *sql.DB) { dbMap := new(gorp.DbMap) dbMap.Dialect = dialect dbMap.Db = connection testSuite := new(QueryPlanTestSuite) testSuite.Map = dbMap suite.Run(t, testSuite) }
// TODO: DRY the suite initialization code func runQueryLanguageSuite(t *testing.T, dialect gorp.Dialect, connection *sql.DB) { dbMap := new(gorp.DbMap) dbMap.Dialect = dialect dbMap.Db = connection //dbMap.TraceOn("TEST DB: ", log.New(os.Stdout, "", log.LstdFlags)) testSuite := new(QueryLanguageTestSuite) testSuite.Map = dbMap suite.Run(t, testSuite) }