internal static SqlDbType ToSqlDbType(this SQLiteFieldType sqLiteType) { switch (sqLiteType) { case SQLiteFieldType.Blob: return(SqlDbType.VarBinary); case SQLiteFieldType.Boolean: return(SqlDbType.Bit); case SQLiteFieldType.DateTime: return(SqlDbType.DateTime); case SQLiteFieldType.Integer: return(SqlDbType.BigInt); case SQLiteFieldType.Numeric: return(SqlDbType.Decimal); case SQLiteFieldType.Real: return(SqlDbType.Float); case SQLiteFieldType.Text: return(SqlDbType.NVarChar); default: return(SqlDbType.Variant); } }
protected override long InternalExecute() { this.TableDefinition = new TableDefinition(this.tableName); HashSet <string> unique = new HashSet <string>(); string sql = string.Format( @"PRAGMA index_info('{0}')", this.TableDefinition.GetIndexName() ); // Log.DebugFormat( // "Table:'{0}',Index:'{1}',Query:'{2}'", // this.tableName, // this.TableDefinition.GetIndexName(), // sql // ); this.ExecuteQuery( sql, reader => unique.Add((string)reader["name"]) ); if (this.tableName != null) { sql = string.Format( @"PRAGMA table_info({0})", this.tableName.AsDbName() ); // Log.DebugFormat("Table:'{0}',Query:'{1}'", // this.tableName, // sql // ); List <string> primaryKeyFields = new List <string>(); this.ExecuteQuery( sql, reader => { string fieldName = (string)reader["name"]; SQLiteFieldType fieldType = SQLiteTypeHelper.Parse(reader["type"].ToString()); this.TableDefinition.AddField( new FieldDefinition( fieldName, fieldType.ToSqlDbType(), unique.Contains(fieldName), (reader["notnull"] != DBNull.Value) && (long)reader["notnull"] == 1L, (reader["dflt_value"] == DBNull.Value) ? null : reader["dflt_value"] ) ); object pk = reader["pk"]; if (pk != DBNull.Value && (long)pk > 0L) { primaryKeyFields.Add(fieldName); } } ); if (this.TableDefinition.Fields.Count == 0) { this.TableDefinition = null; } else { if (primaryKeyFields.Count == 1) { string keyField = primaryKeyFields[0]; TableDefinition.SetSimplePrimaryKey( keyField, TableDefinition.Fields[keyField].SqlType == SqlDbType.BigInt ); } else { TableDefinition.SetCompoundPrimaryKey( primaryKeyFields ); } } } return(0L); }