Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
doctrine-dbal
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Tomáš Trávníček
doctrine-dbal
Commits
7c38b012
Commit
7c38b012
authored
Nov 17, 2006
by
zYne
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added Mssql export driver
parent
61c793c2
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
240 additions
and
0 deletions
+240
-0
Mssql.php
lib/Doctrine/Export/Mssql.php
+240
-0
No files found.
lib/Doctrine/Export/Mssql.php
0 → 100644
View file @
7c38b012
<?php
/*
* $Id$
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the LGPL. For more information, see
* <http://www.phpdoctrine.com>.
*/
Doctrine
::
autoload
(
'Doctrine_Export'
);
/**
* Doctrine_Export_Oracle
*
* @package Doctrine
* @author Konsta Vesterinen <kvesteri@cc.hut.fi>
* @author Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
* @author Frank M. Kromann <frank@kromann.info> (PEAR MDB2 Mssql driver)
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
* @category Object Relational Mapping
* @link www.phpdoctrine.com
* @since 1.0
* @version $Revision$
*/
class
Doctrine_Export_Mssql
extends
Doctrine_Export
{
/**
* create a new database
*
* @param string $name name of the database that should be created
* @return void
*/
public
function
createDatabase
(
$name
)
{
$name
=
$db
->
quoteIdentifier
(
$name
,
true
);
$query
=
"CREATE DATABASE
$name
"
;
if
(
$db
->
options
[
'database_device'
])
{
$query
.=
' ON '
.
$db
->
options
[
'database_device'
];
$query
.=
$db
->
options
[
'database_size'
]
?
'='
.
$db
->
options
[
'database_size'
]
:
''
;
}
return
$db
->
standaloneQuery
(
$query
,
null
,
true
);
}
/**
* drop an existing database
*
* @param string $name name of the database that should be dropped
* @return void
*/
public
function
dropDatabase
(
$name
)
{
$name
=
$db
->
quoteIdentifier
(
$name
,
true
);
return
$db
->
standaloneQuery
(
"DROP DATABASE
$name
"
,
null
,
true
);
}
/**
* alter an existing table
*
* @param string $name name of the table that is intended to be changed.
* @param array $changes associative array that contains the details of each type
* of change that is intended to be performed. The types of
* changes that are currently supported are defined as follows:
*
* name
*
* New name for the table.
*
* add
*
* Associative array with the names of fields to be added as
* indexes of the array. The value of each entry of the array
* should be set to another associative array with the properties
* of the fields to be added. The properties of the fields should
* be the same as defined by the Metabase parser.
*
*
* remove
*
* Associative array with the names of fields to be removed as indexes
* of the array. Currently the values assigned to each entry are ignored.
* An empty array should be used for future compatibility.
*
* rename
*
* Associative array with the names of fields to be renamed as indexes
* of the array. The value of each entry of the array should be set to
* another associative array with the entry named name with the new
* field name and the entry named Declaration that is expected to contain
* the portion of the field declaration already in DBMS specific SQL code
* as it is used in the CREATE TABLE statement.
*
* change
*
* Associative array with the names of the fields to be changed as indexes
* of the array. Keep in mind that if it is intended to change either the
* name of a field and any other properties, the change array entries
* should have the new names of the fields as array indexes.
*
* The value of each entry of the array should be set to another associative
* array with the properties of the fields to that are meant to be changed as
* array entries. These entries should be assigned to the new values of the
* respective properties. The properties of the fields should be the same
* as defined by the Metabase parser.
*
* Example
* array(
* 'name' => 'userlist',
* 'add' => array(
* 'quota' => array(
* 'type' => 'integer',
* 'unsigned' => 1
* )
* ),
* 'remove' => array(
* 'file_limit' => array(),
* 'time_limit' => array()
* ),
* 'change' => array(
* 'name' => array(
* 'length' => '20',
* 'definition' => array(
* 'type' => 'text',
* 'length' => 20,
* ),
* )
* ),
* 'rename' => array(
* 'sex' => array(
* 'name' => 'gender',
* 'definition' => array(
* 'type' => 'text',
* 'length' => 1,
* 'default' => 'M',
* ),
* )
* )
* )
*
* @param boolean $check indicates whether the function should just check if the DBMS driver
* can perform the requested table alterations if the value is true or
* actually perform them otherwise.
* @return void
*/
public
function
alterTable
(
$name
,
$changes
,
$check
)
{
foreach
(
$changes
as
$change_name
=>
$change
)
{
switch
(
$change_name
)
{
case
'add'
:
break
;
case
'remove'
:
break
;
case
'name'
:
case
'rename'
:
case
'change'
:
default
:
return
$db
->
raiseError
(
MDB2_ERROR_CANNOT_ALTER
,
null
,
null
,
'alterTable: change type "'
.
$change_name
.
'" not yet supported'
);
}
}
if
(
$check
)
{
return
MDB2_OK
;
}
$query
=
''
;
if
(
!
empty
(
$changes
[
'add'
])
&&
is_array
(
$changes
[
'add'
]))
{
foreach
(
$changes
[
'add'
]
as
$field_name
=>
$field
)
{
if
(
$query
)
{
$query
.=
', '
;
}
$query
.=
'ADD '
.
$db
->
getDeclaration
(
$field
[
'type'
],
$field_name
,
$field
);
}
}
if
(
!
empty
(
$changes
[
'remove'
])
&&
is_array
(
$changes
[
'remove'
]))
{
foreach
(
$changes
[
'remove'
]
as
$field_name
=>
$field
)
{
if
(
$query
)
{
$query
.=
', '
;
}
$field_name
=
$db
->
quoteIdentifier
(
$field_name
,
true
);
$query
.=
'DROP COLUMN '
.
$field_name
;
}
}
if
(
!
$query
)
{
return
MDB2_OK
;
}
$name
=
$db
->
quoteIdentifier
(
$name
,
true
);
return
$db
->
exec
(
"ALTER TABLE
$name
$query
"
);
}
/**
* create sequence
*
* @param string $seq_name name of the sequence to be created
* @param string $start start value of the sequence; default is 1
* @return void
*/
public
function
createSequence
(
$seq_name
,
$start
=
1
)
{
$sequence_name
=
$db
->
quoteIdentifier
(
$db
->
getSequenceName
(
$seq_name
),
true
);
$seqcol_name
=
$db
->
quoteIdentifier
(
$db
->
options
[
'seqcol_name'
],
true
);
$query
=
"CREATE TABLE
$sequence_name
(
$seqcol_name
"
.
"INT PRIMARY KEY CLUSTERED IDENTITY(
$start
,1) NOT NULL)"
;
$res
=
$db
->
exec
(
$query
);
if
(
$start
==
1
)
{
return
true
;
}
$query
=
'SET IDENTITY_INSERT $sequence_name ON '
.
'INSERT INTO $sequence_name ('
.
$seqcol_name
.
') VALUES ( '
.
$start
.
')'
;
$res
=
$db
->
exec
(
$query
);
$result
=
$db
->
exec
(
"DROP TABLE
$sequence_name
"
);
if
(
PEAR
::
isError
(
$result
))
{
return
$db
->
raiseError
(
$result
,
null
,
null
,
'createSequence: could not drop inconsistent sequence table'
);
}
return
$db
->
raiseError
(
$res
,
null
,
null
,
'createSequence: could not create sequence table'
);
}
/**
* This function drops an existing sequence
*
* @param string $seqName name of the sequence to be dropped
* @return void
*/
public
function
dropSequence
(
$seqName
)
{
$sequenceName
=
$db
->
quoteIdentifier
(
$db
->
getSequenceName
(
$seqName
),
true
);
return
$db
->
exec
(
'DROP TABLE '
.
$sequenceName
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment