Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4135004
AbstractAsset.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
AbstractAsset.php
View Options
<?php
namespace
Doctrine\DBAL\Schema
;
use
Doctrine\DBAL\Platforms\AbstractPlatform
;
use
Doctrine\Deprecations\Deprecation
;
use
function
array_map
;
use
function
crc32
;
use
function
dechex
;
use
function
explode
;
use
function
implode
;
use
function
str_replace
;
use
function
strpos
;
use
function
strtolower
;
use
function
strtoupper
;
use
function
substr
;
/**
* The abstract asset allows to reset the name of all assets without publishing this to the public userland.
*
* This encapsulation hack is necessary to keep a consistent state of the database schema. Say we have a list of tables
* array($tableName => Table($tableName)); if you want to rename the table, you have to make sure
*/
abstract
class
AbstractAsset
{
/** @var string */
protected
$_name
=
''
;
/**
* Namespace of the asset. If none isset the default namespace is assumed.
*
* @var string|null
*/
protected
$_namespace
;
/** @var bool */
protected
$_quoted
=
false
;
/**
* Sets the name of this asset.
*
* @param string $name
*
* @return void
*/
protected
function
_setName
(
$name
)
{
if
(
$this
->
isIdentifierQuoted
(
$name
))
{
$this
->
_quoted
=
true
;
$name
=
$this
->
trimQuotes
(
$name
);
}
if
(
strpos
(
$name
,
'.'
)
!==
false
)
{
$parts
=
explode
(
'.'
,
$name
);
$this
->
_namespace
=
$parts
[
0
];
$name
=
$parts
[
1
];
}
$this
->
_name
=
$name
;
}
/**
* Is this asset in the default namespace?
*
* @param string $defaultNamespaceName
*
* @return bool
*/
public
function
isInDefaultNamespace
(
$defaultNamespaceName
)
{
return
$this
->
_namespace
===
$defaultNamespaceName
||
$this
->
_namespace
===
null
;
}
/**
* Gets the namespace name of this asset.
*
* If NULL is returned this means the default namespace is used.
*
* @return string|null
*/
public
function
getNamespaceName
()
{
return
$this
->
_namespace
;
}
/**
* The shortest name is stripped of the default namespace. All other
* namespaced elements are returned as full-qualified names.
*
* @param string|null $defaultNamespaceName
*
* @return string
*/
public
function
getShortestName
(
$defaultNamespaceName
)
{
$shortestName
=
$this
->
getName
();
if
(
$this
->
_namespace
===
$defaultNamespaceName
)
{
$shortestName
=
$this
->
_name
;
}
return
strtolower
(
$shortestName
);
}
/**
* The normalized name is full-qualified and lower-cased. Lower-casing is
* actually wrong, but we have to do it to keep our sanity. If you are
* using database objects that only differentiate in the casing (FOO vs
* Foo) then you will NOT be able to use Doctrine Schema abstraction.
*
* Every non-namespaced element is prefixed with the default namespace
* name which is passed as argument to this method.
*
* @deprecated Use {@see getNamespaceName()} and {@see getName()} instead.
*
* @param string $defaultNamespaceName
*
* @return string
*/
public
function
getFullQualifiedName
(
$defaultNamespaceName
)
{
Deprecation
::
triggerIfCalledFromOutside
(
'doctrine/dbal'
,
'https://github.com/doctrine/dbal/pull/4814'
,
'AbstractAsset::getFullQualifiedName() is deprecated.'
.
' Use AbstractAsset::getNamespaceName() and ::getName() instead.'
,
);
$name
=
$this
->
getName
();
if
(
$this
->
_namespace
===
null
)
{
$name
=
$defaultNamespaceName
.
'.'
.
$name
;
}
return
strtolower
(
$name
);
}
/**
* Checks if this asset's name is quoted.
*
* @return bool
*/
public
function
isQuoted
()
{
return
$this
->
_quoted
;
}
/**
* Checks if this identifier is quoted.
*
* @param string $identifier
*
* @return bool
*/
protected
function
isIdentifierQuoted
(
$identifier
)
{
return
isset
(
$identifier
[
0
])
&&
(
$identifier
[
0
]
===
'`'
||
$identifier
[
0
]
===
'"'
||
$identifier
[
0
]
===
'['
);
}
/**
* Trim quotes from the identifier.
*
* @param string $identifier
*
* @return string
*/
protected
function
trimQuotes
(
$identifier
)
{
return
str_replace
([
'`'
,
'"'
,
'['
,
']'
],
''
,
$identifier
);
}
/**
* Returns the name of this schema asset.
*
* @return string
*/
public
function
getName
()
{
if
(
$this
->
_namespace
!==
null
)
{
return
$this
->
_namespace
.
'.'
.
$this
->
_name
;
}
return
$this
->
_name
;
}
/**
* Gets the quoted representation of this asset but only if it was defined with one. Otherwise
* return the plain unquoted value as inserted.
*
* @return string
*/
public
function
getQuotedName
(
AbstractPlatform
$platform
)
{
$keywords
=
$platform
->
getReservedKeywordsList
();
$parts
=
explode
(
'.'
,
$this
->
getName
());
foreach
(
$parts
as
$k
=>
$v
)
{
$parts
[
$k
]
=
$this
->
_quoted
||
$keywords
->
isKeyword
(
$v
)
?
$platform
->
quoteIdentifier
(
$v
)
:
$v
;
}
return
implode
(
'.'
,
$parts
);
}
/**
* Generates an identifier from a list of column names obeying a certain string length.
*
* This is especially important for Oracle, since it does not allow identifiers larger than 30 chars,
* however building idents automatically for foreign keys, composite keys or such can easily create
* very long names.
*
* @param string[] $columnNames
* @param string $prefix
* @param int $maxSize
*
* @return string
*/
protected
function
_generateIdentifierName
(
$columnNames
,
$prefix
=
''
,
$maxSize
=
30
)
{
$hash
=
implode
(
''
,
array_map
(
static
function
(
$column
):
string
{
return
dechex
(
crc32
(
$column
));
},
$columnNames
));
return
strtoupper
(
substr
(
$prefix
.
'_'
.
$hash
,
0
,
$maxSize
));
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Wed, Aug 19, 12:55 (3 w, 2 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
67/4d/17a98803cd02b0b4c58631193a2f
Default Alt Text
AbstractAsset.php (6 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment