public static SqlAdapterType GetAdapter(this IDbConnection dbconn)
        {
            if (!_typeRegistered)
            {
                PreApplicationStart.RegisterTypeMaps();
                _typeRegistered = true;
            }

            var typeName = dbconn.GetType().Name;

            if (typeName.Contains("MySqlConnection"))
            {
                return(SqlAdapterType.MySql);
            }

            if (typeName.Contains("SqlConnection"))
            {
                return(SqlAdapterType.SqlServer);
            }
            if (typeName.Contains("SQLiteConnection"))
            {
                return(SqlAdapterType.Sqlite);
            }
            if (typeName.Contains("SqliteConnection"))
            {
                return(SqlAdapterType.Sqlite);
            }
            if (typeName.Contains("OracleConnection"))
            {
                return(SqlAdapterType.Oracle);
            }

            if (typeName.Contains("NpgsqlConnection"))
            {
                return(SqlAdapterType.Postgres);
            }
            if (typeName.Contains("SAConnection"))
            {
                return(SqlAdapterType.SqlAnyWhere);
            }
            if (typeName.Contains("SqlCeConnection"))
            {
                return(SqlAdapterType.SqlServerCE);
            }
            return(SqlAdapterType.SqlServer);
        }
        static void Main(string[] args)
        {
            PreApplicationStart.RegisterTypeMaps();

            //TestINsert();


            var sqldbLogic = new IgniteLogic();



            //var pg = npglogic.FindPageAction(10, 2);

            //Console.WriteLine($"total:{pg.Count},pageSize:{pg.PageSize},currentPage:{pg.PageNumber}");

            //foreach (var p in pg.Results)
            //{
            //    Console.WriteLine(p.Id.ToString() + "__|__" + p.Name);
            //}

            //var t2ret = npglogic.TestSuperClass();

            //Console.WriteLine("name1 | name2");

            //foreach (var t2 in t2ret)
            //{
            //    Console.WriteLine(t2.Name+" | "+t2.TestName2);
            //}

            //npglogic.FindAction2();



            //var result = npglogic.TestJoinCount<dynamic>(sql =>
            //{

            //    sql.Select(p => p.Id, p => p.Name);
            //    sql.Count(p => p.Id, "Count");
            //    sql.GroupBy(p => p.Id, p => p.Name);

            //    //sql.Join<PgTestLogic.t2>(((test2, t2) =>test2.Name==t2.Name)).Where(v=>v.TestName2.Contains("d"));

            //    //sql.Join<PgTestLogic.t2,int,dynamic>(sql => { },p=>p.Id,v=>v.Name,((test2, t2) => test2.Id, ))

            //    //sql.SelectEntity(p => new SqlColumnEntity("c_name",null), p => new SqlColumnEntity("Id",null));
            //    //sql.Join<PgTestLogic.t2, string>(exp =>
            //    //{
            //    //    exp.Where(p => p.TestName2.Contains("ccc"));
            //    //}, p => p.Name, p => p.Name,JoinType.LeftJoin, v => v.Name, v => v.TestName2);

            //    var sqlsub=sql.InnerJoinSubQuery<PgTestLogic.t2, string>(sql2 =>
            //    {
            //        sql2.Max(p => p.Name);
            //        sql2.GroupBy(p => p.TestName2);
            //        sql2.Count<Test2>(p => p.TestName2,v=>v.Name);
            //    }, p=>p.Name,v=>v.Name,m=>m.TestName2);

            //    sql.GroupBySubQuery<PgTestLogic.t2>(sqlsub.JoinSubAliasTableName, p => p.TestName2);

            //});



            // test for sub query from lambda.

            //var result = npglogic.TestV<VTest>(sql =>
            //{
            //    //sql.Select();

            //    sql.SelectAll();

            //    var sqlsub = sql.LeftJoinSubQuery<PgTestLogic.t2, string>(sql2 =>
            //    {
            //        sql2.Select(p => p.Name);
            //        sql2.Select<VTest>(t => t.TestName2, v => v.Name);
            //          sql2.Count<VTest>(p => p.TestName2, p => p.Count5);
            //        sql2.GroupBy(p => p.Name);

            //    }, v => v.Name, v => v.Name);

            //    sql.SelectSubQuery<VTest>(sqlsub, p => p.Count5);

            //});

            //the above code make below t-sql script:
            //SELECT

            //"Id",
            //"c_name",
            //join_636411782561333769."count_5"
            //FROM
            //    Test2
            //LEFT JOIN(
            //    SELECT
            //        COUNT ("test".v_tt2."name2") AS "count_5",
            //name1
            //    FROM

            //"test".v_tt2

            //group by name1
            //    ) join_636411782561333769 ON Test2."c_name" = join_636411782561333769."name1"



            //var first = result[0];

            //var firstId = first.Id;

            //foreach (var item in result)
            //{
            //    Console.WriteLine($"{item.Id}_{item.c_name}_{item.Count}");
            //}

            //var msLogic = new MssqlTestLogic();

            //msLogic.TestSubSubQuery();


            //test trans
            //var plogic=new PgTestLogic();

            //var l1 = plogic.FindAction();

            //var l2 = plogic.FindActionByTrans();

            //plogic.TestTransInsert();


            //Console.WriteLine(l1.FirstOrDefault().GetType().Name+"____count: "+l1.Count);
            //Console.WriteLine(l2.FirstOrDefault().GetType().Name + "____count: " + l2.Count);
            //var msLogic = new PgTestLogic();

            //msLogic.TestSubSubQuery();


            //test table

            Test3.CreateTableIfNotExists();

            Test3.Insert(new Test3()
            {
                MyName = "test1", CreateDate = DateTime.Now
            });


            var first = Test3.QueryFirstOrDefault(null);

            Console.WriteLine(first.MyName + "=========" + first.CreateDate.ToString());

            Console.ReadLine();
        }