MCPcopy
hub / github.com/ent/ent / nodes

Method nodes

dialect/sql/sqlgraph/graph.go:1507–1586  ·  view source on GitHub ↗
(ctx context.Context, drv dialect.Driver)

Source from the content-addressed store, hash-verified

1505}
1506
1507func (c *batchCreator) nodes(ctx context.Context, drv dialect.Driver) error {
1508 if len(c.Nodes) == 0 {
1509 return nil
1510 }
1511 columns := make(map[string]struct{})
1512 values := make([]map[string]driver.Value, len(c.Nodes))
1513 for i, node := range c.Nodes {
1514 if i > 0 && node.Table != c.Nodes[i-1].Table {
1515 return fmt.Errorf("more than 1 table for batch insert: %q != %q", node.Table, c.Nodes[i-1].Table)
1516 }
1517 values[i] = make(map[string]driver.Value)
1518 if node.ID != nil && node.ID.Value != nil {
1519 columns[node.ID.Column] = struct{}{}
1520 values[i][node.ID.Column] = node.ID.Value
1521 }
1522 edges := EdgeSpecs(node.Edges).GroupRel()
1523 err := setTableColumns(node.Fields, edges, func(column string, value driver.Value) {
1524 columns[column] = struct{}{}
1525 values[i][column] = value
1526 })
1527 if err != nil {
1528 return err
1529 }
1530 }
1531 for column := range columns {
1532 for i := range values {
1533 if _, exists := values[i][column]; !exists {
1534 if c.Nodes[i].ID != nil && column == c.Nodes[i].ID.Column {
1535 // If the ID value was provided to one of the nodes, it should be
1536 // provided to all others because this affects the way we calculate
1537 // their values in MySQL and SQLite dialects.
1538 return fmt.Errorf("inconsistent id values for batch insert")
1539 }
1540 // Assign NULL values for empty placeholders.
1541 values[i][column] = nil
1542 }
1543 }
1544 }
1545 sorted := keys(columns)
1546 insert := c.builder.Insert(c.Nodes[0].Table).Schema(c.Nodes[0].Schema).Default().Columns(sorted...)
1547 for i := range values {
1548 vs := make([]any, len(sorted))
1549 for j, c := range sorted {
1550 vs[j] = values[i][c]
1551 }
1552 insert.Values(vs...)
1553 }
1554 tx, err := c.mayTx(ctx, drv)
1555 if err != nil {
1556 return err
1557 }
1558 c.tx = tx
1559 if err := func() error {
1560 // In case the spec does not contain an ID field, we assume
1561 // we interact with an edge-schema with composite primary key.
1562 if c.Nodes[0].ID == nil {
1563 c.ensureConflict(insert)
1564 query, args := insert.Query()

Callers 1

BatchCreateFunction · 0.95

Calls 15

mayTxMethod · 0.95
ensureConflictMethod · 0.95
batchInsertMethod · 0.95
EdgeSpecsTypeAlias · 0.85
setTableColumnsFunction · 0.85
GroupRelMethod · 0.80
InsertMethod · 0.80
batchAddM2MMethod · 0.80
addFKEdgesMethod · 0.80
keysFunction · 0.70
rollbackFunction · 0.70
ColumnsMethod · 0.65

Tested by

no test coverage detected