[Bio] / Sprout / ERDB.pm Repository:
ViewVC logotype

Diff of /Sprout/ERDB.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.99, Fri Jul 11 01:04:08 2008 UTC revision 1.103, Tue Sep 16 18:57:59 2008 UTC
# Line 1062  Line 1062 
1062          # Push the result into the field list.          # Push the result into the field list.
1063          push @fieldList, $fieldString;          push @fieldList, $fieldString;
1064      }      }
     # If this is a root table, add the "new_record" flag. It defaults to 0, so  
     if ($rootFlag) {  
         push @fieldList, "new_record $TypeTable{boolean}->{sqlType} NOT NULL DEFAULT 0";  
     }  
1065      # Convert the field list into a comma-delimited string.      # Convert the field list into a comma-delimited string.
1066      my $fieldThing = join(', ', @fieldList);      my $fieldThing = join(', ', @fieldList);
1067      # Insure the table is not already there.      # Insure the table is not already there.
# Line 1532  Line 1528 
1528      return sort keys %{$entityList};      return sort keys %{$entityList};
1529  }  }
1530    
1531    
1532    =head3 GetConnectingRelationships
1533    
1534        my @list = $erdb->GetConnectingRelationships($entityName);
1535    
1536    Return a list of the relationships connected to the specified entity.
1537    
1538    =over 4
1539    
1540    =item entityName
1541    
1542    Entity whose connected relationships are desired.
1543    
1544    =item RETURN
1545    
1546    Returns a list of the relationships that originate from the entity.
1547    If the entity is on the from end, it will return the relationship
1548    name. If the entity is on the to end it will return the converse of
1549    the relationship name.
1550    
1551    =back
1552    
1553    =cut
1554    
1555    sub GetConnectingRelationships {
1556        # Get the parameters.
1557        my ($self, $entityName) = @_;
1558        # Declare the return variable.
1559        my @retVal;
1560        # Get the relationship list.
1561        my $relationships = $self->{_metaData}->{Relationships};
1562        # Find the entity.
1563        my $entity = $self->{_metaData}->{Entities}->{$entityName};
1564        # Only proceed if the entity exists.
1565        if (! defined $entity) {
1566            Trace("Entity $entityName not found.") if T(3);
1567        } else {
1568            # Loop through the relationships.
1569            my @rels = keys %$relationships;
1570            Trace(scalar(@rels) . " relationships found in connection search.") if T(3);
1571            for my $relationshipName (@rels) {
1572                my $relationship = $relationships->{$relationshipName};
1573                if ($relationship->{from} eq $entityName) {
1574                    # Here we have a forward relationship.
1575                    push @retVal, $relationshipName;
1576                } elsif ($relationship->{to} eq $entityName) {
1577                    # Here we have a backward relationship. In this case, the
1578                    # converse relationship name is preferred if it exists.
1579                    my $converse = $relationship->{converse} || $relationshipName;
1580                    push @retVal, $converse;
1581                }
1582            }
1583        }
1584        # Return the result.
1585        return @retVal;
1586    }
1587    
1588    
1589  =head3 GetDataTypes  =head3 GetDataTypes
1590    
1591      my %types = ERDB::GetDataTypes();      my %types = ERDB::GetDataTypes();
# Line 2316  Line 2370 
2370      }      }
2371      # Now we parse the key names into sort parameters. First, we prime the return      # Now we parse the key names into sort parameters. First, we prime the return
2372      # string.      # string.
2373      my $retVal = "sort -t\"\t\" ";      my $retVal = "sort -S 1G -T\"$FIG_Config::temp\" -t\"\t\" ";
2374      # Get the relation's field list.      # Get the relation's field list.
2375      my @fields = @{$relationData->{Fields}};      my @fields = @{$relationData->{Fields}};
2376      # Loop through the keys.      # Loop through the keys.
# Line 2346  Line 2400 
2400                  # will stop the inner loop. Note that the field number is                  # will stop the inner loop. Note that the field number is
2401                  # 1-based in the sort command, so we have to increment the                  # 1-based in the sort command, so we have to increment the
2402                  # index.                  # index.
2403                  $fieldSpec = ($i + 1) . $modifier;                  my $realI = $i + 1;
2404                    $fieldSpec = "$realI,$realI$modifier";
2405              }              }
2406          }          }
2407          # Add this field to the sort command.          # Add this field to the sort command.
# Line 2737  Line 2792 
2792                  push @missing, $fieldName;                  push @missing, $fieldName;
2793              }              }
2794          }          }
         # If we are the primary relation, add the new-record flag.  
         if ($relationName eq $newObjectType) {  
             push @valueList, 1;  
             push @fieldNameList, "new_record";  
         }  
2795          # Only proceed if there are no missing fields.          # Only proceed if there are no missing fields.
2796          if (@missing > 0) {          if (@missing > 0) {
2797              Trace("Relation $relationName for $newObjectType skipped due to missing fields: " .              Trace("Relation $relationName for $newObjectType skipped due to missing fields: " .
# Line 2971  Line 3021 
3021      # Analyze the table to improve performance.      # Analyze the table to improve performance.
3022      if (! $options{partial}) {      if (! $options{partial}) {
3023          Trace("Analyzing and compacting $relationName.") if T(3);          Trace("Analyzing and compacting $relationName.") if T(3);
3024          $dbh->vacuum_it($relationName);          $self->Analyze($relationName);
3025      }      }
3026      Trace("$relationName load completed.") if T(3);      Trace("$relationName load completed.") if T(3);
3027      # Return the statistics.      # Return the statistics.
3028      return $retVal;      return $retVal;
3029  }  }
3030    
3031    =head3 Analyze
3032    
3033        $erdb->Analyze($tableName);
3034    
3035    Analyze and compact a table in the database. This is useful after a load
3036    to improve the performance of the indexes.
3037    
3038    =over 4
3039    
3040    =item tableName
3041    
3042    Name of the table to be analyzed and compacted.
3043    
3044    =back
3045    
3046    =cut
3047    
3048    sub Analyze {
3049        # Get the parameters.
3050        my ($self, $tableName) = @_;
3051        # Analyze the table.
3052        $self->{_dbh}->vacuum_it($tableName);
3053    }
3054    
3055    =head3 TruncateTable
3056    
3057        $erdb->TruncateTable($table);
3058    
3059    Delete all rows from a table quickly. This uses the built-in SQL
3060    C<TRUNCATE> statement, which effectively drops and re-creates a table
3061    with all its settings intact.
3062    
3063    =over 4
3064    
3065    =item table
3066    
3067    Name of the table to be cleared.
3068    
3069    =back
3070    
3071    =cut
3072    
3073    sub TruncateTable {
3074        # Get the parameters.
3075        my ($self, $table) = @_;
3076        # Get the database handle.
3077        my $dbh = $self->{_dbh};
3078        # Execute a truncation comment.
3079        $dbh->SQL("TRUNCATE TABLE $table");
3080    }
3081    
3082    
3083  =head3 CreateSearchIndex  =head3 CreateSearchIndex
3084    
3085      $erdb->CreateSearchIndex($objectName);      $erdb->CreateSearchIndex($objectName);
# Line 3158  Line 3260 
3260      my $query = $self->Get([$entityType], "$entityType(id) = ?", [$ID]);      my $query = $self->Get([$entityType], "$entityType(id) = ?", [$ID]);
3261      # Get the first (and only) object.      # Get the first (and only) object.
3262      my $retVal = $query->Fetch();      my $retVal = $query->Fetch();
3263        if (T(3)) {
3264            if ($retVal) {
3265                Trace("Entity $entityType \"$ID\" found.");
3266            } else {
3267                Trace("Entity $entityType \"$ID\" not found.");
3268            }
3269        }
3270      # Return the result.      # Return the result.
3271      return $retVal;      return $retVal;
3272  }  }
# Line 3350  Line 3459 
3459          push @retVal, \@rowData;          push @retVal, \@rowData;
3460          $fetched++;          $fetched++;
3461      }      }
     Trace("$fetched rows returned in GetAll.") if T(SQL => 4);  
3462      # Return the resulting list.      # Return the resulting list.
3463      return @retVal;      return @retVal;
3464  }  }

Legend:
Removed from v.1.99  
changed lines
  Added in v.1.103

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3