package executor

type ddlExecutor struct {
	*Executor
}

type dmlExecutor struct {
	*Executor
}

type selectPlanner struct {
	*Executor
}

func (e *Executor) ensureInternals() {
	e.initOnce.Do(func() {
		if e.prepared == nil {
			e.prepared = newPreparedStoreWithConfig(e.logger, e.preparedStoreMax, e.preparedStoreIdleTTL)
		}
		if e.ddl == nil {
			e.ddl = &ddlExecutor{Executor: e}
		}
		if e.dml == nil {
			e.dml = &dmlExecutor{Executor: e}
		}
		if e.selectPlanner == nil {
			e.selectPlanner = &selectPlanner{Executor: e}
		}
	})
}
