Пример #1
0
 // todo: Min, Max
 // todo: Exists
 /// <summary>
 /// 生成 select count( distinct colName ) from xxxx where .....
 /// </summary>
 /// <param name="t"></param>
 /// <param name="col"></param>
 /// <param name="distinct"></param>
 /// <param name="sq"></param>
 /// <returns></returns>
 public static MyQuery Count( DbTable t, DbColumn col = null, bool distinct = false, MyQuery sq = null )
 {
     if( col != null && col.parent != t ) throw new Exception( "参数2: 字段 不属于 参数1: 表" );
     var q = new MyQuery( "select count(" + ( distinct ? " distinct" : "" ) + @" " + ( col == null ? "*" : col.name ) + @" ) from ", t );
     if( sq != null ) q.Append( sq );
     return q;
 }
Пример #2
0
        public DbTable AddColumn( DbColumn c )
        {
            columns.Add( c );
            nullflags.Add( new List<bool>() );

            switch( c.dataType )
            {
            case DbDataTypes.Boolean:
                columnDatas.Add( new List<bool>() ); break;
            case DbDataTypes.Int8:
                columnDatas.Add( new List<sbyte>() ); break;
            case DbDataTypes.Int16:
                columnDatas.Add( new List<short>() ); break;
            case DbDataTypes.Int32:
                columnDatas.Add( new List<int>() ); break;
            case DbDataTypes.Int64:
                columnDatas.Add( new List<long>() ); break;
            case DbDataTypes.UInt8:
                columnDatas.Add( new List<byte>() ); break;
            case DbDataTypes.UInt16:
                columnDatas.Add( new List<ushort>() ); break;
            case DbDataTypes.UInt32:
                columnDatas.Add( new List<uint>() ); break;
            case DbDataTypes.UInt64:
                columnDatas.Add( new List<ulong>() ); break;
            case DbDataTypes.Float:
                columnDatas.Add( new List<float>() ); break;
            case DbDataTypes.Double:
                columnDatas.Add( new List<double>() ); break;
            case DbDataTypes.DateTime:
                columnDatas.Add( new List<DateTime>() ); break;
            case DbDataTypes.String:
                columnDatas.Add( new List<string>() ); break;
            case DbDataTypes.Bytes:
                columnDatas.Add( new List<byte[]>() ); break;
            default:
                break;
            }

            return this;
        }
Пример #3
0
 /// <summary>
 /// 生成 select min( colName ) from xxxx where .....
 /// </summary>
 public static MyQuery Min( DbColumn col, MyQuery sq = null )
 {
     var q = new MyQuery( "select min( ", col.name, " ) from ", col.parent );
     if( sq != null ) q.Append( sq );
     return q;
 }
Пример #4
0
 // 取 dr 中某字段的数据并返回
 public static object GetValue( DbColumn col, MySqlDataReader r, int idx )
 {
     switch( col.dataType )
     {
     case DbDataTypes.Boolean:
         return r.GetBoolean( idx );
     case DbDataTypes.Int8:
         return r.GetSByte( idx );
     case DbDataTypes.Int16:
         return r.GetInt16( idx );
     case DbDataTypes.Int32:
         return r.GetInt32( idx );
     case DbDataTypes.Int64:
         return r.GetInt64( idx );
     case DbDataTypes.UInt8:
         return r.GetByte( idx );
     case DbDataTypes.UInt16:
         return r.GetUInt16( idx );
     case DbDataTypes.UInt32:
         return r.GetUInt32( idx );
     case DbDataTypes.UInt64:
         return r.GetUInt64( idx );
     case DbDataTypes.Float:
         return r.GetFloat( idx );
     case DbDataTypes.Double:
         return r.GetDouble( idx );
     case DbDataTypes.DateTime:
         return r.GetDateTime( idx );
     case DbDataTypes.String:
         return r.GetString( idx );
     case DbDataTypes.Bytes:
         var len = (int)r.GetBytes( idx, 0, null, 0, 0 );
         var buf = new byte[ len ];
         r.GetBytes( idx, 0, buf, 0, len );
         return buf;
     default:
         throw new Exception( "unsupported DbType" );
     }
 }
Пример #5
0
        public static DbQueryResult GetInfo()
        {
            using( var conn = new MySqlConnection( connStr ) )
            {
                conn.Open();
                var result = new DbQueryResult();
                var _tables = result.tables;
                result.affectedRows = 0;

                result.schema = cfg.database;

                var q = new MyQuery( "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = ", MyParameterDataTypes.String );
                q[ 0 ].Assign( cfg.database );
                var dt = MyUtils.ExecuteDbTable( conn, q.ToSql() );

                for( int i = 0; i < dt.rowCount; ++i )
                {
                    var dr = dt[ i ];
                    _tables.Add( new DbTable
                    {
                        name = dr[ "TABLE_NAME" ].ToString(),
                        comment = dr[ "TABLE_COMMENT" ].ToString()
                    } );
                }

                q.Assign( "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = ", MyParameterDataTypes.String, " AND TABLE_NAME = ", MyParameterDataTypes.String );
                q[ 0 ].Assign( cfg.database );
                foreach( var t in _tables )
                {
                    q[ 1 ].Assign( t.name );
                    dt = MyUtils.ExecuteDbTable( conn, q.ToSql() );

                    for( int i = 0; i < dt.rowCount; ++i )
                    {
                        var dr = dt[ i ];
                        var c = new DbColumn
                        {
                            name = (string)dr[ "COLUMN_NAME" ].ToString(),
                            columnIndex = i,
                            dataType = GetDataType( (string)dr[ "DATA_TYPE" ], (string)dr[ "COLUMN_TYPE" ] ),
                            nullable = (string)dr[ "IS_NULLABLE" ] == "YES",
                            comment = (string)dr[ "COLUMN_COMMENT" ],
                            autoIncrement = (string)dr[ "EXTRA" ] == "auto_increment",
                            timestamp = (string)dr[ "DATA_TYPE" ] == "timestamp" && (string)dr[ "COLUMN_DEFAULT" ] == "CURRENT_TIMESTAMP",
                            primaryKey = (string)dr[ "COLUMN_KEY" ] == "PRI",
                            parent = t
                        };
                        t.AddColumn( c );
                    }
                }

                return result;
            }
        }