/*
	Copyright (c) 2004-2006, The Dojo Foundation
	All Rights Reserved.

	Licensed under the Academic Free License version 2.1 or above OR the
	modified BSD license. For more information on Dojo licensing, see:

		http://dojotoolkit.org/community/licensing.shtml
*/

dojo.provide("dojo.data.old.provider.MySql");
dojo.require("dojo.data.old.provider.Base");

// -------------------------------------------------------------------
// Constructor
// -------------------------------------------------------------------
dojo.data.old.provider.MySql = function() {
	/**
	 * summary:
	 * A MySql Data Provider knows how to connect to a MySQL database
	 * on a server and and make the content records available as
	 * dojo.data.old.Items.
	 */
	dojo.unimplemented('dojo.data.old.provider.MySql');
};

dojo.inherits(dojo.data.old.provider.MySql, dojo.data.old.provider.Base);
