It's been about 5 weeks since we release 2.0.1a, and things haven't slowed down a bit! So, a little later than initially promised, I'm proud to present SubSonic version 2.0.2, featuring a truly massive set of fixes and enhancements, as well as some entirely brand new features.
This is our first release since move the code base to Google Code, and in such, the first to really take advantage of user-submitted patches. The code here not only represents the contributions of the core team, but also a large number of SubSonic users who dove right in and tweaked, fixed, and enhance to core code base. While I won't try to mention everyone who contributed (as I'm sure I'd end up leaving people out) I would like to recognize Adam Fordham, who made us finally CLS compliant (woohoo!) and Jay Turpin who gave us some great patches the eliminate a ton of duplicated collection code, as well as an excellent batch save routine and ability to properly handle dirty records. Huge thanks to all who contributed!
Extra special recognition goes to team member Larry Beall, who is not only a great guy, but a true MySql wizard. Through his efforts, he single-handedly built up our MySql capability from only marginal support to being on par with SQL Server, support for transactions, views, stored procedures and relational constraints. Truly great stuff, and more than I thought we'd ever see. Larry - you rock!
A few more team mentions:
- Damien Guard, who called us on some hacks, and fixed a lot of longstanding sloppy and ugly code, making everyone's lives easier going forward.
- Phil Haack, who gave us support for stored procedure return values, laid the ground work for our next generation query framework, and provided Sugar inspiration.
- Gavin Joyce, who made some really nice enhancements to the scaffolds, and kept us honest in our VB support.
- Christopher Karper, who prepared and kept us focused on Mono support
Thank you everyone! Now, let's down to business...
What's New and Changed
While 2.0.2 is primarily a maintenance release, there are a handful of new features and significant changes, some of them breaking. Here are some of the highlights:
- A new class called Sugar has been added to SubSonic, representing a wide range of time saving utilities using friendly, readable naming conventions, that you'll wish you had on whatever your last project was.
- With the tagging of template files as embedded resources, Resources.resx was finally able to be removed from the code base. No more duplicate template definitions!
- MbUnit tests have replaced the Visual Studio Team System ones, removing a VSTS requirement for unit test execution
- Strong name support for those looking embed the SubSonic in the GAC.
- A breaking change to ToPascalCase, which makes it, well, work. This primarily represents an issue for those of you with table names in all caps, which will now be initial caps. We apologize for this breaking change, but it was the right thing to do.
- Initial support for the setting of pre-compile directives via database extended properties. Currently preliminary, and SQL Server only.
- Serialization support via a new provider configuration parameter, generateNullableProperties. Set to true by default, setting it to false will generate classes the that support serialization
- An option to disable the processing of database default values via the provider setting setPropertyDefaultsFromDatabase. Now set to false by default.
- An option to disable the automatic generation of ODS controllers via the provider setting generateODSControllers. Set to true by default.
- A new calendar control for the Scaffolds, which no longer necessitates postback on date changes.
- A new installer using NSIS, that won't clog up your registry. Just delete the install folder to remove an installation.
What's Fixed
Below is a list of the Work Items closed in 2.0.2. A handful of these were actually handled in 2.0.1 or earlier, but never assigned a release.
These represent only the reported bug fixes. There are at least as many fixes drawn from forum posts. Unlike Work Items, we can't track those bugs (hint, hint)
Work Item 4990 - Query - Add GetCountDistinct support
Work Item 5207 - ToXML() for a collection
Work Item 7065 - MySqlDataProvider.GetForeignKeyTableName
Work Item 7326 - Computed column support
Work Item 7357 - Add table and view list to parameters
Work Item 8060 - Add an IsValid() method
Work Item 8473 - Database NULL should be returned as a distinct value
Work Item 8609 - Default Column Values on not-nullable columns
Work Item 9184 - MySqlDataProvider.GetTableSchema returns wrong info with MySQL 5.0.6.0
Work Item 9536 - Generated 1->Many methods not honoring exclusion list
Work Item 9559 - Change Set 21054 - SqlDataProvider.ScriptData() doesn't handle tables without primary keys
Work Item 9594 - UniqueIdentifier Defaults
Work Item 9661 - Ruby on Rails style model validations
Work Item 9718 - new RadioButtons control (like DropDown)
Work Item 9720 - DropDown needs PromptValue
Work Item 9826 - DropDown move createchildcontrol code -> OnInit
Work Item 9865 - Read only fields - update/insert
Work Item 9918 - GUID default values
Work Item 9919 - List property access on Collection objects
Work Item 9931 - Multiple OrderBy's for collections
Work Item 9981 - M2M bug in 21746
Work Item 9990 - Sonic.exe crashs
Work Item 9996 - DataService.GetInstance("Default")
Work Item 9998 - Review DropDownList Creation
Work Item 10007 - excludeTableList regex support
Work Item 10009 - Default value in Column causes compilation error
Work Item 10028 - Northwind Scripts Broken
Work Item 10032 - Add IN() to the Update
Work Item 10104 - Bug fix for templateDirectory when using SubCommander
Work Item 10168 - Unable to insert using oracle
Work Item 10184 - Allow wildcard based table/view exclusions
Work Item 10204 - NewSequentialId() as default for UniqueIdentifier
Work Item 10212 - Dropdown control with where clause
Work Item 10214 - ChangeSet 22117: Fails on NewSequentialId() default set up for PK Id (UniqueIdentifier ) field
Work Item 10251 - ObjectDataSource deleting not working (Subsonic 2.0.1)
Work Item 10258 - Not defining a Namespace causes syntax error
Work Item 10267 - Query.GetCount only considers one where clause
Work Item 10268 - VB Issue: Character Not Recognized
Work Item 10271 - ValidateColumnSettings DATE failure
Work Item 10273 - Utility.IsRegexMatch is broken
Work Item 10276 - Inserts do not work with Oracle
Work Item 10282 - Mulitple WHERE clause on same column
Work Item 10292 - Update MySql connector assembly to newer version
Work Item 10300 - RadioButton Control
Work Item 10302 - Oracle nullable columns not detected
Work Item 10304 - Validation doesn't treat empty strings as NULL
Work Item 10307 - Orderby, set orderstring
Work Item 10319 - CopyTo(abstract record) exception with nullable int column
Work Item 10326 - Scaffold edit broken in 2.01 if ID is GUID
Work Item 10346 - Scaffolding ManyToManyMap does not work.
Work Item 10351 - BUG: ValidateColumnSettings doesn't detect valid guid's correctly.
Work Item 10355 - Scaffold DATETIME Calendar Option
Work Item 10356 - Provider.GetTables() ignores SharedDbConnectionScope
Work Item 10368 - classes from views, column not found: ValueX
Work Item 10371 - bug in list.Comparer
Work Item 10392 - Nullable parameter arguments for stored procedures
Work Item 10432 - Little code cleanup Builder.cs
Work Item 10444 - Scaffold.HiddenGridColumns do not get hidden
Work Item 10450 - Handle Output Parameters for Stored Procs
Work Item 10468 - patch for ODS_controllers
Work Item 10505 - Scaffold: Hidden PK column issue
Work Item 10517 - strong name Subsonic.dll
Work Item 10540 - ExtendedProperties: Exception occurs with multiple index tables
Work Item 10543 - MysqlDataProvider fails with System.NotSupportedException
Work Item 10552 - VSTS reference leftover in SubSonic.Tests.csproj
Work Item 10562 - Revision 53 - HoursFromNow
Work Item 10564 - Revision 53 - Reference to MbUnit not working
Work Item 10568 - R56 - Natural Numbers
Work Item 10592 - StarterSite 2.0: ContentServices.cs - Improper URL naming Scheme
Work Item 10596 - Error generating views in MySql
Work Item 10606 - R66 - Calendar Control
Work Item 10607 - R66 - M2M not being created
Work Item 10609 - R66 - excludeTableList
Work Item 10640 - Unterminated string constant
Work Item 10690 - AllStructs.cs: Incorrect values assigned to Tables and Views members
Work Item 10701 - QuickTable control doesn't filter results correctly
Work Item 10734 - MySql - DelimitDbName() method
Work Item 10735 - ValidateColumnSettings Boolean failure - MySql
Work Item 10744 - Fast Insert/Update
Work Item 10759 - patch for medium trust APTAC
Work Item 10798 - MySQL Stored Procedures Output Parameters
Work Item 10802 - rev86 identity columns crashing updates
Work Item 10826 - Controls need a TagPrefix defined
Work Item 10933 - SQLDataProvider.ExecuteTransaction depends on defaultProvider
Work Item 10938 - Writeable Foreign Key Collections
Work Item 10948 - templateDirectory is ignored on command-line
Work Item 10977 - rev95 CS templates - ActiveList requires 1 arg
Work Item 11008 - Generating Nullable Parameters in SPs
Work Item 11049 - VB_ClassTemplate: Invalid Syntax
Work Item 11069 - BUG(S) w/ FIX: ExecuteTransaction() does not use AddParams()
Work Item 11089 - VB Template
Work Item 11099 - feature request: SP ReturnValue
Work Item 11114 - IN command doesn't work with Update or Delete commands
Work Item 11132 - Templates not utilizing LoadAndCloseReader - connection pool timeouts
Work Item 11151 - MySqlDataProvider - Use DbType.DateTime for 'timestamp' instead of DbType.Time
Work Item 11190 - Sql 2005 TimeStamp - Can't Save Not A Valid Value
Work Item 11221 - IsDeleted should also interpret null value as false
Work Item 11225 - AllStructs (Database Structure)
Work Item 11226 - SqlDataReader not disposed when an exception is thrown
Work Item 11233 - Controller Configuration Switch
Work Item 11252 - "unrecognized escape sequence" - schema.SchemaName wrong for WinAD table owners
Work Item 11266 - Get Select DISTINCT back in the Game
So that's 2.0.2. We hope that you're as excited about it as we are!