मेरे पास कुछ कोड है जो डेटाबेस में सम्मिलन से पहले कुछ डेटा mysql enum में सुनिश्चित करने की आवश्यकता है।मैं पर्ल में MySQL enum मानों को कैसे निकालें?
sub enum_values {
my ($self, $schema, $table, $column) = @_;
# don't eval to let the error bubble up
my $columns = $schema->storage->dbh->selectrow_hashref(
"SHOW COLUMNS FROM `$table` like ?",
{},
$column
);
unless ($columns) {
X::Internal::Database::UnknownColumn->throw(
column => $column,
table => $table,
);
}
my $type = $columns->{Type} or X::Panic->throw(
details => "Could not determine type for $table.$column",
);
unless ($type =~ /\Aenum\((.*)\)\z/) {
X::Internal::Database::IncorrectTypeForColumn->throw(
type_wanted => 'enum',
type_found => $type,
);
}
$type = $1;
require Text::CSV_XS;
my $csv = Text::CSV_XS->new;
$csv->parse($type) or X::Panic->throw(
details => "Could not parse enum CSV data: ".$csv->error_input,
);
return map { /\A'(.*)'\z/; $1 }$csv->fields;
}
हम DBIx::Class उपयोग कर रहे हैं: स्पष्ट तरीका मैं ऐसा करने का मिल गया है निम्नलिखित कोड है। निश्चित रूप से इसे पूरा करने का एक बेहतर तरीका है? (ध्यान दें कि हमारे तालिका से $ तालिका सारणी आ रही है, किसी बाहरी स्रोत से नहीं। इस प्रकार, कोई सुरक्षा समस्या नहीं है)।
अच्छा :-)। हालांकि किसी को एक स्पष्ट जगह पर दस्तावेज करना चाहिए। –
उत्कृष्ट। आपका बहुत बहुत धन्यवाद! – Ovid
एफडब्ल्यूआईडब्ल्यू, मैंने गुलाब :: डीबी :: ऑब्जेक्ट से उस जवाब को खींच लिया, जो आत्मनिरीक्षण और स्वचालित रूप से MySQL enums, Postgres array कॉलम, और कई अन्य प्रकारों को कॉन्फ़िगर करेगा। इसका कोड उत्तर का एक अच्छा स्रोत है जब डीबीडी :: * दस्तावेज़ कम हो जाते हैं। –