func (ad AnsiDialecter) ParametersSql(name string) string {
	return ""
}
ParametersSql return sql to query procedure paramters schema
package kdb
import (
	"bytes"
	"database/sql"
	"errors"
	"fmt"
	"github.com/sdming/kdb/ansi"
	"reflect"
	"strconv"
	"strings"
)
type Driver interface {
	Compiler
}
type Compiler interface {
	Compile(source string, exp Expression) (query string, args []interface{}, err error)
}
var _compilers = make(map[string]Compiler)
func RegisterCompiler(driver string, compiler Compiler) {
	if compiler == nil {
		panic("register compiler is nil")
	}
	_compilers[driver] = compiler
}
func GetCompiler(driver string) (Compiler, error) {
	c, ok := _compilers[driver]
	if !ok {
		return nil, errors.New(fmt.Sprint("can not get compiler:", driver))
	}
	return c, nil
}
type Schemaer interface {
	Table(db *sql.DB, name string) (*ansi.DbTable, error)
	Function(db *sql.DB, name string) (*ansi.DbFunction, error)
}
var _schemaers = make(map[string]Schemaer)
func RegisterSchemaer(driver string, schemaer Schemaer) {
	if schemaer == nil {
		panic("register schemaer is nil")
	}
	_schemaers[driver] = schemaer
}
func GetSchemaer(driver string) (Schemaer, error) {
	schema, ok := _schemaers[driver]
	if !ok {
		return nil, errors.New(fmt.Sprint("can not get schemaer:", driver))
	}
	return schema, nil
}
type Dialecter interface {
	Name() string
	SupportNamedParameter() bool
	SupportIndexedParameter() bool
	ParameterPlaceHolder() string
	QuoteString(s string) string
	Quote(string) string
	TableSql(name string) string
	ColumnsSql(name string) string
	FunctionSql(name string) string
	ParametersSql(name string) string
	DbType(nativeType string) ansi.DbType
	SplitStatement() string
}
var _dialecters = make(map[string]Dialecter)
func RegisterDialecter(driver string, dialecter Dialecter) {
	if dialecter == nil {
		panic("register dialecter is nil")
	}
	_dialecters[driver] = dialecter
}
func GetDialecter(driver string) (Dialecter, error) {
	d, ok := _dialecters[driver]
	if !ok {
		return nil, errors.New(fmt.Sprint("can not get dialecter:", driver))
	}
	return d, nil
}
func DefaultDialecter() Dialecter {
	return AnsiDialecter{}
}
type AnsiDialecter struct {
}
func (ad AnsiDialecter) Name() string {
	return "ansi"
}
func (ad AnsiDialecter) SupportNamedParameter() bool {
	return false
}
func (ad AnsiDialecter) SupportIndexedParameter() bool {
	return false
}
func (ad AnsiDialecter) ParameterPlaceHolder() string {
	return " ? "
}
func (ad AnsiDialecter) QuoteString(s string) string {
	return "'" + s + "'"
}
func (ad AnsiDialecter) Quote(s string) string {
	return "\"" + s + "\""
}
func (ansi AnsiDialecter) TableSql(name string) string {
	return ""
}
func (ansi AnsiDialecter) ColumnsSql(name string) string {
	return ""
}
func (ad AnsiDialecter) FunctionSql(s string) string {
	return ""
}